【嵌入式C语言】volatile关键字和const关键字

简介: 【嵌入式C语言】volatile关键字和const关键字

C语言中的volatile关键字

基本概念:在C语言中,volatile关键字修饰的变量是表示该变量是易变的,要求编译器不优化对该变量的读取。

当我们需要读取一个变量的值时,编译器为了加快访问速度,一般会在缓存中读取该变量的值,而不会直接去寄存器中去取值。我们在嵌入式开发时,经常要和各种开发板打交道,有时候寄存器的值并不是通过代码去修改的,而是某个芯片的外设修改的。也就是说,在嵌入式开发中,我们即使不通过程序修改寄存器的状态,寄存器的值可能也是变化的。加入我们在访问这种变量的时候不加volatile关键字,编译器默认会在缓存中取该变量的值,而这个值可能是一个旧值,该变量的真实值已经被外设等修改掉了,这就会出现问题,我们拿到的值并不是变量的最新值。加volatile关键字就是告诉编译器,不要进行优化,每次都去该变量的地址处去访问该值,这就保证了每次取到的都是变量的最新值

C语言中的const关键字

const用于定义一个常量,我们不能直接修改这个常量的值。

比如

const char str[] = "hello...";
//str[0] = 'a'; //编译不通过,提示不可修改

const关键字最基本的知识就是定义一个常量,其实在嵌入式中我们经常使用const定义常量来实现另一个目的。

我们知道,当我们定义一个变量或者字符串的时候,编译器会为这个变量分配内存(比如定义一个局部变量会在栈上分配内存,使用malloc为字符串在堆上分配内存等)。但是我们的堆栈内存是有限的,有时候我们希望一些变量特别是字符串不要占用堆栈内存,比如我们要打印一个字符串“hello C!”,这个字符串我们不需要对他进行任何修改,仅仅是打印这句话,并且有时候要打印很长一句话,这些长字符串会占用大量的堆栈内存,这是我们可以把他们定义为const常量,

#define  _CRT_SECURE_NO_WARNINGS 
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
int main()
{
  const char str[] = "hello C!hello C!hello C!hello C!hello C!hello C!hello C!hello C!hello C!";
  printf("%s\n", str);
  system("pause");
  return 0;
}

const修饰的常量会存放在常量区,不会占用堆栈内存,这就达到了节省堆栈内存的目的。


相关文章
|
1月前
|
编译器 Linux C语言
嵌入式C语言(八)
嵌入式C语言(八)
20 0
|
1月前
|
存储 编译器 C语言
嵌入式C语言(六)
嵌入式C语言(六)
22 0
|
1月前
|
存储 编译器 程序员
嵌入式C语言(七)
嵌入式C语言(七)
19 0
|
1月前
|
编译器 C语言 芯片
嵌入式C语言(九)
嵌入式C语言(九)
18 0
|
1月前
|
缓存 小程序 编译器
嵌入式C语言(十)
嵌入式C语言(十)
25 0
|
10天前
|
安全 算法 开发工具
【C 言专栏】基于 C 语言的嵌入式系统开发
【5月更文挑战第1天】本文探讨了C语言在嵌入式系统开发中的核心作用。嵌入式系统作为专用计算机系统广泛应用于家电、汽车、医疗等领域,具备实时性、低功耗等特点。C语言因其高效性、可移植性和灵活性成为开发首选。文章介绍了开发流程,包括需求分析、硬件选型、软件设计至部署维护,并强调中断处理、内存管理等关键技术。C语言在智能家居、汽车电子和医疗设备等领域的应用实例展示了其广泛影响力。面对硬件限制、实时性要求和安全挑战,开发者需不断优化和适应新技术趋势,以推动嵌入式系统创新发展。
【C 言专栏】基于 C 语言的嵌入式系统开发
|
11天前
|
传感器 算法 C语言
C语言在嵌入式系统开发中的优化策略与代码实现
C语言在嵌入式系统开发中的优化策略与代码实现
25 1
|
17天前
|
安全 编译器 C语言
C语言中的const关键字
C语言中的const关键字
16 2
|
1月前
|
存储 编译器 Linux
嵌入式C语言(五)
嵌入式C语言(五)
16 0
|
算法 Linux Android开发
本CSDN博主将与北京航天航空大学出版社合作出版&lt;嵌入式C语言技术实战开发&gt;一书
本书作者由以下成员合作编写:     杨源鑫,主编,毕业于广州科技贸易职业学院电子应用技术专业,在校期间一并考取了华南理工大学本科数字媒体艺术专业。2015年7月工作至今,任伟易达集团嵌入式系统工程师一职,主要从事单片机,linux,Android底层开发等相关的技术。
2926 0