[技术]为什么单片机C语言编程时某一变量有时被随意修改

Posted 永珂在线

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[技术]为什么单片机C语言编程时某一变量有时被随意修改相关的知识,希望对你有一定的参考价值。

最近一个项目里面,用C语言在单片机里面定义了一个状态机全局变量,这个变量随时会改变,用于切换触摸屏的界面,

可是程序运行中出现了一个问题,这个状态机号总是出现了被莫名奇妙改变的问题,导致触屏不能正常跳转到预设的界面,

经过检查分析,可能有两个原因:

)全局变量与局部变量同名重复定义。有可能是你定义了一个与全局变量一样名字的局部变量,并在子程序里面修改了变量值。

)缺少volatile修饰符。C语言中volatile修饰符不常用,它的作用是明确该变量是变化的,防止编译器对该变量进行优化,让处理器在运行时每次都从内存中读取数据,而不是用寄存器中的备份数据。此修饰命令建议仅对全局有重要作用的关键变量使用。

用法:定义时:volatile unsigned chara;//定义了一个字符变量a

经检查是第2个原因,在程序中定义变量时添加volatile修饰符后问题解决。


以上是关于[技术]为什么单片机C语言编程时某一变量有时被随意修改的主要内容,如果未能解决你的问题,请参考以下文章

单片机c语言程序设计中,用关键字bit定义单片机的端口.对吗

keil编程中为啥总说我变量未定义? 不只是keil,C语言也经常有这种情况。根本不知道哪里错了

什么是unsigned char;;?

51单片机c语言中断函数不能进行参数传递,是啥意思,谁能解释一下

C语言开发单片机如何避免全局变量过多混乱

Oracle利用触发器更新插入时某一列的值