3522|10

42

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

请教一个关于编程的问题 [复制链接]

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


ISR1()
{
pwm=xxx; //修改pwm的值
}
ISR2()
{
CMPA=pwm; //pwm值赋CMPA寄存器
}

最新回复

变量定义为全局变量  详情 回复 发表于 2017-12-25 20:07
 
点赞 关注

回复
举报

6040

帖子

196

TA的资源

版主

沙发
 
没问题。

点评

好的,谢谢版主  详情 回复 发表于 2017-11-17 16:23
 
 

回复

2002

帖子

24

TA的资源

五彩晶圆(高级)

板凳
 
一个读写动作,一个只读,一般不需要考虑互斥。

点评

如果赋值操作不止一个指令周期呢?会不会在没有赋值完成的情况下被打断进入下面那个中断(当然是支持抢占优先级的,且下面那抢占优先级高),从而读出来错误的值呢?另外如果是一个指令周期的话,在执行赋值操作时被  详情 回复 发表于 2017-11-17 10:39
 
 
 

回复

951

帖子

1

TA的资源

纯净的硅(中级)

4
 
shower.xu 发表于 2017-11-17 10:25
一个读写动作,一个只读,一般不需要考虑互斥。

如果赋值操作不止一个指令周期呢?会不会在没有赋值完成的情况下被打断进入下面那个中断(当然是支持抢占优先级的,且下面那抢占优先级高),从而读出来错误的值呢?另外如果是一个指令周期的话,在执行赋值操作时被另一中断打断,那么CPU应该会执行完赋值操作然后再跳到另一个中断是吗?

点评

那是中断优先级的事,而且即使赋值分成两条指令,比如先保存常数到Acc,然后再放到寄存器,中断程序也会对A寄存器做入栈出栈操作的。如果硬件不做,你就自己做。  详情 回复 发表于 2017-11-17 13:52
对应优先级更高的中断,如果不是外部中断,是自己周期控制的,看看能否把周期适当加大。也可以减少抢断的可能性。先大概写一个程序。看看效果。不合适,再调。  详情 回复 发表于 2017-11-17 12:44
没有绝对的安全,你要做的,是把不稳定性尽量降低。如果存在抢占优先级。你就要尽量把低优先级的中断里的代码尽量简化,执行最关键的部分,减少其执行时间,这样,被抢的概率就降低。  详情 回复 发表于 2017-11-17 12:40
 
个人签名人有的时候真是奇怪,选择了会后悔,放弃了会遗憾,完美只能是一种理想,不是一种存在。
 
 

回复

3471

帖子

13

TA的资源

五彩晶圆(高级)

5
 
huixianfxt 发表于 2017-11-17 10:39
如果赋值操作不止一个指令周期呢?会不会在没有赋值完成的情况下被打断进入下面那个中断(当然是支持抢占 ...

没有绝对的安全,你要做的,是把不稳定性尽量降低。如果存在抢占优先级。你就要尽量把低优先级的中断里的代码尽量简化,执行最关键的部分,减少其执行时间,这样,被抢的概率就降低。

赞赏

1

查看全部赞赏

 
 
 

回复

3471

帖子

13

TA的资源

五彩晶圆(高级)

6
 
huixianfxt 发表于 2017-11-17 10:39
如果赋值操作不止一个指令周期呢?会不会在没有赋值完成的情况下被打断进入下面那个中断(当然是支持抢占 ...

对应优先级更高的中断,如果不是外部中断,是自己周期控制的,看看能否把周期适当加大。也可以减少抢断的可能性。先大概写一个程序。看看效果。不合适,再调。

点评

目前赋值的中断发生周期远小于读取的中断产生周期。就是ISR1发生频率大于ISR2发生频率的很多倍。  详情 回复 发表于 2017-11-17 16:34
 
 
 

回复

2002

帖子

24

TA的资源

五彩晶圆(高级)

7
 
huixianfxt 发表于 2017-11-17 10:39
如果赋值操作不止一个指令周期呢?会不会在没有赋值完成的情况下被打断进入下面那个中断(当然是支持抢占 ...

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

回复

42

帖子

0

TA的资源

一粒金砂(中级)

8
 

好的,谢谢版主
 
 
 

回复

42

帖子

0

TA的资源

一粒金砂(中级)

9
 
本帖最后由 2835 于 2017-11-17 16:36 编辑
ienglgge 发表于 2017-11-17 12:44
对应优先级更高的中断,如果不是外部中断,是自己周期控制的,看看能否把周期适当加大。也可以减少抢断的 ...

目前赋值的中断发生周期远小于读取的中断产生周期。就是ISR1发生频率大于ISR2发生频率的很多倍。而且前者优先级高于后者。

点评

赋值的中断发生周期远小于读取的中断产生周期,这比赋值远大于读取的情况应该是好一些的。可能出现,读取的是一个值,然后被抢断,值被改了。但是读取中断处理的是改之前的值。当下一次,读取时,才得到正确的值,你  详情 回复 发表于 2017-11-20 13:53
 
 
 

回复

3471

帖子

13

TA的资源

五彩晶圆(高级)

10
 
2835 发表于 2017-11-17 16:34
目前赋值的中断发生周期远小于读取的中断产生周期。就是ISR1发生频率大于ISR2发生频率的很多倍。而且前者 ...

赋值的中断发生周期远小于读取的中断产生周期,这比赋值远大于读取的情况应该是好一些的。可能出现,读取的是一个值,然后被抢断,值被改了。但是读取中断处理的是改之前的值。当下一次,读取时,才得到正确的值,你把读取函数的执行内容好好处理一下,如果值不变,应该执行什么。比如保持状态,什么的,减少影响。应该问题不大。
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(初级)

11
 
变量定义为全局变量
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表