Keil C51编程 (2)共享变量操作的危险性 在某个项目的设计中,我发现我的程序老是不稳定,结果发现是有多个程序操作同一变量,而有一个程序是中断程序。下面举一个例子来说明: sbit ea = 0xAF; unsigned char xdata i=0x00;
上面是一个例子,inc程序使i加一,中断程序使i减一。 执行一次inc 同时 执行一次中断,i的值应该不变(理论上),但是实际上跟执行的次序有关。 inc的函数的汇编代码为: 假设先执行inc函数,执行到上述断点处,这时的值a=01 此时产生一个外中断0,将使i的值变为i=0x00 继续执行inc被中断的程序,将执行movx @dptr,a 结果i为0x01. 而实际上我们要求得到的结果是0。但是程序执行的结果却为1。程序出了错误。 错误的原因是inc函数在执行的过程中被打断。 void inc(void) //程序的功能是使变量i加一 ea=0; 才能使结果正确。 |