几乎崩溃,一个无聊语句,居然折腾一天
一个程序,居然仿真下莫名其妙会产生无声现象,后来加进2个NOP空指令就正常,这算什么道理,气死人acall senda
nop
nop
jb SIGN_FIR,PLAY1A
nop
nop
PLAY1: mov a,#02h ;SMUTE=1 ¾²Òô¹Ø---- Â˲¨Æ÷ÉèÖÃΪ¼±¾ç·­¹ö
nop
nop
jmp PLAY2
NOP
nop
就是在jmp PLAY2 之上必需加2个NOP 程序才正常,吐血,查死人的,大家遇到过这样问题么。 {:3_88:}刚同学回复我,说此问题为时序冲突 深奥了一点,不太明白。 并不是它无聊,像一些DSP芯片、一些高速并行流水线执行的RISC指令芯片要注意此问题,在跳转操作、中断返回、调用、调用返回都要等待几个空操作,原因是它是先等之前正在运行的动作完成才能跳到别的地方执行。不过如果是C或其它高级语言,编译器就会替你做这步工作,不需你理会。 伟哥在搞播放器??? 本帖最后由 别时方觉依依 于 2013-7-29 12:38 编辑
第一种可能是时序冲突。因为ARM是乱序执行的。
第二种可能是字节对齐的问题。编译的时候16位指令和32位指令混编的。可能导致读指令错误。
这两种问题我都碰到过。确实是很头痛的问题。
其实第二种情况 我是在 C下面和 汇编环境下都遇到。当时开始程序是C写的。单步都没有问题。但是自由运行时就不对。只好跟踪到汇编代码里去。汇编单步也是可以的。将整个代码用汇编重新写了遍。还是不行。为这个问题,查了2天。以为IC坏了。换了4片。最终还是网上找到原因。
现在别问我ARM的东西了。2年没有去碰它了。 我是用89C51的汇编,真个搞死人的,这样,小2个NOP就不行,以前都没遇到过 fsweiliang 发表于 2013-7-29 14:08 static/image/common/back.gif
我是用89C51的汇编,真个搞死人的,这样,小2个NOP就不行,以前都没遇到过
为何还用汇编? 看不懂的路过,LZ写得像天书,膜拜一下!!!:$ 上一语句或者有中断执行,执行时间不够。 除非MCU的资源紧张,否则别用汇编。 楼主用的89C51汇编,但是芯片不是89C51吧。
如果是其他芯片。是有可能出现这个问题。说下用什么芯片? 你可能用的是stc 单片机,这片子用汇编要注意有的指令最好加延时,厂家的说法是CPU太快了有的硬件还来不及执行,我喜欢用C,移植很方便 需要一两步空操作延迟时间,,, 我还没用芯片。只是用仿真器调的。周立功的 不懂,来看看学习学习 怎么没有听过acall这个指令啊 8位机程序一个半月前我也遇到过此问题,同样求解:
你的是在跳转之前加,我的是在跳转进入之前加,或跳转进入之后用用程序运行程序前加都可以。
这是我用AVR8位机8年了,第一次遇到的问题,
样机做了两个,一个已交给客户,一个扔给我小孩玩,
到现在也没有发现什么问题,现在一也一直没弄清楚 搞的我现在到处加NOP.,,,,,
页:
[1]
2