求ch563mcu的調(diào)試方法

項(xiàng)目到現(xiàn)在已經(jīng)有3個(gè)月了,基于rtos做的項(xiàng)目,目前死于一個(gè)計(jì)算中,只能串口打日志,目前是計(jì)算任務(wù)執(zhí)行一半或者執(zhí)行幾圈后死于任務(wù)調(diào)度sp賦值中

官方的debug函數(shù)沒有任何進(jìn)入跡象

求一個(gè)調(diào)試方法,或者硬件中斷什么的,能讓我打印一下日志,看看堆棧指針,內(nèi)容,pc指針,寄存器值啥的,通過串口再這樣調(diào)下去項(xiàng)目要夭折了

計(jì)算任務(wù)用到了浮點(diǎn)運(yùn)算和一個(gè)math庫的sqrt


沒辦法了,今天一整晚都研究怎么調(diào)試方便了,自己改了以下函數(shù)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

;

總算能進(jìn)中斷了,接下來研究怎么打印寄存器值和指針值了,想想就蛋疼


?可以試一下這個(gè),串口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?


感覺能力不足,沒有辦法再繼續(xù)下去了

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

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

通過UndefineInstruction異常定位到想不到的兩個(gè)指令上,實(shí)在不明白stmfd是怎么導(dǎo)致的未定義指令異常

icon_rar.gifExample1.zip

icon_rar.gifSTARTUP.zip

我把有問題的部分單獨(dú)拿出來建立了一個(gè)問題重現(xiàn)的項(xiàng)目


問題圖片,lr指針減4對(duì)應(yīng)的是?stmfd sp!,{r2}? ? ? ? ? ? ? ; push old task's pc

生成的匯編是?STMDB? ? sp!,{r2}

image.png


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频