4. 嵌入式系统经常具有要求程序员去访问某特定的内存位置的特点。在某工程中,要求设置一绝对地址为0x67a9的整型变量的值为0xaa66。编译器是一个纯粹的ANSI编译器。写代码去完成这一任务。
int *ptr;
ptr = (int *)0x67a9; //将0x67a9强制转换为指向int型的指针
*ptr = 0xaa66;
5. 中断是嵌入式系统中重要的组成部分,这导致了很多编译开发商提供一种扩展—让标准C支持中断。代表事实是,产生了一个新的关键字 __interrupt。下面的代码就使用了__interrupt关键字去定义了一个中断服务子程序(ISR),请评论一下这段代码的。
__interrupt double compute_area (double radius)
{
double area = PI * radius * radius;
printf(" Area = %f", area);
return area;
} 这个函数有太多的错误了,以至让人不知从何说起了:
1). ISR 不能返回一个值。如果你不懂这个,那么你不会被雇用的。
2). ISR 不能传递参数。如果你没有看到这一点,你被雇用的机会等同第一项。
3). 在许多的处理器/编译器中,浮点一般都是不可重入的。有些处理器/编译器需要让额处的寄存器入栈,有些处理器/编译器就是不允许在ISR中做浮点运算。此外,ISR应该是短而有效率的,在

本文讨论了嵌入式系统中的Volatile关键字的重要性和作用,包括其防止编译器优化、保证特殊地址稳定访问的功能。还提到了在中断服务子程序(ISR)中使用Volatile的注意事项,以及涉及到内存分配、结构体对齐和C/C++编译器识别等方面的面试题。同时,文章解释了volatile如何影响编译器对变量的处理,并通过示例展示了错误的中断服务子程序设计及其修正方法。
最低0.47元/天 解锁文章
860

被折叠的 条评论
为什么被折叠?



