如题,陷入死循环代码为
LOOP: MOVB AH,#0 ; zero out upper addr bits
PREAD AL,*XAR7 ; load address of variable to be inited
ADDB XAR7,#1 ; point to initialization data B
GET_DATA,NTC ; get data if variable is not far
CLRC TC ; reset TC bit used as far flag
PREAD AH,*XAR7 ; otherwise, get hi bits of 22-bit addr
ADDB XAR7,#1
GET_DATA:
MOVL XAR6,ACC ; address
RPT AR1 ; repeat length + 1 times
|| PREAD *XAR6++,*XAR7 ; copy data from table to memory
MOVL ACC,XAR7 ; using ACC as temp, point
XAR7 to ADD ACC,AR1 ; next cinit record since
PREAD ADDB ACC,#1 ; doesn't change value of XAR7.
MOVL XAR7,ACC
START: PREAD AL,*XAR7 ; load length
B GET_ADDR,GEQ ; a length < 0 denotes far data
NEG AL ; negate value to get real length
SETC TC ; flag that the address field is 32-bits
GET_ADDR: MOVZ AR1,AL ; copy length value to loop register
ADDB XAR7,#1 ; point to address field
BANZ LOOP,AR1–
如上代码显示跳出LOOP循环的条件是AR1为0,但是在GET_ADDR: MOVZ AR1,AL这一行代码中一直给AR1赋值为2,导致AR1一直处于大于0的状态。
疑问是:在以前使用自己写的测试程序没有出现过这种情况,在最近移植到公司程序时出现了这种情况
陷入死循环现象:在使用仿真器在线重启时使用CPU restart能够正常运行,在掉电重启时就会直接进入死循环
猜想:是否是在掉电重启时,一部分代码没有运行在RAM中?导致初始化一直不成功????
Susan Yang:
请问“把boot28.inc的初始化代码复制到DSP2833x_CodeStartBranch.asm中”
为何要将377的复制到2833x的asm内?
若是可以的话,请介绍一下您现在要实现的流程,谢谢