解決STM32除錯,無法進入main函式的問題

2021-08-07 20:38:37 字數 2215 閱讀 1972

昨天除錯stm32程式,以前使用的是mdk3.40的版本,把版本公升了下級,公升到了mdk4.10,裝好後,一執行,哈哈,新版本給人的感覺就是不一樣啊,很爽,較之前有很多改進,把自己以前的程式開啟,編譯執行發現程式除錯時無法進入main函式,弄了很久,很是鬱悶啊,最後還是在ourdev的罈子裡,找到了同樣問題的解決方法,多謝ourdev,以下是罈子裡面的帖子,我把他貼出來了.

sdc666 :

請問高手,我在除錯我的stm32f101c8t6時,遇到乙個問題,因為我要除錯串列埠,我在main.c中新增了#include ,編譯可以通過,但是當我用jlink硬體除錯時,一開始就停在了 " 0x08001460 beab      bkpt     0xab";並且無法向下執行.  請問高手,這個問題的原因是什麼?怎麼解決? 謝謝!     

_sys_open:

0x08001450 b50e      push     

0x08001452 e9cd0100  strd     r0,r1,[sp,#0]

0x08001456 f000faf9  bl.w     strlen (0x08001a4c)

0x0800145a 9002      str      r0,[sp,#0x08]

0x0800145c 4669      mov      r1,sp

0x0800145e 2001      movs     r0,#0x01

0x08001460 beab      bkpt     0xab

0x08001462 bd0e      pop      

pldjn :

應該是專案設定的問題,檢查一下你的設定.

sdc666:

pldjn 你好,能詳細指點以下麼?應該怎樣設定?  這個程式是我該的,本來是沒有#include ,我新增串列埠後因為需要標準庫函式,所以才加上的. 是不是還要設定編譯環境?  謝謝.

pldjn :

dragonwww:

我也遇到同樣問題,我是呼叫printf時出現的這個錯誤,我已經把putchar重定位了,不知道為何還是出錯,求解,thx!

yugen:

那是因為你使用了printf之類的庫函式,需要編寫_sys_exit()之類底層函式。照你的提示看,也許是_sys_open()沒寫。_sys_***之類的的只要寫個空函式就行了。

dragonwww:

to yugen:

能否說的再仔細些,如果自己編寫個空函式應該放在**?函式定義格式是什麼樣的呢?

納悶的是以前也用過printf,沒出現這個提示啊。

pzlpdy:

5樓的應該不是這樣吧?

應該是你沒有選中微庫造成的。這個問題昨天我遇到過。在工程的設定選項裡把微庫勾上就ok了

dragonwww:

to pzlpdy:

蒼天啊,果然如你所說,把微庫勾上就ok了,奇怪了為什麼以前用的的時候沒報錯呢?以前也沒選微庫啊!

yugen:

因printf()之類的函式,使用了半主機模式。使用微庫的話,不會使用半主機模式,所以就沒有問題。

新增下面**,就可以使用標準庫了:

#pragma import(__use_no_semihosting)

_sys_exit(int x)

struct __file ;

/* file is typedef』 d in stdio.h. */

file __stdout;

dragonwww:

yugen是高手啊,再請教一下:

1.何為「半主機模式」?與 非半主機模式有何區別?

2.你的這段**需要放在那個檔案裡?自己的main函式所在的檔案嗎?

3.看到**實現了_sys_exit,那我提示錯誤的_sys_open()不用實現嗎?

請指教,多謝!

yugen:

你說的問題都可以在"realview® 編譯工具庫和浮點支援指南"書中找到,網上有下,我就不複製了。書有中文的。realview編譯器有好幾本書,都有中文。

stm32硬體除錯

stm32的基本系統主要涉及下面幾個部分 一 電源 1 無論是否使用模擬部分和ad部分,mcu外圍出去vcc和gnd,vdda vssa vref 如果 封裝有該引腳 都必需要連線,不可懸空 2 對於每組對應的vdd和gnd都應至少放置乙個104的陶瓷電容用於濾波,並接該 電容應放置盡量靠近mcu ...

STM32串列埠除錯進入死迴圈

最近在除錯stm32串列埠,發現串列埠傳送資料總是進入如下死迴圈 while usart getflagstatus uart5,usart flag txe reset 經檢查發現串列埠時鐘沒有開,開啟串列埠時鐘後串列埠傳送資料正常 rcc apb1periphclockcmd rcc apb1p...

STM32除錯問題

1 stm32用iar除錯出現error pe020 identifier file is undefined 解決方法 需要在 iar的options general options library configuration裡設定一下函式庫,不然printf函式不對,將library confi...