下載燒錄后, 如何判定程序是否運(yùn)行
嵌入式軟件開(kāi)發(fā)成功后,我們就要將程序燒寫(xiě)到MCU里面,如何判斷燒錄后的程序是否運(yùn)行呢?
1. 先用仿真器(JTAG/J-link)下載到板子內(nèi), 下載后, 在程序的第一行設(shè)置斷點(diǎn), 讓它停住, 能停住, 說(shuō)明仿真器沒(méi)問(wèn)題, 程序能執(zhí)行起來(lái)了.
2. 在檢查下 PC 寄存器的值是否正確. 以確定沒(méi)有跑飛掉, 在指定的范圍內(nèi).
3. 檢查下 CPU 內(nèi)部 RAM (或者外部的 SDRAM)的內(nèi)容是否和下載的執(zhí)行文件(bin, hex, elf等格式)相同.
4. 一般在開(kāi)始處設(shè)置的是程序狀態(tài)寄存器(如 ARM 的 CPSR), 執(zhí)行后觀察相應(yīng)的寄存器值有沒(méi)有按照預(yù)期改變. 如, u-boot 源碼中的 start.S 文件中開(kāi)始的語(yǔ)句:
[cpp] view plaincopy/*
* the actual start code
*/
start_code:
/*
* set the cpu to SVC32 mode, 設(shè)置狀態(tài)寄存器, 選定工作模式(匯編指令參考相關(guān)文檔)
*/
mrs r0, cpsr
bic r0, r0, #0x1f /* 指定位置 1 */
orr r0, r0, #0xd3 /* 清 0 指定位 */
msr cpsr, r0
5. 繼續(xù)單步執(zhí)行, 觀察 PC 指針是否跟著改變(除了函數(shù)調(diào)用, 中斷或 goto 語(yǔ)句外, PC 值一般都是累加的), 再觀察程序運(yùn)行的結(jié)果是否正確.
6. 其實(shí)還有個(gè)簡(jiǎn)單的方法, 就是用示波器來(lái)觀察相應(yīng)的引腳, 當(dāng)然你得有引腳引出來(lái). 通過(guò)觀察波形也可以判斷程序是否正常. 不過(guò)這方法是有局限的.
如果上述步驟中沒(méi)有任何問(wèn)題, 基本可以判定程序是運(yùn)行的, 仿真器無(wú)問(wèn)題,CPU工作是正常的, 電源模塊暫時(shí)是正常的工作的. 要想判定整體的硬件和程序是否正常工作還需要做進(jìn)一步的測(cè)試.
編輯:admin 最后修改時(shí)間:2019-06-17