嵌入式笔试问题解析:结构定义、可重入函数与栈框架

版权申诉
0 下载量 2 浏览量 更新于2024-07-01 收藏 716KB DOCX 举报
嵌入式笔试3文档包含了关于嵌入式系统编程的基础概念和一些关键知识点。首先,文档讨论了 sizeof 函数的使用,指出 sizeof(bits) 是正确的表达式,因为它可以用于计算类型或变量的字节数。对于结构定义,原句 bits mybits; 是错误的,因为它试图将 bits 当作变量赋值。正确的做法是使用 typedef 定义一个名为 bits 的结构体,例如: ```cpp typedef struct { signed int bit0:1; } bits; ``` 这个修改后的定义不会影响 sizeof(bits) 的正确性,它会返回 4 字节,因为即使将 int 类型改为 char,由于在 32 位 VC环境中,char 占 1 字节,所以 sizeof 仍然为 4 字节。然而,这取决于具体的编译环境,需确保一致性。 其次,文档提到了可重入函数的概念,即可以在多线程环境中安全地被多次调用的函数。编写可重入函数时需要注意避免全局变量和静态变量的副作用,通过锁或其他同步机制管理共享资源,确保函数不会被其他线程干扰。驱动程序通常不是可重入的,所以在编写这类代码时要格外关注重入性。 stackframe 是一个编程术语,指的是函数调用时在栈上创建的内存区域,用于存储局部变量、参数和返回地址等信息。在 x86 平台上,函数调用过程中的栈帧结构有助于跟踪调用链路。例如,函数 test3 的 stackframe 包含了函数的入口地址、参数和局部变量的存储位置。 最后,文档提到的 printf 表达式展示了函数调用和算术操作的结合,`printf(" %d%d\n", ++n, power(2, n))`,这里的 power(2, n) 应该是一个递归或者循环计算 2 的 n 次幂的函数。在实际编程中,确保 power 函数的实现是正确无误并且没有副作用,以配合 printf 的输出格式。 这些题目涵盖了嵌入式编程中的基本语法、数据类型、内存管理和并发编程的关键要素,有助于考察应聘者的理论知识和编程实践经验。