有人使用STM32H743芯片做應(yīng)用開發(fā),遇到個(gè)比較奇怪的事情。事情是這樣的,他使用ST公司的圖形化配置工具STM32CubeMx進(jìn)行基本配置后,如果基于ARM MDK IDE創(chuàng)建工程并組織代碼,編譯除錯(cuò)后運(yùn)行一切正常。但如果他基于IAR IDE創(chuàng)建工程并使用相同的用戶代碼時(shí),發(fā)現(xiàn)程序沒法正常運(yùn)行,同時(shí)還沒有任何報(bào)錯(cuò)。頗為奇怪。
經(jīng)進(jìn)一步了解。他的代碼要實(shí)現(xiàn)的一個(gè)主要功能就是ADC,并利用通用DMA將ADC結(jié)果搬運(yùn)到內(nèi)存。現(xiàn)在最明顯的問題就是,當(dāng)把IDE從MDK切換到IAR后,ADC的結(jié)果沒有被搬運(yùn)到內(nèi)存。借助調(diào)試可以確認(rèn),ADC外設(shè)確實(shí)啟動(dòng)了、DMA配置也沒有問題,那到底怎么回事呢??jī)蓚€(gè)環(huán)境下的外設(shè)配置及用戶應(yīng)用代碼是完全一樣的。
借助調(diào)試,在調(diào)試過程中無意發(fā)現(xiàn)了一點(diǎn)點(diǎn)差異。那就是兩個(gè)IDE分別為存放ADC結(jié)果的內(nèi)存安排的地址不一樣。下面兩幅截圖來自ARM MDK和IAR環(huán)境下存放ADC結(jié)果的內(nèi)存地址。
不難看到,在MDK環(huán)境下,內(nèi)存地址安排在0x2400008c開始的地方,而在IAR環(huán)境下內(nèi)存地址被安排在0x20000084開始的地方。難道問題就出在這個(gè)地方?
------正是!
我們先查看STMH7參考手冊(cè),看看上面2個(gè)地址位于哪些內(nèi)存區(qū)。
也就是說,IAR默認(rèn)將存放ADC結(jié)果的內(nèi)存安排在DTCM區(qū),而MDK將其安排在AXI SRAM區(qū)。我們可以查看手冊(cè)得知,H7系列的通用DMA1或DMA2是沒法訪問DTCM的。DTCM只能被內(nèi)核或MDMA訪問。
上圖中的短橫杠表示不可訪問。原來是這樣,難怪編譯過程中沒有任何報(bào)錯(cuò)提示,只是所選DMA硬件上不支持對(duì)DTCM的訪問而已。
既然知道了原因,問題就好解決了。我們可以在IAR環(huán)境里直接給定存儲(chǔ)地址,能讓DMA訪問到就行。或者在IAR調(diào)試環(huán)境下修改內(nèi)存使用的默認(rèn)地址于AXI SRAM區(qū)【參考下面截圖示意操作】。
OK,今天的話題就分享到這里。這里多分享一點(diǎn),愿君少跳一次坑。下次再聊。
審核編輯:湯梓紅
-
adc
+關(guān)注
關(guān)注
99文章
6533瀏覽量
545752 -
IDE
+關(guān)注
關(guān)注
0文章
341瀏覽量
46878 -
程序
+關(guān)注
關(guān)注
117文章
3795瀏覽量
81408 -
dma
+關(guān)注
關(guān)注
3文章
566瀏覽量
100957 -
STM32H743
+關(guān)注
關(guān)注
0文章
24瀏覽量
1764
原文標(biāo)題:程序換個(gè)IDE就不運(yùn)行了?
文章出處:【微信號(hào):stmcu832,微信公眾號(hào):茶話MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
STM8程序脫機(jī)后就不能運(yùn)行的原因?
STM32F401 AHB時(shí)鐘大于30MHz就不運(yùn)行了是怎么回事?
添加移位寄存器后就不能正常運(yùn)行了,該怎么破?
第一次使用軟件仿真,我寫了個(gè)調(diào)試程序,在開發(fā)板上可以運(yùn)行,但在PROTEUS上就不行了,為什么呢
cc2540 程序隔斷時(shí)間后就不運(yùn)行了怎么回事?
cc2530為什么跑了幾天后程序就不正常運(yùn)行了?
請(qǐng)問一下,STM32 boot0和boot1兩個(gè)都懸空的話程序是不是就不會(huì)運(yùn)行了?
STC同樣的程序換個(gè)芯片就不能運(yùn)行
為什么程序運(yùn)行到OSStatInit()時(shí)就不在運(yùn)行了?
為什么單片機(jī)斷電重啟以后程序就不運(yùn)行了?怎么解決?
使用VISUALDSP++5.0,為什么一選擇指令和數(shù)據(jù)cache程序就不能運(yùn)行了?
基于IAR IDE創(chuàng)建工程程序不能運(yùn)行怎么解決
![基于IAR <b class='flag-5'>IDE</b>創(chuàng)建工程<b class='flag-5'>程序</b>不能<b class='flag-5'>運(yùn)行</b>怎么解決](https://file1.elecfans.com/web2/M00/8D/83/wKgZomS7oJWAGSS-AABMbn8iqf8573.jpg)
評(píng)論