0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

在IAR Embedded Workbench中程序連上仿真器調(diào)試時(shí)不正常的情況

工程師鄧生 ? 來(lái)源:IAR愛亞系統(tǒng) ? 作者:IAR愛亞系統(tǒng) ? 2022-09-02 11:05 ? 次閱讀

上期我們介紹了在IAR Embedded Workbench中程序連上仿真器調(diào)試時(shí)正常但是斷開仿真器單獨(dú)運(yùn)行時(shí)不正常的情況。

嵌入式軟件開發(fā)中,有時(shí)會(huì)遇到程序斷開仿真器單獨(dú)運(yùn)行時(shí)正常,但是連上仿真器調(diào)試時(shí)不正常。本文主要介紹在IAR Embedded Workbench中程序斷開仿真器單獨(dú)運(yùn)行時(shí)正常但是連上仿真器調(diào)試時(shí)不正常的情況。

程序仿真調(diào)試和單獨(dú)運(yùn)行的區(qū)別

37495768-29de-11ed-ba43-dac502259ad0.png

原因分析及對(duì)應(yīng)策略

1. 程序連上仿真器調(diào)試時(shí)Flash loader及mac宏會(huì)設(shè)置對(duì)應(yīng)的寄存器和程序開始運(yùn)行是通過(guò)軟復(fù)位(Software Reset),而斷開仿真器單獨(dú)運(yùn)行時(shí)需要程序設(shè)置對(duì)應(yīng)的寄存器和程序開始運(yùn)行是通過(guò)硬復(fù)位 (Hardware Reset)。由于程序斷開仿真器單獨(dú)運(yùn)行時(shí)正常,連上仿真器調(diào)試的時(shí)候不需要像之前那樣不使用Flash loader,只需要在調(diào)試開始之前進(jìn)行一次硬復(fù)位 (Hardware Reset)(硬復(fù)位讓程序在連上仿真器調(diào)試時(shí)的初始狀態(tài)與斷開仿真器單獨(dú)運(yùn)行時(shí)硬復(fù)位之后的初始狀態(tài)時(shí)一致的)。

下面主要介紹如何在IAR Embedded Workbench中連上仿真器調(diào)試時(shí)進(jìn)行硬復(fù)位 (Hardware Reset):

下載完成之后讓程序停在復(fù)位向量而不是main函數(shù)

在IAR Embedded Workbench工程選項(xiàng)Options > Debugger > Setup >Run to選項(xiàng):默認(rèn)情況下會(huì)選中Run to main,調(diào)試器下載完成之后,程序會(huì)停在main函數(shù)。如果不勾選Run to,調(diào)試器下載完成之后,程序會(huì)停在復(fù)位向量,這樣就可以從復(fù)位向量開始調(diào)試。

37730fd6-29de-11ed-ba43-dac502259ad0.png37aa4ea6-29de-11ed-ba43-dac502259ad0.png

下載完成之后通過(guò)調(diào)試器進(jìn)行Hardware Reset

如果對(duì)應(yīng)的硬件仿真器支持Hardware Reset并且對(duì)應(yīng)的硬件仿真器的nRESET引腳連接到MCU的復(fù)位引腳nRESET, 將Reset類型改成Hardware,然后Reset(模擬程序單獨(dú)運(yùn)行時(shí)硬復(fù)位,并從復(fù)位向量開始調(diào)試)。

37c47d12-29de-11ed-ba43-dac502259ad0.png

下載完成之后通過(guò)外部Reset進(jìn)行Hardware Reset

如果對(duì)應(yīng)的硬件仿真器不支持Hardware Reset或者并且對(duì)應(yīng)的硬件仿真器的nRESET引腳沒有連接到MCU的復(fù)位引腳nRESET, 可以通過(guò)外部Reset對(duì)MCU進(jìn)行Hardware Reset。但是外部Reset之后,程序需要停在復(fù)位向量,然后就可以通過(guò)調(diào)試器調(diào)試。 如果對(duì)應(yīng)的MCU和硬件仿真器支持CORERESET選項(xiàng) (Options > I-jet > Breakpoints > Catch exceptions > CORERESET),勾選CORERESET之后,調(diào)試時(shí)如果有外部Reset, 程序會(huì)停在復(fù)位向量。

注:Vector catch是arm支持的調(diào)試特性,更多信息請(qǐng)參考arm相關(guān)文檔。

388bc4da-29de-11ed-ba43-dac502259ad0.png38b76900-29de-11ed-ba43-dac502259ad0.png

如果對(duì)應(yīng)的MCU或者硬件仿真器不支持CORERESET選項(xiàng),則需要在復(fù)位向量打斷點(diǎn),調(diào)試時(shí)如果有外部Reset, 程序會(huì)停在復(fù)位向量。

39359dca-29de-11ed-ba43-dac502259ad0.png

2. 如果Library low-level interface implementation是通過(guò)semihosting (Options > General Options > Library low-level interface implementation > Semihosted > Via semihosting)實(shí)現(xiàn):

3976d0a6-29de-11ed-ba43-dac502259ad0.png

而semihosting又是通過(guò)SVC指令來(lái)實(shí)現(xiàn)(非Cortex-M的32位arm內(nèi)核):

3b205cf6-29de-11ed-ba43-dac502259ad0.png

如果程序里面也使用了SVC,那么連上仿真器調(diào)試的時(shí)候程序會(huì)停在SVC Handler:

3b4be4b6-29de-11ed-ba43-dac502259ad0.png

可以通過(guò)將Library low-level interface implementation 設(shè)置為None (Options > General Options > Library low-level interface implementation > None):

3b65b3aa-29de-11ed-ba43-dac502259ad0.png

3. 為了提高系統(tǒng)的健壯性,越來(lái)越多的MCU內(nèi)部集成了Watchdog, 可以讓MCU在軟件出錯(cuò)的時(shí)候復(fù)位MCU。MCU內(nèi)部Watchdog控制寄存器一般會(huì)有選項(xiàng)可以配置Watchdog在調(diào)試模式是否使能:

3bdf2c08-29de-11ed-ba43-dac502259ad0.png3c07805e-29de-11ed-ba43-dac502259ad0.png

當(dāng)Watchdog配置為調(diào)試模式不使能時(shí),Watchdog在調(diào)試模式暫停時(shí)會(huì)停止,不會(huì)導(dǎo)致MCU復(fù)位。反之,當(dāng)Watchdog配置為調(diào)試模式使能時(shí),Watchdog在調(diào)試模式暫停時(shí)會(huì)繼續(xù)運(yùn)行,從而可能會(huì)導(dǎo)致MCU復(fù)位(因?yàn)闀和5臅r(shí)候Watchdog得不到正常的刷新)。在單獨(dú)運(yùn)行時(shí),當(dāng)軟件運(yùn)行正常時(shí),Watchdog會(huì)正常的刷新,所以不會(huì)復(fù)位。

將MCU內(nèi)部Watchdog配置成在調(diào)試模式不使能,這樣在調(diào)試時(shí),暫停的時(shí)候Watchdog會(huì)停止,不會(huì)復(fù)位MCU。

總結(jié)

本文主要介紹了在IAR Embedded Workbench中程序斷開仿真器單獨(dú)運(yùn)行時(shí)正常但是連上仿真器調(diào)試時(shí)不正常的情況。通過(guò)分析可能的原因及對(duì)應(yīng)的策略,可以解決斷開仿真器單獨(dú)運(yùn)行時(shí)正常正常但是連上仿真器調(diào)試時(shí)不正常的問(wèn)題。


審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5363

    瀏覽量

    120931
  • 仿真器
    +關(guān)注

    關(guān)注

    14

    文章

    1019

    瀏覽量

    83881
  • IAR
    IAR
    +關(guān)注

    關(guān)注

    5

    文章

    354

    瀏覽量

    36747
  • 調(diào)試器
    +關(guān)注

    關(guān)注

    1

    文章

    306

    瀏覽量

    23803

原文標(biāo)題:程序單獨(dú)運(yùn)行正常但是仿真調(diào)試不正常

文章出處:【微信號(hào):IAR愛亞系統(tǒng),微信公眾號(hào):IAR愛亞系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 0人收藏

    評(píng)論

    相關(guān)推薦

    是什么原因使ADS4145 VCM腳輸出電壓不正常?

    這兩天調(diào)試高速模數(shù)轉(zhuǎn)換ADS4145。我將ADS4145的DFS腳接0.65V((3/8) AVDD ± 100mV),OE接 1.8V,時(shí)鐘腳CLKP輸入1.8V 80MHz時(shí)鐘?!∥矣?/div>
    發(fā)表于 01-10 08:09

    伺服電機(jī)振動(dòng)不正常原因和維修及案例分析

    ? ? ? 伺服電機(jī)作為自動(dòng)化系統(tǒng)中的關(guān)鍵組件,其穩(wěn)定運(yùn)行對(duì)于整個(gè)生產(chǎn)線的效率和穩(wěn)定性至關(guān)重要。然而,伺服電機(jī)在運(yùn)行過(guò)程中可能會(huì)遇到振動(dòng)不正常的問(wèn)題,這不僅影響電機(jī)的性能,還可能對(duì)機(jī)械系統(tǒng)造成損害
    的頭像 發(fā)表于 12-18 09:22 ?241次閱讀
    伺服電機(jī)振動(dòng)<b class='flag-5'>不正常</b>原因和維修及案例分析

    為什么AIC23剛上電時(shí),工作不正常?

    工作USB模式)都正常,只是聲音不正常,但是經(jīng)過(guò)上面的觸碰后,就可以實(shí)現(xiàn)轉(zhuǎn)為正常狀態(tài)。 請(qǐng)問(wèn)各位,這兩個(gè)信號(hào)有什么關(guān)系?為啥會(huì)出現(xiàn)這種情況
    發(fā)表于 10-21 07:50

    仿真器的使用方法有哪些

    硬件。它可以幫助工程師實(shí)際硬件或軟件部署之前,對(duì)設(shè)計(jì)進(jìn)行驗(yàn)證和調(diào)試仿真器可以分為軟件仿真器和硬件仿真器兩種類型。 1.1 軟件
    的頭像 發(fā)表于 08-22 09:16 ?1036次閱讀

    ESP32 Dev Module上傳程序運(yùn)行不正常的原因?

    我的開發(fā)核心板是ESP-WROOM-32,CH9102X驅(qū)動(dòng),開發(fā)環(huán)境是Arduino IDE, 開發(fā)板選哪個(gè)?我選ESP32 Dev Module,但是感覺有點(diǎn)詭異,上傳程序運(yùn)行不正常。 應(yīng)該選
    發(fā)表于 07-01 07:15

    AD7190STM32運(yùn)行正常,ESP32不正常,為什么?

    STM32運(yùn)行正常,ESP32不正常
    發(fā)表于 06-03 08:28

    IAR版本為Embedded Workbench 6.5 Kickstart 1.4 編繹報(bào)錯(cuò)怎么解決?

    請(qǐng)教 IAR 這個(gè)錯(cuò)誤是什么問(wèn)題 IAR版本為Embedded Workbench 6.0 Kickstart 1.30 編繹
    發(fā)表于 05-09 06:36

    MotorControl Workbench 5.2.0生成kei v5.26編譯警告如何解決?

    workbench里把user interface 里面都關(guān)掉,然后用V6.0編譯,還是有警告,下載程序,電機(jī)不正常轉(zhuǎn),可是一換成V5.0編譯,電機(jī)就正常運(yùn)轉(zhuǎn)。
    發(fā)表于 04-24 08:23

    如何維修安捷倫N8946電源輸出不正常

    。其電壓輸出范圍為0至200V,電流輸出范圍為0至140A,最大輸出功率為10000W。同時(shí),該電源支持340–440 VAC的交流輸入電壓范圍。 維修安捷倫N8946電源輸出不正常 安捷倫N8946電源輸出不正常時(shí),可以嘗試以下步驟進(jìn)行維修: 檢查電源輸入:首先確認(rèn)電源
    的頭像 發(fā)表于 04-23 18:07 ?755次閱讀
    如何維修安捷倫N8946電源輸出<b class='flag-5'>不正常</b>

    STM32f030的板子調(diào)試寄存不正常是什么原因?qū)е碌模?/a>

    我能確定GPIOB13,15我是設(shè)置成SPI模式,oled也正常顯示但是調(diào)試寄存顯示不正常是什么原因
    發(fā)表于 04-11 07:18

    IAR FOR ARM和IAR FOR STM8無(wú)法共存怎么解決?

    IAR Embedded Workbench,CD 找了原程序,發(fā)現(xiàn)IAR FOR ARM和FOR STM8安裝完后,都叫IarIdePm
    發(fā)表于 04-07 07:39

    stm32H747M4內(nèi)核使用AXI SRAM不正常的原因?

    ,斷電重啟之后也不正常。不正常的現(xiàn)象是2個(gè)內(nèi)核里面的點(diǎn)燈程序都無(wú)法運(yùn)行,感覺是哪里死掉了一樣。M7內(nèi)核里已經(jīng)配置了MPU和cache。m
    發(fā)表于 03-28 09:20

    IAR推出新版IAR Embedded Workbench for Arm功能安全版

    全球知名的嵌入式系統(tǒng)開發(fā)軟件解決方案供應(yīng)商IAR Systems近日宣布,其旗艦產(chǎn)品IAR Embedded Workbench for Arm功能安全版已更新至最新版本9.50.3。
    的頭像 發(fā)表于 02-22 17:29 ?1463次閱讀

    IAR推出新版IAR Embedded Workbench for Arm功能安全版

    瑞典烏普薩拉,2024年2月20日 – 全球領(lǐng)先的嵌入式系統(tǒng)開發(fā)軟件解決方案供應(yīng)商IAR宣布:推出其旗艦產(chǎn)品IAREmbedded Workbench for Arm功能安全版的最新版本9.50.3。
    的頭像 發(fā)表于 02-21 13:47 ?864次閱讀

    MB95f718E芯片仿真燒寫不正常怎么解決?

    使用同樣仿真器同樣的程序是能正常工作的,可以確定硬件和軟件部分沒有問(wèn)題。不正常的芯片仿真時(shí)可以看到時(shí)鐘寄存
    發(fā)表于 02-21 06:14

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品