嵌入式笔试3.docx
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
【嵌入式开发笔试知识点详解】 1. **`sizeof`运算符**: `sizeof(bits)`是一个正确的表达式,因为它可以应用于类型或变量。在原问题中,`bits`是一个结构体类型,所以这个表达式合法。如果`bits mybits;`的定义是错误的,应该修正为`typedef struct {signed int bit0:1;} bits;`以定义一个结构体类型。修改后的结构定义不会影响`sizeof(bits)`的正确性,它的值在32位VC环境中为4字节,因为结构体包含一个int类型的位字段。如果int改为char,结构体大小会变为1字节。 2. **结构体定义限制**: 结构体中不能直接定义结构本身的非指针变量,因为这可能导致无限嵌套的问题,不符合C语言的语法。 3. **可重入函数**: 可重入函数是可以被多线程并发调用并保持正确性的函数。编写可重入函数时,应避免使用全局变量和静态变量,如果必须使用,需确保它们的访问是互斥的。同时,不要调用不可重入的函数,并注意对共享资源的访问方式,以防止出现竞态条件。 4. **栈帧(Stack Frame)**: 栈帧是函数调用在栈上创建的一段内存区域,它包含局部变量、参数、返回地址等信息。通过栈帧,可以追踪函数调用的层次和状态。 5. **副作用问题**: 在`printf`语句中,`++n`和`power(2,n)`的执行顺序依赖于编译器,这可能导致二义性和移植性问题。为消除不确定性,应将`++n`操作放在`printf`之外。 6. **常量指针**: 要让函数可以访问但不能修改数据结构的内容,可以定义为指向常量的指针,如`const 类型 *p`或`类型 const *p`。 7. **静态变量在头文件中的问题**: 在头文件中定义静态变量会导致每个包含该头文件的源文件都有自己的变量副本,浪费内存且易引发错误。一般不应在头文件中定义变量。 8. **内存分配的区别**: `malloc`分配的内存不自动清零,而`calloc`分配的内存会被初始化为零。但最好根据实际需求自己初始化内存,而不是依赖函数的行为。 9. **寄存器变量**: 寄存器变量的地址访问和是否能作为全局变量取决于编译器实现。通常不推荐声明全局寄存器变量,因为现代编译器的优化策略足以处理寄存器的使用。 10. **包含头文件的差异**: `< >`用于系统头文件,会在标准库路径中查找;`"`先查找当前目录,再找标准库路径。这决定了头文件的搜索顺序。 11. **代码错误示例**: 代码`for (i=0,i<10,i++)s_ptr -> a[i] = i;`是错误的,因为它未初始化`s_ptr`,可能导致访问未定义的内存,这是编程中的低级错误。 12. **结构体对齐(pragma pack)**: `#pragma pack(8)`用于设置结构体成员对齐方式,本例中未给出完整代码,但通常会影响结构体的内存布局和大小。使用`pragma pack`可以调整结构体成员的存储方式,以减小内存占用或优化访问速度。 以上是针对嵌入式笔试中的关键知识点解析,这些内容涵盖了嵌入式开发中常见的数据类型、内存管理、并发编程、编译原理等多个方面。理解并掌握这些知识点对于进行嵌入式系统的设计和开发至关重要。
剩余86页未读,继续阅读
- 粉丝: 1w+
- 资源: 2470
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助