首页 > 代码库 > 嵌入式C知识点总结
嵌入式C知识点总结
在网上看到很多嵌入式C的知识点,总想把他们积累起来。所谓不积小流无以成江海,不积跬步无以至千里。
1、#define SENCONDS_PER_YEAR (60*60*24*365)UL
1)宏定义语法,格式
2)直观表达出这个数字的意义(一年又多少秒)
3)这个数字会使16位机产生溢出,需要使用长整形L,同时是无符号数,所以用到UL
2、#define MIN(A,B) ((A)<=(B)?(A)(B))
1)三重条件操作符,会使编译器产生比if-than-else更优化的代码 注意inline也是可以产生嵌入式代码的
2)宏中的参数需要使用括号括起来
3)leaset = MIN(*P++,a); 这个语句会产生什么错误?
++ 的操作优先级高于*,所以会先地址++,然后取值,会得到不确定的结果。
3、预处理器表示 #error的目的是什么
1)使用范围很广,在预处理阶段,当处理到这里时,会产生预处理错误,并输出自定义错误。
# error [用户自定义的错误消息]
比如说,如果检测到编译环境是C++提醒用户,需要在C编译环境下运行。
4、死循环(Infinite loops)
自己习惯使用 while(1){},结构看起来一目了然。并且可以定义一个变量=1,变量名可以写成某种死循环运行条件,这样做可以一眼看出这个循环目的。
当然有些人喜欢 for(;;){},并没有任何问题。
5、变量定义
a) 一个整型数 (An integer)
b) 一个指向整型数的指针 (A pointer to an integer)
c) 一个指向指针的的指针,它指向的指针是指向一个整型数 (A pointer to a pointer to an integer)
d) 一个有10个整型数的数组 (An array of 10 integers)
e) 一个有10个指针的数组,该指针是指向一个整型数的 (An array of 10 pointers to integers)
f) 一个指向有10个整型数数组的指针 (A pointer to an array of 10 integers)
g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数 (A pointer to a function that takes an integer as an argument and returns an integer)
h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数( An array of ten pointers to functions that take an integer argument and return an integer )
答案:
a) int_t a;
b) int_t *a;
c) int_t **a;
d) int_t a[10];
e) int_t *a[10];
f) int_t (*a)[10};
g) int_t (*a)(int_t);
h) int_t(*a[10])(int_t);
6、static 作用
1)static变量和函数存储在静态存储区域,在程序开始时被初始化。唯一的一次初始化。静态变量的值是可以变化的。地址是开始时初始化的。
2)静态变量和静态函数只能被模块内的函数调用,模块外的无法调用