51单片机主程序和中断共享全局变量时的访问冲突
(2019-03-14 14:11:41)
标签:
c51中断全局变量 |
分类: C |
为了避免访问冲突,需要注意如下事项:
(1)在主程序中访问时,需要先关中断,访问结束后再开中断,此过程代码要尽量精简,可以将全局变量赋值给临时变量或者另一个全局变量,后续处理使用这些替代的变量,这样可以尽可能地做到不影响实时性;
(2)共享的全局变量类型使用volatile修饰
sample
code:
//定义全局变量:ms计数器
volatile unsigned int cnt_ms;
volatile
//定义全局变量:ms计数器备份
unsigned int cnt_ms_bk;
unsigned int cnt_ms_bk;
//定义LED对应的IO口
sbit LED = P3 ^ 3;
sbit LED = P3 ^ 3;
//主循环读访问
int main(void)
{
......
{
}
void timer0_interrupt(void) interrupt 1
{
......
{
}
---------------------------------------------------------------------------------------------
小知识:
(1)中断使能和中断标志的关系
中断使能和中断标志IFG是没有关系的,开中断使能会使程序指针随着中断标志的置位而跳到那个中断向量所指的段里去;不开中断使能的时候你的主函数就不会被打断。
中断标志xxxIFG会随着某个事件发生而置位,是为了方便编程时候判断具体发生了什么事件用的,两者互相独立不冲突。
中断标志xxxIFG会随着某个事件发生而置位,是为了方便编程时候判断具体发生了什么事件用的,两者互相独立不冲突。
--------------------------------------------------------------------------------------------
参考文章:
后一篇:MFC打印debug信息方法

加载中…