芒种风向标:「技术」为什么单片机C语言编程时某一变量有时被修改乱码


芒种风向标:「技术」为什么单片机C语言编程时某一变量有时被修改乱码
文章图片
【芒种风向标:「技术」为什么单片机C语言编程时某一变量有时被修改乱码】最近一个项目里面 , 用C语言在单片机里面定义了一个状态机全局变量 , 这个变量随时会改变 , 用于切换触摸屏的界面 ,
可是程序运行中出现了一个问题 , 这个状态机号总是出现了被莫名奇妙改变的问题 , 导致触屏不能正常跳转到预设的界面 ,
经过检查分析 , 可能有两个原因:
?)全局变量与局部变量同名重复定义 。 有可能是你定义了一个与全局变量一样名字的局部变量 , 并在子程序里面修改了变量值 。
?)缺少volatile修饰符 。 C语言中volatile修饰符不常用 , 它的作用是明确该变量是变化的 , 防止编译器对该变量进行优化 , 让处理器在运行时每次都从内存中读取数据 , 而不是用寄存器中的备份数据 。 此修饰命令建议仅对全局有重要作用的关键变量使用 。
用法:定义时:volatileunsignedchara//定义了一个字符变量a
经检查是第2个原因 , 在程序中定义变量时添加volatile修饰符后问题解决 。