日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]一、導(dǎo)致異常的原因很多,例如:直接使用未分配空間的指針、棧溢出等一場非法操作便會使程序進(jìn)入HardFault異常狀態(tài)。下面介紹怎么找出程序中的異常。接下來在keil_MDK工程中,編譯代碼,并debug,之后全速運(yùn)行,可以

一、導(dǎo)致異常的原因很多,例如:直接使用未分配空間的指針、棧溢出等一場非法操作便會使程序進(jìn)入HardFault異常狀態(tài)。下面介紹怎么找出程序中的異常。

接下來在keil_MDK工程中,編譯代碼,并debug,之后全速運(yùn)行,可以看到如下圖所示程序進(jìn)入HardFault異常。

如下所示我們找到SP寄存器,0x200045B8即為棧地址,棧里面的值依次為R0~R3、R12、PC(Return address)、xPSR(CPSR或SPSR)、LR。如圖我們看到劃紅線的地方,注意從右往左看。分別為0x0800427D和0x08004BFA。

在show code at address中輸入0x08004BFA,點(diǎn)擊go to即找到出現(xiàn)異常的代碼段附近下面要執(zhí)行的程序。

我們用同樣的方法在show code at address中輸入0x0800427D,找到如下代碼段

可以發(fā)現(xiàn)異常代碼就在uart_send_noackdata這個函數(shù)里,這個函數(shù)里我們定義了一個指針,沒有給他分配空間便開始使用了。由此我們掌握了第一種查找異常的方法。只要記錄棧里面第21~24以及25到28字節(jié)的內(nèi)容即可方便的找到異常代碼。下面介紹使用.map文件查找異常。.map文件在keil工程里面隨著程序的編譯會自動生成。

、

在.map文件里我們查找0x08004BFA,找到了0x08004bd8指示是uart_send_noackdata函數(shù),到此我們找到了異常代碼所在的位置。

由此我們知道我們只要找到棧里面PC(Return address)、xPSR(CPSR或SPSR)寄存器里的內(nèi)存地址便可以找到異常代碼。

CPSR

當(dāng)前程序狀態(tài)寄存器(Current Program State Register)

SPSR

保存的程序狀態(tài)寄存器(Saved Program State Register), 有6個,主要是在處理異常的時候使用.

每一種處理器模式下都有一個專用的物理寄存器作為備份的程序狀態(tài)寄存器SPSR , 當(dāng)特定的異常發(fā)生時,這個物理寄存器負(fù)責(zé)保存CPSR當(dāng)前程序狀態(tài)寄存器的內(nèi)容, 當(dāng)異常處理程序返回時,再將內(nèi)容恢復(fù)到當(dāng)前程序狀態(tài)器中,繼續(xù)向下執(zhí)行原來程序.

PC

程序計(jì)數(shù)器,是用來計(jì)數(shù)的,指示指令在存儲器的存放位置,也就是個地址信息


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉