C语言中的volatile三种作用,volatile关键字在嵌入式C语言中的使用

本文介绍了C语言中volatile关键字的作用,主要是在嵌入式编程中确保变量不会受到编译器优化的影响。文章讨论了三种使用场景:1) 映射的外设SFR;2) 中断服务函数中修改全局变量;3) 多线程中修改全局变量。通过示例代码解释了volatile如何避免编译器优化导致的程序错误,强调了在处理特殊功能寄存器、中断服务函数和多线程同步时使用volatile的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

volatile修饰符在C语言中的用法

本文章将讨论volatile这个修饰符在C语言中的使用。了解这个修饰符的程序员都知道,最为一个指令关键字,其作用是确保指令本身不会受到编译器的优化而产生未知的程序bug。对此,本文将结合嵌入式中C语言的实际运用来详细讲解。

volatile关键字告诉编译器,这个变量可能在任何时刻都会被改变。有时变量的改变对编译器来说有点“隐蔽”,也许就是这种隐蔽让编译给我们的程序造成了一些未知的bug。

语法:

首先我们来看看volatile的使用方法,通过下面的两种方法实现对int变量的修饰;

ü  int volatile var;

ü  volatile int var;

当然如果要修饰一个指针变量可以如下

ü  int volatile * pointer;

ü  volatile int * pointer;

就C语言中的使用volatile来说,一般我们会在一下三种情况中使用volatile关键字

?  映射的外设SFR(Special Function Register)

?  在中断服务函数中修改全局变量

?  在多线程中修改的全局变量

特殊功能寄存器:

在嵌入式偏硬件方面的程序,我们经常要控制一些外围硬件设备,就拿最简单的I/0端口来说,我们会去操作映射到对应IO端口的寄存器。

假设某一个寄存器的地址为0x1234,在C语言中,我们可以定义一个指针指pReg向这个地址:

unsigned int * pReg = (unsigned int *)0x1234;

在实际运用中(例如uart、ADC等等)ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值