嵌入式C语言学习(2)

1.C语言中函数名直接对应于函数生成的指令代码在内存中的地址,函数名可以直接赋给指向函数的指针
2.调用函数=调用指令+参数传递处理+回归位置入栈,本质最核心的操作是将函数生成的首地址赋给CPU的PC寄存器
3.函数调用的本质是跳转到某一单元地址单元的code去执行,即可“调用一个根本就不存在在函数实体”(?)
4.函数指针是指向函数的指针变量,即函数指针本身是指针变量,只是该指针变量指向函数
5.每个函数都有一个入口地址,即函数指针所指的地址
6.函数指针有两个用途:调用函数和做函数的参数
7.在共用体中同一块内存可以用来存放几种不同类型的数据,但在某一时刻只能在其中存放一个成员变量。共用体变量中起作用的成员是最后一次存入的数据
如:union data
{
int i;
char c;
double d;
};
union data a;
共用体变量a中的成员i,c,d三个变量在内存中从同一个地址开始存储。对i,c赋值
a.i = 100;
a.c = ‘A’;
此时共用体变量a中i已经没有值,只有c有值
8.结构体变量所占内存的长度是各个成员的总和,每个成员分别占有自己的存储空间。共用体变量所占内存的长度是其最长成员的长度。通常编译分配内存空间往往要进行对齐操作。对齐操作以最大基本类型为准。即以最大基本类型为基本单元。若按实际算下的长度不是基本单元的整数倍,则其实际长度应该是基本单元的整数倍。
9.每个用于调试的printf函数之后立即调用fflush函数可以得到函数错误输出的位置被实际写入缓冲区
10.volatile可能用于的地方:
(1)设备的硬件寄存器(如:状态寄存器)
(2)一个中断服务子程序中会访问到的全局变量
(3)多线程应用中被几个任务共享的变量。
11.register的用法:当一个变量下频繁被读写时,需要反复访问内存,从而可能导致花费大量时间,若把这种变量存放在CPU的寄存器里,使用时直接从寄存器里读写,可大大提高读取效率。寄存器变量的说明符就是register
12.只有局部自动变量和形参才可以定义为寄存器变量
13.register是一个“建议”型关键字,最终该变量可能因不满足条件而没有成为寄存器变量,编译器并不会报错(C++中inline为另一个“建议”型关键字)
14.CPU对各种存储器的访问速度,基本上是:
CPU内部RAM > 外部同步RAM > 外部异步RAM > FLASH/ROM
15.C语言中,宏是产生内嵌代码的唯一方法

你可能感兴趣的:(成都学习)