![](https://static.youtibao.com/asksite/comm/h5/images/m_q_title.png)
嵌入式系统经常具有要求程序员去访问某特定的内存位置的特点。在某工程中,要求设置一绝对地址
![](https://static.youtibao.com/asksite/comm/h5/images/solist_ts.png)
关键字 volatile 有什么含意 并给出三个不同的例子。
一个定义为volatile 的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下
面是volatile 变量的几个例子:
1). 并行设备的硬件寄存器(如:状态寄存器)
2). 一 个 中断 服 务子 程 序中 会 访问 到 的非 自 动变 量 (Non-automatic variables)
3). 多线程应用中被几个任务共享的变量
C 程序员和嵌入式系统程序员的最基本的问题。嵌入式系统程序员经常同硬件、中断、RTOS等等打交道,所用这些都要求volatile 变量。不懂得volatile 内容将会带来灾难。 (嗯,怀疑这否会是这样),我将稍微深究
一下,看一下这家伙是不是直正懂得volatile 完全的重要性。
1). 一个参数既可以是const 还可以是volatile 吗?解释为什么。
2). 一个指针可以是volatile 吗?解释为什么。
3). 下面的函数有什么错误: int square(volatile int *ptr)
{ return *ptr * *ptr;
}
Volatile
8. 关键字volatile 有什么含意并给出三个不
同的例子。
一个定义为volatile的变量是说这变量可能会
被意想不到地改变,这样,编译器就不会去假设这
个变量的值了。精确地说就是,优化器在用到这个
变量时必须每次都小心地重新读取这个变量的值,
而不是使用保存在寄存器里的备份。下面是volatile
变量的几个例子:
1). 并行设备的硬件寄存器(如:状态寄存器)
2). 一个中断服务子程序中会访问到的非自
动变量(Non-automatic variables)
3). 多线程应用中被几个任务共享的变量
回答不出这个问题的人是不会被雇佣的。我认
为这是区分C 程序员和嵌入式系统程序员的最基
本的问题。嵌入式系统程序员经常同硬件、中断、
RTOS等等打交道,所用这些都要求volatile变量。
不懂得volatile内容将会带来灾难。
假设被面试者正确地回答了这是问题(嗯,怀
疑这否会是这样),我将稍微深究一下,看一下这
家伙是不是直正懂得volatile完全的重要性。
1). 一个参数既可以是const 还可以是volatile
吗?解释为什么。
A.由于共享导致了安全问题,应直接关闭日志共享,禁止总部提取日志进行分析
B.为配合总部的安全策略,会带来一定的安全问题,但不影响系统使用,因此接受此风险
C.日志的存在就是安全风险,最好的办法就是取消日志,通过设置让前置机不记录日志
D.只允许特定的IP地址从前置机提取日志,对日志共享设置访问密码且限定访问的时间
A.嵌入式系统关注成本
B.嵌入式系统专于特定的应用,而PC是通用计算机
C.嵌入式系统大多数有功耗的约束
D.嵌入式系统的数量超过了通用计算机系统数量
A.模糊测试
B.源代码测试
C.渗透测试
D.软件功能测试
A.使用文件存储代替OSS
B.在ECS实例上配置OSS的反向代理
C.前端增加一个负载均衡SLB实例,使用SLB的固定IP访问
D.使用阿里云NAT网关服务,进行IP地址转换