This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

编写TMS320F28377D二次BootLoader时,把boot28.inc的初始化代码复制到DSP2833x_CodeStartBranch.asm中,陷入死循环



如题,陷入死循环代码为

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中?导致初始化一直不成功????