嵌入式编程常见问题及标准答案(持续收集)


嵌入式编程,有些时候面试或者笔试,有些公司喜欢考试一些题目,这里收集一些看上比较简单但是很容易出错的问题,以资后来者。

常见的变量定义

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不应该有重入问题,一般不能加入打印。


待续

历史上的今天:

  1. 2018:  Android 系统修改笔记:修改盘符名称(0)

发表评论

电子邮件地址不会被公开。 必填项已用*标注