0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

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

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

程序換個(gè)IDE就不運(yùn)行了?

茶話MCU ? 來(lái)源:茶話MCU ? 2023-07-24 15:30 ? 次閱讀

有人使用STM32H743芯片做應(yīng)用開(kāi)發(fā),遇到個(gè)比較奇怪的事情。事情是這樣的,他使用ST公司的圖形化配置工具STM32CubeMx進(jìn)行基本配置后,如果基于ARM MDK IDE創(chuàng)建工程并組織代碼,編譯除錯(cuò)后運(yùn)行一切正常。但如果他基于IAR IDE創(chuàng)建工程并使用相同的用戶代碼時(shí),發(fā)現(xiàn)程序沒(méi)法正常運(yùn)行,同時(shí)還沒(méi)有任何報(bào)錯(cuò)。頗為奇怪。

經(jīng)進(jìn)一步了解。他的代碼要實(shí)現(xiàn)的一個(gè)主要功能就是ADC,并利用通用DMAADC結(jié)果搬運(yùn)到內(nèi)存?,F(xiàn)在最明顯的問(wèn)題就是,當(dāng)把IDE從MDK切換到IAR后,ADC的結(jié)果沒(méi)有被搬運(yùn)到內(nèi)存。借助調(diào)試可以確認(rèn),ADC外設(shè)確實(shí)啟動(dòng)了、DMA配置也沒(méi)有問(wèn)題,那到底怎么回事呢??jī)蓚€(gè)環(huán)境下的外設(shè)配置及用戶應(yīng)用代碼是完全一樣的。

借助調(diào)試,在調(diào)試過(guò)程中無(wú)意發(fā)現(xiàn)了一點(diǎn)點(diǎn)差異。那就是兩個(gè)IDE分別為存放ADC結(jié)果的內(nèi)存安排的地址不一樣。下面兩幅截圖來(lái)自ARM MDK和IAR環(huán)境下存放ADC結(jié)果的內(nèi)存地址。

8547dcbc-29f3-11ee-a368-dac502259ad0.png

855a604e-29f3-11ee-a368-dac502259ad0.png

不難看到,在MDK環(huán)境下,內(nèi)存地址安排在0x2400008c開(kāi)始的地方,而在IAR環(huán)境下內(nèi)存地址被安排在0x20000084開(kāi)始的地方。難道問(wèn)題就出在這個(gè)地方?

------正是!

我們先查看STMH7參考手冊(cè),看看上面2個(gè)地址位于哪些內(nèi)存區(qū)。

85bfcbf0-29f3-11ee-a368-dac502259ad0.png

也就是說(shuō),IAR默認(rèn)將存放ADC結(jié)果的內(nèi)存安排在DTCM區(qū),而MDK將其安排在AXI SRAM區(qū)。我們可以查看手冊(cè)得知,H7系列的通用DMA1或DMA2是沒(méi)法訪問(wèn)DTCM的。DTCM只能被內(nèi)核或MDMA訪問(wèn)。

85eabd2e-29f3-11ee-a368-dac502259ad0.png

861d1f94-29f3-11ee-a368-dac502259ad0.png

上圖中的短橫杠表示不可訪問(wèn)。原來(lái)是這樣,難怪編譯過(guò)程中沒(méi)有任何報(bào)錯(cuò)提示,只是所選DMA硬件上不支持對(duì)DTCM的訪問(wèn)而已。

既然知道了原因,問(wèn)題就好解決了。我們可以在IAR環(huán)境里直接給定存儲(chǔ)地址,能讓DMA訪問(wèn)到就行?;蛘咴贗AR調(diào)試環(huán)境下修改內(nèi)存使用的默認(rèn)地址于AXI SRAM區(qū)【參考下面截圖示意操作】。

86690580-29f3-11ee-a368-dac502259ad0.png

OK,今天的話題就分享到這里。這里多分享一點(diǎ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)投訴
  • adc
    adc
    +關(guān)注

    關(guān)注

    98

    文章

    6391

    瀏覽量

    543762
  • IDE
    IDE
    +關(guān)注

    關(guān)注

    0

    文章

    334

    瀏覽量

    46614
  • 程序
    +關(guān)注

    關(guān)注

    116

    文章

    3756

    瀏覽量

    80751
  • dma
    dma
    +關(guān)注

    關(guān)注

    3

    文章

    556

    瀏覽量

    100344
  • STM32H743
    +關(guān)注

    關(guān)注

    0

    文章

    24

    瀏覽量

    1652

原文標(biāo)題:程序換個(gè)IDE就不運(yùn)行了?

文章出處:【微信號(hào):stmcu832,微信公眾號(hào):茶話MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    STM8程序脫機(jī)后就不運(yùn)行的原因?

    Delay_T = 1000; while(Delay_T); 上面這部分程序在Main()中的初始化程序后,仿真可正常執(zhí)行。但脫機(jī)后,就不運(yùn)行了。 改為 Delay_T = 100
    發(fā)表于 04-19 08:05

    STM32F401 AHB時(shí)鐘大于30MHz就不運(yùn)行了是怎么回事?

    STM32F401 AHB時(shí)鐘大于30MHz 就不運(yùn)行了,手冊(cè)數(shù)據(jù)是84MHz,是什么問(wèn)題?
    發(fā)表于 04-24 08:28

    添加移位寄存器后就不能正常運(yùn)行了,該怎么破?

    之前的程序運(yùn)行很正常,但是添加一個(gè)移位寄存器來(lái)記錄事件的發(fā)生次數(shù)后,程序就不能正常運(yùn)行了,請(qǐng)高手指點(diǎn),附圖兩張。
    發(fā)表于 03-03 23:13

    第一次使用軟件仿真,我寫了個(gè)調(diào)試程序,在開(kāi)發(fā)板上可以運(yùn)行,但在PROTEUS上就不行了,為什么呢

    ` 本帖最后由 wcm014 于 2015-11-21 15:01 編輯 如題,我用PIC12F675寫了個(gè)調(diào)試程序,第一次用軟件仿真,在開(kāi)發(fā)板上可以運(yùn)行,但在PROTEUS上就不行了,是不是我
    發(fā)表于 11-21 14:31

    cc2540 程序隔斷時(shí)間后就不運(yùn)行了怎么回事?

    cc2540下載程序后,過(guò)一段時(shí)間(幾十個(gè)小時(shí))程序就不運(yùn)行了,重啟也不行,必須要重新燒錄程序才能運(yùn)行
    發(fā)表于 03-11 15:25

    cc2530為什么跑了幾天后程序就不正常運(yùn)行了

    cc2530為什么跑了幾天后程序就不正常運(yùn)行了?cc2530程序剛開(kāi)始都能正常的運(yùn)行,可是當(dāng)跑了幾天左右
    發(fā)表于 04-05 16:16

    請(qǐng)問(wèn)一下,STM32 boot0和boot1兩個(gè)都懸空的話程序是不是就不會(huì)運(yùn)行了?

    請(qǐng)問(wèn)一下,STM32 boot0和boot1兩個(gè)都懸空的話程序是不是就不會(huì)運(yùn)行了運(yùn)行程序的話boot0必須要接地嗎?求大神解答一下,本人新手。多謝!!
    發(fā)表于 06-05 18:45

    STC同樣的程序換個(gè)芯片就不運(yùn)行

    如題,壇友們有沒(méi)遇到這樣的問(wèn)題呢我在STC12LE5A60S2-LQFP44上面可以運(yùn)行程序,移植到STC12C5616AD-LQFP32上就不運(yùn)行,郁悶了兩個(gè)晚上。。。頭文件由S
    發(fā)表于 04-08 22:49

    為什么程序運(yùn)行到OSStatInit()時(shí)就不在運(yùn)行了

    程序運(yùn)行到OSStatInit()時(shí)就不在運(yùn)行了,將OSStatInit()注釋掉后每個(gè)任務(wù)都只運(yùn)行一次后就不再運(yùn)行了,但是這兩種情況下,卡
    發(fā)表于 10-15 21:37

    為什么單片機(jī)斷電重啟以后程序就不運(yùn)行了?怎么解決?

    單片機(jī)最小系統(tǒng)是我自己焊的,我認(rèn)為不是程序和芯片的問(wèn)題,芯片和程序在其它的插座上運(yùn)行的好好的。但我焊的這個(gè)插座卻不行。是晶振,復(fù)位還是什么電路出問(wèn)題了嗎
    發(fā)表于 10-26 07:00

    使用VISUALDSP++5.0,為什么一選擇指令和數(shù)據(jù)cache程序就不運(yùn)行了

    我使用VISUALDSP++5.0,不選擇指令和數(shù)據(jù)cache,程序就能運(yùn)行,為什么一選擇指令和數(shù)據(jù)cache,程序就不運(yùn)行了,不能仿真
    發(fā)表于 12-20 08:27

    Vitis IDE入門helloworld程序

    第一個(gè)Xilinx Vitis IDE入門helloworld程序
    發(fā)表于 07-25 17:37 ?1225次閱讀
    Vitis <b class='flag-5'>IDE</b>入門helloworld<b class='flag-5'>程序</b>

    基于IAR IDE創(chuàng)建工程程序不能運(yùn)行怎么解決

    除錯(cuò)后運(yùn)行一切正常。但如果他基于IARIDE創(chuàng)建工程并使用相同的用戶代碼時(shí),發(fā)現(xiàn)程序沒(méi)法正常運(yùn)行,同時(shí)還沒(méi)有任何報(bào)錯(cuò)。頗為奇怪。 經(jīng)進(jìn)一步了解。他的代碼要實(shí)現(xiàn)的一個(gè)主要功能就是ADC,并利用通用DMA將ADC結(jié)果搬運(yùn)到內(nèi)存。現(xiàn)在
    的頭像 發(fā)表于 07-22 17:27 ?1605次閱讀
    基于IAR <b class='flag-5'>IDE</b>創(chuàng)建工程<b class='flag-5'>程序</b>不能<b class='flag-5'>運(yùn)行</b>怎么解決

    運(yùn)行c程序的基本步驟

    運(yùn)行C程序的基本步驟可以分為以下四個(gè)主要步驟:編寫程序、編譯程序、鏈接程序運(yùn)行程序。本文將詳細(xì)
    的頭像 發(fā)表于 11-27 16:21 ?5291次閱讀

    運(yùn)行Python程序的幾種常見(jiàn)方法

    方法: 使用Python解釋器 Python解釋器是運(yùn)行Python程序的基本工具。在命令行中輸入 python 命令,即可啟動(dòng)解釋器。然后輸入程序代碼,按回車即可執(zhí)行。這種方法適用于簡(jiǎn)單的
    的頭像 發(fā)表于 11-28 15:32 ?2320次閱讀