请教一个关于编程的问题

2019-03-24 08:18发布

如果我需要在一个中断服务子程序里面修改一个变量值,在另一个中断服务子程序里面调用它,需要注意什么?直接调用?像下面这段示例就可以了吗?
int pwm; //定义变量
main{
....
}


ISR1()
{
pwm=xxx; //修改pwm的值
}
ISR2()
{
CMPA=pwm; //pwm值赋CMPA寄存器
}
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
lcofjp
1楼-- · 2019-03-24 12:22
没问题。
shower.xu
2楼-- · 2019-03-24 16:05
 精彩回答 2  元偷偷看……
huixianfxt
3楼-- · 2019-03-24 19:48
shower.xu 发表于 2017-11-17 10:25
一个读写动作,一个只读,一般不需要考虑互斥。

如果赋值操作不止一个指令周期呢?会不会在没有赋值完成的情况下被打断进入下面那个中断(当然是支持抢占优先级的,且下面那抢占优先级高),从而读出来错误的值呢?另外如果是一个指令周期的话,在执行赋值操作时被另一中断打断,那么CPU应该会执行完赋值操作然后再跳到另一个中断是吗?
ienglgge
4楼-- · 2019-03-25 01:09
huixianfxt 发表于 2017-11-17 10:39
如果赋值操作不止一个指令周期呢?会不会在没有赋值完成的情况下被打断进入下面那个中断(当然是支持抢占 ...

没有绝对的安全,你要做的,是把不稳定性尽量降低。如果存在抢占优先级。你就要尽量把低优先级的中断里的代码尽量简化,执行最关键的部分,减少其执行时间,这样,被抢的概率就降低。
ienglgge
5楼-- · 2019-03-25 05:02
 精彩回答 2  元偷偷看……
shower.xu
6楼-- · 2019-03-25 05:27
huixianfxt 发表于 2017-11-17 10:39
如果赋值操作不止一个指令周期呢?会不会在没有赋值完成的情况下被打断进入下面那个中断(当然是支持抢占 ...

那是中断优先级的事,而且即使赋值分成两条指令,比如先保存常数到Acc,然后再放到寄存器,中断程序也会对A寄存器做入栈出栈操作的。如果硬件不做,你就自己做。

一周热门 更多>

相关问题

    相关文章