32位单片机中断如何处理

[复制链接]
1991|8
 楼主| lilipeeeee 发表于 2014-6-15 15:21 | 显示全部楼层 |阅读模式
定义了一个变量:uint32_t  time,中断函数里执行 time++;  假如进中断时正执行  time=0;  此时time变量是不是将出错,还是单片机会执行完 time=0后,转中断(感觉不会这样),怎样排除这一问题??
    不直接在中断外使用 time=0;而是 再定义一变量 t,中断外 用时 t=time;这样还会有问题出现吗??单片机中断学得不清楚,真诚求教!!!!!!
ilikepanda007 发表于 2014-6-15 15:40 | 显示全部楼层
中断的概念就是中断当前所有的程序,而去执行中断里的程序,不会冲突啊,中断时,time=0的状态只有两个,一个未完成,一个完成。假如此时time为1,那么未完成是time先进入中断++变2后,再回到主函数,执行time=0操作,若完成时,time=1。
我是这样理解的
ayb_ice 发表于 2014-6-15 15:43 | 显示全部楼层
中断才不管这些,这些是程序员的事情,必须时关中断

中断只保证当前的指令(汇编级)不被中断,

原野之狼 发表于 2014-6-15 16:35 | 显示全部楼层
这已经是一个原子操作了,不用整这么麻烦,直接读写该32位变量即可。
zdl522 发表于 2014-6-15 17:46 | 显示全部楼层
如果中断到来时,正在执行一条指令,那么等这条指令执行完后再插入中断服务程序
 楼主| lilipeeeee 发表于 2014-6-15 21:47 | 显示全部楼层
zdl522 发表于 2014-6-15 17:46
如果中断到来时,正在执行一条指令,那么等这条指令执行完后再插入中断服务程序 ...

之前我还理解成:有这种情况执行time=0;当执行到time=时进中断了,中断又对改值改变,就会造成 time出现乱数的可能 呢,,
 楼主| lilipeeeee 发表于 2014-6-15 21:49 | 显示全部楼层
zdl522 发表于 2014-6-15 17:46
如果中断到来时,正在执行一条指令,那么等这条指令执行完后再插入中断服务程序 ...

对32位单片机来说 time=0用汇编是几条指令?还是一条; 我之前理解若这样用可能导致time出现乱值。
ningling_21 发表于 2014-6-16 09:48 | 显示全部楼层
lilipeeeee 发表于 2014-6-15 21:47
之前我还理解成:有这种情况执行time=0;当执行到time=时进中断了,中断又对改值改变,就会造成 time出现 ...

可以进调试模式去看看会不会乱...
zdl522 发表于 2014-6-25 21:29 | 显示全部楼层
lilipeeeee 发表于 2014-6-15 21:49
对32位单片机来说 time=0用汇编是几条指令?还是一条; 我之前理解若这样用可能导致time出现乱值。 ...

具体看你的处理器实现以及使用的编译器
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

28

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部