RM新时代网站-首页

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

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

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

程序換個IDE就不運行了?

茶話MCU ? 來源:茶話MCU ? 2023-07-24 15:30 ? 次閱讀

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

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

借助調(diào)試,在調(diào)試過程中無意發(fā)現(xiàn)了一點點差異。那就是兩個IDE分別為存放ADC結(jié)果的內(nè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開始的地方,而在IAR環(huán)境下內(nèi)存地址被安排在0x20000084開始的地方。難道問題就出在這個地方?

------正是!

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

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

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

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

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

上圖中的短橫杠表示不可訪問。原來是這樣,難怪編譯過程中沒有任何報錯提示,只是所選DMA硬件上不支持對DTCM的訪問而已。

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

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

OK,今天的話題就分享到這里。這里多分享一點,愿君少跳一次坑。下次再聊。

審核編輯:湯梓紅

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

    關(guān)注

    98

    文章

    6495

    瀏覽量

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

    關(guān)注

    0

    文章

    338

    瀏覽量

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

    關(guān)注

    117

    文章

    3785

    瀏覽量

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

    關(guān)注

    3

    文章

    560

    瀏覽量

    100544
  • STM32H743
    +關(guān)注

    關(guān)注

    0

    文章

    24

    瀏覽量

    1706

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

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

收藏 人收藏

    評論

    相關(guān)推薦

    STM8程序脫機后就不運行的原因?

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

    STM32F401 AHB時鐘大于30MHz就不運行了是怎么回事?

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

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

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

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

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

    cc2540 程序隔斷時間后就不運行了怎么回事?

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

    cc2530為什么跑了幾天后程序就不正常運行了?

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

    請問一下,STM32 boot0和boot1兩個都懸空的話程序是不是就不運行了?

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

    STC同樣的程序換個芯片就不運行

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

    為什么程序運行到OSStatInit()時就不在運行了?

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

    為什么單片機斷電重啟以后程序就不運行了?怎么解決?

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

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

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

    Vitis IDE入門helloworld程序

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

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

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

    運行c程序的基本步驟

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

    運行Python程序的幾種常見方法

    方法: 使用Python解釋器 Python解釋器是運行Python程序的基本工具。在命令行中輸入 python 命令,即可啟動解釋器。然后輸入程序代碼,按回車即可執(zhí)行。這種方法適用于簡單的
    的頭像 發(fā)表于 11-28 15:32 ?2528次閱讀
    RM新时代网站-首页