打印

32位单片机中断如何处理

[复制链接]
1474|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位变量即可。

使用特权

评论回复
5
zdl522| | 2014-6-15 17:46 | 只看该作者
如果中断到来时,正在执行一条指令,那么等这条指令执行完后再插入中断服务程序

使用特权

评论回复
6
lilipeeeee|  楼主 | 2014-6-15 21:47 | 只看该作者
zdl522 发表于 2014-6-15 17:46
如果中断到来时,正在执行一条指令,那么等这条指令执行完后再插入中断服务程序 ...

之前我还理解成:有这种情况执行time=0;当执行到time=时进中断了,中断又对改值改变,就会造成 time出现乱数的可能 呢,,

使用特权

评论回复
7
lilipeeeee|  楼主 | 2014-6-15 21:49 | 只看该作者
zdl522 发表于 2014-6-15 17:46
如果中断到来时,正在执行一条指令,那么等这条指令执行完后再插入中断服务程序 ...

对32位单片机来说 time=0用汇编是几条指令?还是一条; 我之前理解若这样用可能导致time出现乱值。

使用特权

评论回复
8
ningling_21| | 2014-6-16 09:48 | 只看该作者
lilipeeeee 发表于 2014-6-15 21:47
之前我还理解成:有这种情况执行time=0;当执行到time=时进中断了,中断又对改值改变,就会造成 time出现 ...

可以进调试模式去看看会不会乱...

使用特权

评论回复
9
zdl522| | 2014-6-25 21:29 | 只看该作者
lilipeeeee 发表于 2014-6-15 21:49
对32位单片机来说 time=0用汇编是几条指令?还是一条; 我之前理解若这样用可能导致time出现乱值。 ...

具体看你的处理器实现以及使用的编译器

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

28

帖子

1

粉丝