原创 关于全局变量

2010-7-20 10:51 2199 4 4 分类: MCU/ 嵌入式

忙半天了,只因为中断前及中断中改变标志出错。


串口使用中断来发送一个数组,需要使用一个全局标志来索引当前进入中断后填入UxDBUF的元素。错误的写法(不一定会出错的):


U0DBUF = arr[0]; //arr为已经初始化的数组,内容是"abcd"


sendIndex = 1;  //发送索引,中断里发送arr[sendIndex++] .


结果会在串口助手接收到"aabcd"这样字串。


为了保证功能正常,应该写为


sendIndex = 1;


U0DBUF = arr[0];


这样就会接收到"abcd"这一正常的数据。


分析错误原因,是因为中断抢先于sendIndex = 1执行,所以会在发送'a'以后,在中断里再次发送arr[0],之后执行到sendIndex = 1,然后发送arr[1];因此收到两个'a'。


这样一想,所有的中断程序中用到并可能改变的标志应该在触发中断(如U0DUBF = n;)或打开中断(如EA = 1;)这样的语句之前。写下来,希望自己养成此习惯。

文章评论0条评论)

登录后参与讨论
我要评论
0
4
关闭 站长推荐上一条 /2 下一条