数据结构
基本概念计算机处理的对象(数据)已经不再单纯是数值,而是研究计算机数据之间的关系,包括数据的逻辑结构和存储结构及数据的运算研究数据结构的意义:提高编程能力、可复用,维护性好,效率高 数据(Data) 数据即信息的载体,是能够输入到计算机中,且能被计算机识别、存储和处理的符号总称 数据元素(Data Element) 数据元素是数据的基本单位,又称为记录(Record) 数据结构的三要素 数据的逻辑结构表示数据运算之间的抽象关系,按每个元素可能具有直接的前趋数和直接的后继数将逻辑结构分为 ”线性结构“ 和 ”非线性结构“ 两大类集合:数据元素间除 ”同属一个集合外“...
c语言指针
什么是指针? 在计算机中内存是以字节为单位的连续编址空间,每一个字节单元对应着一个独一的编号,这个编号被称为内存单元的地址。 在特定的CPU架构下,内存地址的大小是固定的。 32位平台下地址为32个bit,即4个字节; 64位平台下地址为64个bit,即8个字节。 地址和指针:系统的内存好比带编号的小房间,地址对应着内存中的每个字节的编号,而指针也就是内存地址,它描述了数据在内存中的位置。 指针变量:指针变量本身不存储实际数据,而存储数据在内存中的地址,口语中的指针通常指的是指针变量。 指针的作用使程序简洁、紧凑、高效、有效表示复杂的数据结构、动态分配内存、能直接访问内存、方便处理字符串、得到多于一个的函数返回值 指针变量的一般形式格式:**<数据类型> * <指针变量名>;,如:int * p;** 数据类型要和这个地址中保存的数据的数据类型要保持一致其中 “ * ”...
标准I/O及缓冲区
标准I/O及缓冲区Linux下一切皆文件,全缓冲:当流的缓冲区无数据或无空间时才执行实际的 I/O 操作行缓冲:当输入和输出中遇到换行符(’ \n ‘)时,进行I/O 操作,当流和一个终端关联时,典型的行缓冲无缓冲:数据直接写入文件,流不进行缓冲 标准I/O预定义的3个流,程序运行时自动打开 流名称 描述符值 描述符 结构体名称 标准输入流 0 STDIN_FILENO stdin(默认行缓冲) 标准输出流 1 STDOUT_FILENO stdout(默认行缓冲) 标准错误流 2 STDERR_FILENO stderr 缓冲区的大小为1kb,即1024个字节 文件的打开和关闭1FILE *fopen(const char *path, const char *mode); path为文件路径 mode为打开方式 成功时发回FILE类型流指针,失败时返回NULL 模式参数 说明 “r” 或 “rb” 以只读的方式打开文件或二进制文件,文件必须存在 “r+” 或...
文件IO(系统IO)
文件IO(又称系统IO)posix(可移植操作系统接口)定义的一组函数,Linux系统下,标准IO基于文件IO实现 不提供缓冲机制,每次读写操作都会引起系统的调用,其核心概念是文件描述符 操作 标准IO 文件IO 打开文件 fopen open 关闭文件 fclose close 读取文件 getc、fgetc、gets、fgets、getchar、fread read 写入文件 putc、fputc、puts、fputs、putchar、fwrite write 文件描述符 每打开一个文件都有对应的一个文件描述符(非负整数),其从0开始分配,依次递增,进行文件IO操作时即通过文件描述符来完成 0(标准输入),1(标准输出),2(标准错误)是每个程序默认占用这三个文件描述符,后面打开的文件从3开始递增 文件IO的函数open函数用来创建或打开一个文件,在<fcntl.h>头文件中被定义 12int open(const char *pathname, int flags);int open(const char *pathname,...
gcc编译器和库的概念
GCC编译器gcc的编译流程:预处理、编译、汇编、链接 预处理阶段将源代码预处理生成预处理文件(*.i),此阶段主要工作是处理源代码中的预处理指令,将头文件内容插入程序中,包括宏替换、条件编译等。 1gcc -E xxx.c -o xxx.i 编译阶段将预处理文件进行编译生成汇编文件(*.s),此阶段为核心阶段,主要工作为将源代码转化为汇编语言,这一过程会对源代码进行词法和语法分析,若存在语法错误会报错并停止编译。 1gcc -S xxx.i -o xxx.s 汇编阶段将汇编文件进行汇编处理生成目标文件(*.o),此阶段是将汇编语言转换为机器语言,并生成目标文件,其包括程序的可执行代码和程序运行所需的符号表、调试信息。 1gcc -c xxx.s -o xxx.o 链接阶段将目标文件进行链接生成可执行文件,此过程是将多个目标文件和相应的库文件进行链接生成可执行文件。 1gcc xxx.o -o...
进程的概念
什么是进程、线程?程序是放在磁盘上的指令和数据的有序集合(文件),静态的,存放于磁盘进程是执行程序时所分配的资源的总称,是程序的一次执行过程,动态的,包括创建、调度、执行和消亡 进程和程序包含模块 进程包括:代码段、数据段、BSS段、堆、栈、进程控制块程序包括:代码块、数据段、BSS段 BSS段 存放程序中未初始化的全局变量的一块内存区域,英文全称(Block Started by...
Shell脚本编程
Shell脚本shell是一种脚本语言,shell脚本本质是一个文件,文件里面存放的是特定格式的指令,系统可以使用脚本解析器翻译或解析指令并执行(不需要编译)编写shell脚本步骤:需求分析、命令测试、脚本编写、测试优化 脚本执行方式123bash shell.shsource shell.sh./shell.sh 变量命名规则 区分大小写 不能使用程序内的保留字和内置变量 只能使用数字、字母及下划线、且不能以数字开头 使用英文尽量使词义通俗易懂变量定义:count=3(注意等号前后不能加空格)变量释放:unset count 用户自定义变量—取值 双引号(弱引用):允许通过$符号引用其他变量值,变量引用被替换为变量值 单引号(强引用):禁止引用其他变量值,$视为普通字符,保留源字符串 反撇号:命令替换,提取命令执行后的输出结果 数组的使用在shell脚本中,数组的定义和删除有以下形式: 12345678# 数组定义a="1 3 5 7 9"a=(1 3 5 7 9)a=([0]=1 [1]=3 [2]=7)#...
STM32的GPIO输出编程
使用寄存器编程进行GPIO输出(PA0口输出为例)在STM32的GPIO编程中,其本质就是通过操作寄存器来进行I/O口的控制,在STM32中,存在着许多外设且每个外设都有其对应的寄存器。 要想进行寄存器操作,首先需要知道寄存器的地址,在STM32参考手册 2.3 存储器映像 中有个寄存器组起始地址表,此处我截取本文所需的寄存器地址信息,在查阅参考手册得知,GPIOA外设是挂载在APB2总线上的,所以我们需要操作APB2外设时钟的使能寄存器以及GPIOA寄存器,操作寄存器的代码形式:*(uint32_t *)(基址+偏移量) = 位操作数。 配置时钟信号在STM32中,由于存在许多的外设,操作外设寄存器需要有时钟信号,如果所有外设均默认开启时钟将会造成资源浪费,因此为了能按需控制外设,在操作外设寄存器之前,首先需要进行时钟配置: 查阅手册得知,RCC寄存器基址为 0x40021000,APB2外设时钟使能寄存器偏移地址为 0x18,由于需要开启GPIOA时钟,因此IOPAEN位为1。 方法一:赋值操作,直接对寄存器进行赋值1*(uint32_t...
Keil5软件配置
在安装完成Keil5后,还需进行特定配置才能进行STM32项目开发: 一、安装芯片支持包 激活成功软件后,需要安装芯片支持包才能使用,安装芯片包可使用在线安装和离线安装。 由于学习使用的是STM32F103C8T6的芯片,所以安装STM32F1系列的芯片包,首先利用Keil5软件中的pack工具进行在线安装: 离线安装,可在网上下载对应的芯片支持包文件,官网下载:https://www.keil.arm.com/packs/ ,下载完双击安装即可 安装完成后,可打开Device Database 查看是否安装成功,如图可见STM32F1系列的芯片支持包已安装 基于STM32F103C8T6进行新建工程,打开Keil5软件,菜单栏项目点击 Project —> New μVision Project… 会提示选择项目保存路径 选择项目保存的文件夹后,选择芯片类型,这里选择...
Linux文件系统及文件权限
常用的文件系统: FAT16和FAT32:FAT16最大支持2G文件,FAT32最大支持4G文件。FAT32是U盘类存储设备常用文件系统。 NTFS文件系统:NTFS是一个基于安全性的文件系统,是windows所采用的独特文件系统。 ext2和ext3:ext2是GNU/Linux系统中标准的文件系统,ext3是ext2的升级版本,是现如今Linux常见的默认文件系统。 swap文件系统:该文件系统是Linux中作为交换分区使用的。 NFS文件系统:该文件系统是指网络文件系统,其作用能方便地实现远程文件共享。 ISO9660:这是光盘所使用的文件系统。 Linux目录结构 在Linux系统中,一切皆是文件。文件的分类有:普通文件、管道文件、目录文件、套接字文件、链接文件、字符设备文件、块设备文件。 ...