嵌入式编程,有些时候面试或者笔试,有些公司喜欢考试一些题目,这里收集一些看上比较简单但是很容易出错的问题,以资后来者。
常见的变量定义
int a ; // 整型, int* a; // 指向整型的指针, int ** a; // 指向指针的指针,它的指针指向整型数, int a[10]; // 有10个整型数的数组, int * a[10]; // 有10个指针的数组,该指针指向整型数, int (*a)[10]; // 指向有10个整型数数组的指针, int (*a)(int); // 指向函数的指针,该函数有一个整型变量和一个整型返回值, int (*a[10])(int) // 有10个指针的数组,该指针指向一个函数,该函数有整型的返回值。
常用宏
#define YEAR (365*24*60*60)ul // 一年有多少秒,注意后面的ul #define MAX(x,y) (((x) > (y))?(x):(y)) // 返回较大的值,注意变量需要用()包围,防止宏替换时出现异常代码。 #define MIN(x,y) (((x) < (y))?(x):(y)) // 返回较大的值,注意变量需要用()包围,防止宏替换时出现异常代码。
关键字用途说明
- static -- 声明静态变量或者函数的关键字。
特点及用途:
1. 静态全局变量,数据为全局分配,且自动初始化。
2. 静态变量或者函数仅文件内可见。
- const -- 声明只读变量。
特点及用途:
1. 被const修饰的内容不可变。
2. 特殊情况说明:
const char* p ; // *p不可变,p可变 char* const p ; // *p可变, p不可变 char const *p ; // *p不可变,p可变 char const * const p ; // 都不可变
- volatile --在程序执行过程中可被隐含改变的变量。
特点及用途:
1. 并行设备硬件寄存器的值,常用此修饰。
2. 中断服务函数访问的非自动变量。
3. 多线程共享的变量。
4. 可以只读。
5. 可以为指针。
6. 有可变的可能,使用时,要考虑其变化情况。
中断服务函数(ISR)编写要求
常规观点:
1. ISR不能有返回值。
2. ISR不能有参数传递。
3. ISR应该进行短而高效的运算,一般不包含浮点运算。
4. ISR不应该有重入问题,一般不能加入打印。
待续