如图所示,红圈中的文字是什么意思,DINT指令后跟随NOP指令的原因是啥。在胡大可的中午书中的例子中并没有NOP。是否DINT执行后的第一条指令仍有被中断的风险。
再有EINT指令,上图红圈中所述是否表达的是:EINT后的这条指令会不受中断影响,即使目前有已经挂起的中断请求。
灰小子:
没看过胡大可的中午书。
这种情况以官方的资料为准就好。非官方的资料偶尔会有写错误或者问题也很常见,你懂得
XiaoLiang Gao:
回复 灰小子:
呵呵,拼音害死人啊,是‘中文书’。上面的英文就是官方资料,事实上官方资料错误也不少,描述指令的这几页就有。
我的这个问题是没太理解官方资料所述,胡大可的中文资料翻译自早期的官方英文,所以可以简单借鉴。
总结我的问题是: 1、DINT后的第一条指令知否仍有被中断的风险?这个NOP插在这里的真实作用是什么?
2、EINT后的第一条指令是否总是执行,不会被中断?
Lichen Wang:
回复 XiaoLiang Gao:
任何指令都不可能被中斷. 中斷只可能在一個指令和下一個指令之間發生.
DINT 和 EING 在執行下一條指令後才生效.
因此, 在下面的指令序列中; DINT 和 指令1 之間可能被中斷. 指令1到指令a之間不可能被中斷. 指令a後可能被中斷.
…
DINT
指令1
指令2
指令3
指令4
…
EINT
指令a
指令b
指令c
…
XiaoLiang Gao:
回复 Lichen Wang:
感谢你的回复!同意你的看法,我可能没表达清楚,我指被中断就是在指令与指令之间。
实际上我最困惑的位置来自数据手册中DINT的那个例子和它下面的注解。如下例:
DINT
NOP
指令1
指令2
在后面的注释中也提到这个NOP,按常规理解中断只会发生在NOP指令之前,那NOP指令还有存在的必要吗?在胡大可早期的译注书中(翻译自用户指南)也有同样的例子,几乎完全一样。不同的就是没有加NOP和相关NOP的文字注释。
在举例:
下面两种代码,都在执行DINT指令时发生中断请求,中断处理程序没有列出,中断处理是对R15进行-1操作。
clr r15
DINT
inc r15
jmp $
;————————————-
clr r15
DINT
nop
inc r15
jmp $
最后结果会有不同?还是我的例子不太恰当没有找到比较好的切入点?
如果假设NOP指令加在这里确实有特殊的原因,那这个原因是什么?本质又是什么原因造成的呢?
由这个DINT后加NOP可以引申到与DINT相对应的EINT,EINT是不是也会存在同样或类似的原因呢。
Lichen Wang:
回复 XiaoLiang Gao:
XiaoLiang Gao
实际上我最困惑的位置来自数据手册中DINT的那个例子和它下面的注解。如下例:
DINT
NOP
指令1
指令2
在后面的注释中也提到这个NOP,按常规理解中断只会发生在NOP指令之前, . . .
可是使用手冊似乎是說中断仍然可能会发生在NOP指令之後. 也就是說, DING在執行下一條指令 (NOP) 後才生效. 舊扳的使用手冊沒有提到這一點. 我不知誰是誰非.
XiaoLiang Gao:
回复 Lichen Wang:
NOP在这里使问题看起来变得复杂、有意思了。
从JTAG仿真MSP430169来看,中断位置发生在NOP之前。但这只是初步试验的结果,无法定性。
假设我首贴贴图中的数据手册正确,并且可以理解成 ‘中断有机会发生在NOP指令之后’,那么下面这个例子会出现什么情况呢?
DINT
EINT
指令1
指令2
注:假设中断请求发生在DINT指令执行时。
那么中断实际发生在哪里呢?EINT指令之前和指令1之后两种情况都有可能?
XiaoLiang Gao:
回复 XiaoLiang Gao:
再看看这个TI原作 《 MSP430 Family Architecture Guide and Module Library》中附录的说明。
Susan Yang:
回复 XiaoLiang Gao:
建议大家参考下 http://www.ti.com.cn/cn/lit/ug/slau387c/slau387c.pdf 第7页的说明。
XiaoLiang Gao:
回复 Susan Yang:
Susan Yang
建议大家参考下 http://www.ti.com.cn/cn/lit/ug/slau387c/slau387c.pdf 第7页的说明。
XiaoLiang Gao:
回复 XiaoLiang Gao:
正在积极与TI联系,感兴趣的朋友请耐心等待。感谢Susan Yang的大力协助!