美文网首页
2021-06-14

2021-06-14

作者: CodingEleven | 来源:发表于2021-06-14 17:02 被阅读0次

volatile

volatile原意是“易变的”,在嵌入式环境中用volatile关键字声明的变量,在每次对其值进行引用的时候都会从原始地址取值。由于该值“易变”的特性所以,针对其的任何赋值或者获取值操作都会被执行(而不会被优化)。由于这个特性,所以该关键字在嵌入式编译环境中经常用来消除编译器的优化,可以分为以下三种情景:

  1. 中断服务程序中修改的供其它程序检测的变量需要加volatile;
static int i=0;
void main(void)
{
  while(1)
  {
     if (i>0) i++;
  }
}

void isr()
{
  i = 1;
}
//编译器判断在main函数里面没有修改过i,因此可能只执行一次对从i到某寄存器的读操作
//然后每次if判断都只使用这个寄存器里面的“i副本”,导致dosomething永远也不会被调用。
//如果将将变量加上volatile修饰,则编译器保证对此变量的读写操作都不会被优化(肯定执行)
  1. 多任务环境下各任务间共享的变量应该加volatile;
  2. 存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能由不同意义;

typedef

typedef是一个高级数据特性,可以为某一类型自定义名称。这方面与#define类似,但是两者有不同:

  1. typedef用来定义类型的别名,定义与平台无关的数据类型,与struct的结合使用等。

define不只是可以为类型取别名,还可以定义常量、变量、编译开关等。

  1. 关键字typedef在编译阶段有效,由于是在编译阶段,因此typedef有类型检查的功能。

define则是宏定义,发生在预处理阶段,也就是编译之前,它只进行简单而机械的字符串替换,而不进行任何检查。

  1. define没有作用域的限制,只要是之前预定义过的宏,在以后的程序中都可以使用。

typedef有自己的作用域。

  1. 二者修饰指针类型时,作用不同。
typedef int * pint;
#define PINT int *
 
int i1 = 1, i2 = 2;
 
const pint p1 = &i1;    //p不可更改,p指向的内容可以更改,相当于 int * const p;
const PINT p2 = &i2;    //p可以更改,p指向的内容不能更改,相当于 const int *p;或 int const *p;
 
pint s1, s2;    //s1和s2都是int型指针
PINT s3, s4;    //相当于int * s3,s4;只有一个是指针。

相关文章

  • 频道热搜?

    对于2021-06-14[https://www.jianshu.com/p/637397c3478a]想法的一个...

  • 2021-06-20 思考成长周复盘

    一 时间 2021-06-14 ~ 2021-06-21 二 围绕精力提升所做的事情 简书日更写作 低脂纯素饮食,...

  • 2021-06-14 简述,你是不是诚心的? 今天病,不想思考,耗费精力,结果死活不算我日更 非得让我发表点对你的...

  • 敏于事而慎于言

    日记837篇 2021-06-14 朋友说,有没有成果要从三件事情上分析: 1、有没有选对项目? 2、有没有坚持下...

  • 牛年端午

    苏浩然 华夏风光美, 神洲粽业香。 五月冠危地, 全民抗疫忙。 志把妖魔斩, 安泰万年长! 2021-06-14

  • #Dairy222 早起晚睡

    2021-06-14 周一 晴 端午安康!结果今天除了吃了自热火锅,别的啥节日的仪式感都没有。 早上七点多起的,八...

  • 2021-06-14 财富流沙盘总结

    2021-06-14 周一下午主题:带着好奇心开启财富流沙盘教练:周小敏点评教练:封磊玩家:海绵,李春阳,王雪 源...

  • 休息

    2021-06-14 雨 今天是端午假期的最后一天,此刻的我躺在床上,打开简书,却不知道该写点儿什么。 中午吃饭时...

  • 2021-06-14

    圣所不谕,然有大江之荒,其慷之,无有,其慨之,无有。南神定钟,冥音广渡,上所不喻,下必称沪,弃之所不渡,一一世,却却也!

  • 2021-06-14

    能够疗愈人的从来都不是恩怨相报,而是爱和包容!

网友评论

      本文标题:2021-06-14

      本文链接:https://www.haomeiwen.com/subject/hsdoeltx.html