#01【面试问题整理】嵌入式软件工程师

本文整理了嵌入式软件工程师面试中常见的知识点,包括volatile关键字的作用,static变量的存储位置和生命周期,const关键字的使用场景,以及typedef和#define的区别。此外,还讲解了数组、指针与引用的区别,野指针问题,内存分配(堆与栈的区别)以及如何避免内存泄漏。
摘要由CSDN通过智能技术生成

前言


        本系列文章预计应该也许可能大概会持续更新一段时间。笔者将整理网络上各个面试题目,在此系列中。如有错误可以私信、评论指正,多多包涵~谢谢~

        本期参考文章如下:

        【八股文】嵌入式软件工程师-2025校招必备-详细整理_嵌入式软件开发八股-CSDN博客

1、 volatile 关键字

        volatile关键字主要是为了防止编译器对变量进行优化,在某些特殊情况告知编译器存取某个变量的时候不在寄存器中存取,而是直接从内存存取。

int a = 1, b, c; 
b = a;   
c = a;    

        在上述代码中,第一行执行了变量的初始化。

        第二行,b = a,编译器先将变量a的内存地址(&a)里的值存入 CPU,再从 CPU 读取值存入变量b的内存地址中。

        第三行,c = a,由于此时 CPU 中已经有变量a的值,所以直接从 CPU 中读取值存入c的内存地址中。

        当代码执行在第二行和第三行之间的时候,如果发送了中断,在中断处理函数中改变了a的值,那么此时变量a的内存地址中的值会改变,但是 CPU 的值不会,此时变量c的值是a的旧值。

volatile int a = 1, b, c; 
b = a;   
c = a;    

        在上述代码中,使用了 volatile 关键字。第一行与上面一致。

        第二行,也一样。在第三行,此时 volatile 会让编译器不管咋样,都要从内存中存取,所以此时还是会访问a的内存地址,而不是 CPU 。那这样结果就和变量b的值一样了。

哪些情况下使用volatile?

        (1)并行设备的硬件寄存器。存储器映射的硬件寄存器通常加volatile,因为寄存器随时可以被外设硬件修改。当声明指向设备寄存器的指针时一定要用volatile,它会告诉编译器不要对存储在这个地址的数据进行假设。

        (2) 一个中断服务程序中修改的供其他程序检测的变量。volatile提醒编译器,它后面所定义的变量随时都有可能改变。因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。

        (3)多线程应用中被几个任务共享的变量。

2、 static 关键字

        static是被声明为静态类型的变量,存储在静态区(全局区)中,其生命周期为整个程序。

        static可以修饰变量和函数。

        如果是静态局部变量,其作用域为一对{  }内。

        如果是静态全局变量,其作用域为当前文件。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值