fsweiliang 发表于 2013-7-29 02:10

几乎崩溃,一个无聊语句,居然折腾一天

一个程序,居然仿真下莫名其妙会产生无声现象,后来加进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 程序才正常,吐血,查死人的,大家遇到过这样问题么。

chen30518 发表于 2013-7-29 08:09

{:3_88:}刚同学回复我,说此问题为时序冲突

airspace 发表于 2013-7-29 08:22

深奥了一点,不太明白。

forsli@163.com 发表于 2013-7-29 09:02

并不是它无聊,像一些DSP芯片、一些高速并行流水线执行的RISC指令芯片要注意此问题,在跳转操作、中断返回、调用、调用返回都要等待几个空操作,原因是它是先等之前正在运行的动作完成才能跳到别的地方执行。不过如果是C或其它高级语言,编译器就会替你做这步工作,不需你理会。

hifi1969 发表于 2013-7-29 12:29

伟哥在搞播放器???

别时方觉依依 发表于 2013-7-29 12:31

本帖最后由 别时方觉依依 于 2013-7-29 12:38 编辑

第一种可能是时序冲突。因为ARM是乱序执行的。
第二种可能是字节对齐的问题。编译的时候16位指令和32位指令混编的。可能导致读指令错误。

这两种问题我都碰到过。确实是很头痛的问题。

其实第二种情况 我是在 C下面和 汇编环境下都遇到。当时开始程序是C写的。单步都没有问题。但是自由运行时就不对。只好跟踪到汇编代码里去。汇编单步也是可以的。将整个代码用汇编重新写了遍。还是不行。为这个问题,查了2天。以为IC坏了。换了4片。最终还是网上找到原因。

现在别问我ARM的东西了。2年没有去碰它了。

fsweiliang 发表于 2013-7-29 14:08

我是用89C51的汇编,真个搞死人的,这样,小2个NOP就不行,以前都没遇到过

卡西利亚斯 发表于 2013-7-29 15:02

fsweiliang 发表于 2013-7-29 14:08 static/image/common/back.gif
我是用89C51的汇编,真个搞死人的,这样,小2个NOP就不行,以前都没遇到过

为何还用汇编?

wood2k 发表于 2013-7-29 16:01

看不懂的路过,LZ写得像天书,膜拜一下!!!:$

zhong.jun 发表于 2013-7-29 16:03

上一语句或者有中断执行,执行时间不够。

1411kbps 发表于 2013-7-29 16:38

除非MCU的资源紧张,否则别用汇编。

别时方觉依依 发表于 2013-7-29 16:50

楼主用的89C51汇编,但是芯片不是89C51吧。
如果是其他芯片。是有可能出现这个问题。说下用什么芯片?

windtf 发表于 2013-7-29 16:58

jure 发表于 2013-7-29 19:28

你可能用的是stc 单片机,这片子用汇编要注意有的指令最好加延时,厂家的说法是CPU太快了有的硬件还来不及执行,我喜欢用C,移植很方便

kzar 发表于 2013-7-29 19:37

需要一两步空操作延迟时间,,,

fsweiliang 发表于 2013-7-29 19:54

我还没用芯片。只是用仿真器调的。周立功的

jiajun2888 发表于 2013-7-29 20:11

不懂,来看看学习学习

c77 发表于 2013-7-29 21:08

怎么没有听过acall这个指令啊

forsli@163.com 发表于 2013-7-30 08:42

8位机程序一个半月前我也遇到过此问题,同样求解:

你的是在跳转之前加,我的是在跳转进入之前加,或跳转进入之后用用程序运行程序前加都可以。
这是我用AVR8位机8年了,第一次遇到的问题,
样机做了两个,一个已交给客户,一个扔给我小孩玩,
到现在也没有发现什么问题,现在一也一直没弄清楚

fsweiliang 发表于 2013-7-30 12:31

搞的我现在到处加NOP.,,,,,
页: [1] 2
查看完整版本: 几乎崩溃,一个无聊语句,居然折腾一天