昨天調試STM32程序,以前使用的是MDK3.40的版本,把版本升了下級,升到了MDK4.10,裝好后,一運行,哈哈,新版本給人的感覺就是不一樣啊,很爽,較之前有很多改進,把自己以前的程序打開,編譯運行發現程序調試時無法進入Main函數,弄了很久,很是郁悶啊,最后還是在ourdev的壇子里,找到了同樣問題的解決方法,多謝ourdev,以下是壇子里面的帖子,我把他貼出來了.
sdc666 :
請問高手,我在調試我的STM32F101c8t6時,遇到一個問題,因為我要調試串口,我在main.c中添加了#include,編譯可以通過,但是當我用jlink硬件調試時,一開始就停在了 " 0x08001460 BEAB BKPT 0xAB";并且無法向下運行. 請問高手,這個問題的原因是什么?怎么解決? 謝謝!
_sys_open:
0x08001450 B50E PUSH {r1-r3,lr}
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 {r1-r3,pc}
pldjn :
應該是項目設置的問題,檢查一下你的設置.
sdc666:
pldjn 你好,能詳細指點以下么?應該怎樣設置? 這個程序是我該的,本來是沒有#include,我添加串口后因為需要標準庫函數,所以才加上的. 是不是還要設置編譯環境? 謝謝.
pldjn :
你用J-Flash打開你的HEX文件看看編譯的是否是對的.不用自動下載使用J-flash燒進去調一下試試.
dragonwww:
我也遇到同樣問題,我是調用printf時出現的這個錯誤,我已經把putchar重定位了,不知道為何還是出錯,求解,THX!
yugen:
那是因為你使用了printf之類的庫函數,需要編寫_sys_exit()之類底層函數。照你的提示看,也許是_sys_open()沒寫。_sys_xxx之類的的只要寫個空函數就行了。
dragonwww: to yugen:
能否說的再仔細些,如果自己編寫個空函數應該放在哪里?函數定義格式是什么樣的呢?
納悶的是以前也用過printf,沒出現這個提示啊。
PZLPDY:
5樓的應該不是這樣吧?
應該是你沒有選中微庫造成的。這個問題昨天我遇到過。在工程的設置選項里把微庫勾上就OK了
dragonwww:to PZLPDY:
蒼天啊,果然如你所說,把微庫勾上就OK了,奇怪了為什么以前用的的時候沒報錯呢?以前也沒選微庫啊!
yugen:
因printf()之類的函數,使用了半主機模式。使用微庫的話,不會使用半主機模式,所以就沒有問題。
添加下面代碼,就可以使用標準庫了:
#pragma import(__use_no_semihosting)
_sys_exit(int x)
{
x = x;
}
struct __FILE
{
int handle;
/* Whatever you require here. If the only file you are using is */
/* standard output using printf() for debugging, no file handling */
/* is required. */
};
/* FILE is typedef’ d in stdio.h. */
FILE __stdout;
-
STM32
+關注
關注
2270文章
10923瀏覽量
357035 -
main
+關注
關注
0文章
38瀏覽量
6181
原文標題:怎么解決STM32調試無法進入main函數的問題?
文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論