10.访问固定的内存位置:设置一绝对地址为0X67A9的整型变量的值为0XAA66。编译器是一个纯粹的ANSI编译 器。【该问题测试你是否知道为了访问一个绝对地址把一个整型数强制转换为一指针是合法的】
11.中断是嵌入式系统中的重点。下面的代码用关键字_interrupt定义了一个ISR,评论这段代码。
- int *ptr;
- ptr = (int *)0x67A9;
- *ptr = 0xAA55;
错误1:ISR不能返回一个值; 错误2:ISR不能传递参数; 错误3:很多处理器或编译器中浮点一般都是不可重入的,有些处理器、编译器需要让额外的寄存器入栈,有些处理器、编译器就是不运行在ISR中做浮点运算,此外,ISR应该是间断高效的,在ISR中做浮点运算很不明智。 错误4:printf()经常有重入和性能上的问题。 12.下面代码输出的是什么?
- _interrupt double compute_area(double radius)
- {
- double area = PI*radius*radius;
- printf("area = %f",area);
- return area;
- }
这个问题测试你是否懂得c语言中整数自动转换的原则。当表达式中存在有符号类型和无符号类型时所有操作数自动转换为无符号类型。
- void foo(void)
- {
- unsigned int a = 6;
- int b = -20;
- if(a+b>6)
- {
- puts(">6");
- }
- else
- {
- puts("<6");
- }
- }