打印
[经验分享]

嵌入式 volatile的作用

[复制链接]
3366|28
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2024-11-7 10:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
   别优化我,需要我的时候别老找寄存器传话

                                                                ——volatile变量

一、 volatile的作用
1.1 易变的
volatile声明的变量,表明该数据是易变的,每次使用读写该数据的时候,需要从主存重新读取,不应该为提高运行效率直接使用寄存器里的值,保证数据的一致性。

1.2 不可优化
volatile 会告诉编译器不要对其修饰的变量进行各种优化,尤其是将其删除。保证了与该变量相关的程序一定会执行。

1.3 顺序执行
volatile 会告诉编译器不要对其修饰的变量相关的代码进行顺序优化,保证该变量相关的代码按预定的顺序执行。

二、适用场景
(1)中断服务程序中修改并供其他程序使用的全局变量。

int test_flag = 0;

void test_task(void)
{
    if(test_flag == 1)
    {
        /* code */
    }
}

void ISR_EXTI_INTERRUPTS0_1(void)
{
    test_flag = 1;
}
(2)被多线程或多任务应用读写的全局变量。

(3)外设寄存器地址映射
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/qq_42357877/article/details/129324519

使用特权

评论回复
沙发
louliana| | 2024-11-8 21:07 | 只看该作者
当一个变量在中断服务程序中被修改,而在主程序或其他任务中被访问时,需要使用volatile关键字,以确保每次访问都能获取到最新的值。

使用特权

评论回复
板凳
youtome| | 2024-11-8 21:17 | 只看该作者
不同编译器对 volatile 的处理可能有所不同

使用特权

评论回复
地板
jtracy3| | 2024-11-9 07:37 | 只看该作者
只有当变量确实可能会在程序的控制之外被改变时,才应该将其声明为 volatile。不恰当的使用 volatile 会导致不必要的性能损失。

使用特权

评论回复
5
ingramward| | 2024-11-9 08:35 | 只看该作者
volatile 是一个重要的关键字,用于处理特殊变量,但在使用时需要谨慎

使用特权

评论回复
6
dspmana| | 2024-11-9 12:04 | 只看该作者
volatile修饰符只能作用于变量,不能作用于常量表达式或函数调用等。

使用特权

评论回复
7
saservice| | 2024-11-9 12:39 | 只看该作者
volatile可以确保变量的可见性,但它并不能提供线程安全或原子操作。

使用特权

评论回复
8
deliahouse887| | 2024-11-9 19:15 | 只看该作者
volatile仅对变量的访问进行优化控制,并不影响变量的其他属性。例如,它不会改变变量的存储类型、作用域或生命周期。

使用特权

评论回复
9
51xlf| | 2024-11-9 19:40 | 只看该作者
因为 volatile 禁止了编译器的优化,所以它可能会导致程序性能下降。

使用特权

评论回复
10
abotomson| | 2024-11-10 09:11 | 只看该作者
在嵌入式系统中,许多硬件寄存器是通过内存映射的方式来访问的

使用特权

评论回复
11
primojones| | 2024-11-10 11:26 | 只看该作者
volatile 关键字在嵌入式系统中主要用于防止编译器优化

使用特权

评论回复
12
updownq| | 2024-11-10 12:31 | 只看该作者
避免编译器优化              

使用特权

评论回复
13
lihuami| | 2024-11-10 13:14 | 只看该作者
需要使用volatile来确保每次访问都是直接对硬件寄存器的操作

使用特权

评论回复
14
jtracy3| | 2024-11-10 15:53 | 只看该作者
volatile变量用于标记中断处理可能改变的内存位置

使用特权

评论回复
15
hilahope| | 2024-11-10 16:35 | 只看该作者
volatile关键字在嵌入式系统编程中扮演着重要的角色,它能够确保变量在特定条件下的正确访问和同步。

使用特权

评论回复
16
mikewalpole| | 2024-11-10 19:27 | 只看该作者
将不需要volatile修饰的变量声明为volatile,因为这可能会增加程序的复杂性和运行时的开销。

使用特权

评论回复
17
plsbackup| | 2024-11-10 20:16 | 只看该作者
在中断服务程序中,某些变量可能会被中断处理程序修改。使用 volatile 关键字可以确保主程序在访问这些变量时,总是读取最新的值。

使用特权

评论回复
18
burgessmaggie| | 2024-11-10 21:11 | 只看该作者
在嵌入式系统中,硬件寄存器的值可能会被外部硬件操作改变。使用 volatile 关键字可以确保每次访问这些寄存器时,都会从实际的硬件地址读取最新的值。

使用特权

评论回复
19
mmbs| | 2024-11-10 22:33 | 只看该作者
volatile 关键字确保编译器不会对声明为 volatile 的变量进行优化。

使用特权

评论回复
20
averyleigh| | 2024-11-11 11:58 | 只看该作者
频繁地使用volatile可能会影响编译器的优化,从而增加可执行文件的大小且降低程序性能。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2086

主题

16136

帖子

15

粉丝