嵌入式C语言的这10个基本问题,你掌握了吗?
1、 用 预处理指令 #define 声明一个常数,用以表明 1 年中有多少秒(忽略闰年问题)
#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL
2、 写一个标准宏 MIN ,这个宏输入两个参数,并返回较小的一个
#define MIN(A,B) ((A) <= (B) ? (A):(B))
3、 预处理器标识 #error 的目的是什么:
#error : 停止编译 并显示 错误信息
4、 嵌入式系统中经常要用到无限循环,你怎么样用 C 编写死循环
while(1){...}
do {...} while(1)
for(;;){...}
5、 用 变量 a 给出下面的定义
(1)整形数:int a;
(2)指向整型数的指针:int * a;
(3)指向指针的指针,它指向的指针指向整型数:int * * a;
(4)有10个整型数的数组:int a[10];
(5)有10个指针的数组,它的指针指向整型数:int * a[10];
(6)指向有10个整型数的数组的指针:int ( * a ) [ 10 ];
(7)指向函数的指针,该函数有一个整型参数,并返回一个整型数:int ( * a)(int);
6、static 的作用,请写出两个;
7、关键字const的作用;
另外使用const定义变量:
8、volatile的作用;
定义为volatile的变量可能会被意想不到地改变,优化器在用到这个变量时必须重新读取这个变量的值,而不是保存在寄存器里的备份。
volatile变量的例子:
9、 嵌入式系统总是要用户对变量或寄存器,进行位操作;
#define BIT3 (0x01 << 3)
static int a;
void set_bit3()
{
a |= BIT3; //置 1
}
void clear_bit3()
{
a &= ~BIT3; //清 0
}
10、嵌入式系统经常具有要求程序员去访问某特定的内存位置,要求设置一绝对地址为0x67a9的整型变量的值为0xaa66;
int * ptr = NULL;ptr = (int *) 0x67a9;*ptr = 0xaa66;
11、中断的概念 当某个事件发生时,CPU 停止运行正在执行的程序,而转去执行处理该事件的程序,处理该事件后,返回原程序继续执行下去的过程;
ISR:中断服务程序(Interrupt Service Routines)
12、下面代码输出结果?
void foo(void)
{
unsigned int a = 6;
int b = -20;
(a + b > 6) ? puts(' > 6 ') : puts(' <= 6 ');
}
当表达式 中存在 有符号类型 和 无符号类型 时,所有的 操作数 都自动转换为 无符号类型,因此 -20 变成了一个非常大的正整数,该表达式计算出的结果 大于6,答案是输出 > 6。
13、 动态内存分配;
int * p = NULL;p = (int *) malloc(sizeof(int) * 128); //内存申请free(p); //内存释放
14、typedef语句用于给基本数据类型和导出数据类型定义一个新的名字
#define dPS struct s *
typedef struct s * tPS;
dPS p1 , p2; //错误定义,实际结果是 struct s * p1, p2;
tPS p3 , p4; //正确定义了两个指针
来源:https://blog.csdn.net/Hongwei_1990/article/details/89409953