[其它应用] halt模式

[复制链接]
1534|20
 楼主| chenho 发表于 2021-2-6 11:16 | 显示全部楼层 |阅读模式
定时器可以唤醒halt模式,而系统从halt退出首先执行定时器中断程序,那么halt后面的几条nop指令应该是无用的吧?
tian111 发表于 2021-2-6 11:18 | 显示全部楼层
不是一定需要的吧
zhuhuis 发表于 2021-2-6 11:20 | 显示全部楼层
如果程序只有一个中断,是不是应该把nop指令移到定时器中断程序的开始部分?
tian111 发表于 2021-2-6 11:22 | 显示全部楼层
也不是不可以
zhuhuis 发表于 2021-2-6 11:24 | 显示全部楼层
哦,那是不是实际意义不是很大啊
songqian17 发表于 2021-2-6 11:25 | 显示全部楼层
恩,实际意义不大,但也不会影响到功能
gongche 发表于 2021-2-6 11:27 | 显示全部楼层

这是一种良好的编程习惯。

在HALT唤醒后,防止MCU各个外围模块启动不同步,一般放几个NOP延迟等待一下再操作。
 楼主| chenho 发表于 2021-2-6 11:31 | 显示全部楼层
这3个NOP不一定会执行
gongche 发表于 2021-2-6 11:35 | 显示全部楼层
这个nop是必须的,因为可能这个指令已经被读入到“管线”里了,预读的指令在halt后是会失效的,要是没有nop,不出问题才怪呢。
huanghuac 发表于 2021-2-6 11:37 | 显示全部楼层

但是
一定要加3个NOP
zhuhuis 发表于 2021-2-6 11:39 | 显示全部楼层
为什么
 楼主| chenho 发表于 2021-2-6 11:41 | 显示全部楼层
因为CPU是pilpe line 结构的,执行HALT之前会预取指,这时候让CPU取到NOP才好
tian111 发表于 2021-2-6 11:43 | 显示全部楼层
其实多写几个NOP又不会什么大事情,为了防止那些小概率事件,保留它也是不错的选择。
songqian17 发表于 2021-2-6 11:45 | 显示全部楼层
是这样的,halt and stop (idle or power-down)后面加NOP是由于cpu是 piple-line结构,在执行halt的同时,将后面几条指令取指了。
songqian17 发表于 2021-2-6 11:46 | 显示全部楼层
这样从halt唤醒后,这两条指令不会执行了。所以还是要加在halt or stop后面。
gongche 发表于 2021-2-6 11:49 | 显示全部楼层
有些时候可能是为了时钟的切换,添加几条无意义的nop指令是为了保证不出错。
wenfen 发表于 2021-2-6 11:50 | 显示全部楼层
硬件不行软件补.软件不行手动补.

这应该是编译器的事,自动添加.....
huanghuac 发表于 2021-2-6 11:52 | 显示全部楼层
就算延时,也是为了等其他外设,而不是等内核。楼主没有说什么单片机,最多情况是在流水线时候,避免分支指令在唤醒后被错误响应。
bqyj 发表于 2021-2-6 11:56 | 显示全部楼层
NOP有用,清空堆栈还是寄存器什么的忘了,书上看到过反正跟CPU有关,CPU跟CPU之间也不一样,当时没去理解透,现在后悔了
wenfen 发表于 2021-2-6 11:58 | 显示全部楼层
部分单片机资料会明确说明唤醒之后必须加入几条NOP指令,为的是等待让时钟电路唤醒并稳定。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

748

主题

9853

帖子

5

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