求ch563mcu的调试方法

项目到现在已经有3个月了,基于rtos做的项目,目前死于一个计算中,只能串口打日志,目前是计算任务执行一半或者执行几圈后死于任务调度sp赋值中

官方的debug函数没有任何进入迹象

求一个调试方法,或者硬件中断什么的,能让我打印一下日志,看看堆栈指针,内容,pc指针,寄存器值啥的,通过串口再这样调下去项目要夭折了

计算任务用到了浮点运算和一个math库的sqrt


没办法了,今天一整晚都研究怎么调试方便了,自己改了以下函数DataAbort_P 为DataAbortHand

DataAbort

        IMPORT DataAbortHand

                SUB     LR, LR, #8

                STMFD   SP!, {R0-R12, LR}

;                MRS     R1, SPSR

;                STMFD   SP!, {R1}

                BL      DataAbortHand

;                LDMFD   SP!, {R1}

;                MSR     SPSR_CXSF, R1

                LDMFD   SP!, {R0-R12, PC}^

                B       DataAbort

;

总算能进中断了,接下来研究怎么打印寄存器值和指针值了,想想就蛋疼


 可以试一下这个,串口0输出的PC和SP

LDR R0,=0x0040D000
//========SP==========
 MOV R2,R13
    STR R2,[R0]
 nop
 nop
 nop
 MOV R1,R2,LSR#8
 STR R1,[R0]
 nop
 nop
 nop
 MOV R1,R2,LSR#16
 STR R1,[R0]
 nop
 nop
 nop
 MOV R1,R2,LSR#24
 STR R1,[R0]
 nop
 nop
 nop 
//========PC==========
 MOV R2,R15
    STR R2,[R0]
 nop
 nop
 nop
 MOV R1,R2,LSR#8
 STR R1,[R0]
 nop
 nop
 nop
 MOV R1,R2,LSR#16
 STR R1,[R0]
 nop
 nop
 nop
 MOV R1,R2,LSR#24
 STR R1,[R0]
 nop
 nop
 nop 


感觉能力不足,没有办法再继续下去了

stmfd sp!,{r2}              ; push old task's pc

stmfd sp!,{r4-r12,lr}       ; push old task's lr,r12-r4

通过UndefineInstruction异常定位到想不到的两个指令上,实在不明白stmfd是怎么导致的未定义指令异常

icon_rar.gifExample1.zip

icon_rar.gifSTARTUP.zip

我把有问题的部分单独拿出来建立了一个问题重现的项目


问题图片,lr指针减4对应的是 stmfd sp!,{r2}              ; push old task's pc

生成的汇编是 STMDB    sp!,{r2}

image.png


只有登录才能回复,可以选择微信账号登录