国产成人av人人爽人人澡-亚洲国产日韩欧美一区-好吊日视频这里只有精品-日本高清精品视频在线

你好!歡迎來(lái)到深圳市穎特新科技有限公司!
語(yǔ)言
當(dāng)前位置:首頁(yè) >> 技術(shù)中心 >> 單片機(jī)入門 >> 解決STM32調(diào)試,無(wú)法進(jìn)入main函數(shù)的問題

解決STM32調(diào)試,無(wú)法進(jìn)入main函數(shù)的問題

關(guān)鍵字:STM32 編程 作者:admin 來(lái)源:不詳 發(fā)布時(shí)間:2018-05-18  瀏覽:8

 昨天調(diào)試STM32程序,以前使用的是MDK3.40的版本,把版本升了下級(jí),升到了MDK4.10,裝好后,一運(yùn)行,哈哈,新版本給人的感覺就是不一樣啊,很爽,較之前有很多改進(jìn),把自己以前的程序打開,編譯運(yùn)行發(fā)現(xiàn)程序調(diào)試時(shí)無(wú)法進(jìn)入Main函數(shù),弄了很久,很是郁悶啊,最后還是在ourdev的壇子里,找到了同樣問題的解決方法,多謝ourdev,以下是壇子里面的帖子,我把他貼出來(lái)了.

sdc666 :

請(qǐng)問高手,我在調(diào)試我的STM32F101c8t6時(shí),遇到一個(gè)問題,因?yàn)槲乙{(diào)試串口,我在main.c中添加了#include ,編譯可以通過,但是當(dāng)我用jlink硬件調(diào)試時(shí),一開始就停在了 " 0x08001460 BEAB BKPT 0xAB";并且無(wú)法向下運(yùn)行. 請(qǐng)問高手,這個(gè)問題的原因是什么?怎么解決? 謝謝!

_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 :

應(yīng)該是項(xiàng)目設(shè)置的問題,檢查一下你的設(shè)置.

sdc666:

pldjn 你好,能詳細(xì)指點(diǎn)以下么?應(yīng)該怎樣設(shè)置? 這個(gè)程序是我該的,本來(lái)是沒有#include ,我添加串口后因?yàn)樾枰獦?biāo)準(zhǔn)庫(kù)函數(shù),所以才加上的. 是不是還要設(shè)置編譯環(huán)境? 謝謝.

pldjn :

你用J-Flash打開你的HEX文件看看編譯的是否是對(duì)的.不用自動(dòng)下載使用J-flash燒進(jìn)去調(diào)一下試試.

dragonwww:

我也遇到同樣問題,我是調(diào)用printf時(shí)出現(xiàn)的這個(gè)錯(cuò)誤,我已經(jīng)把putchar重定位了,不知道為何還是出錯(cuò),求解,THX!

yugen:

那是因?yàn)槟闶褂昧藀rintf之類的庫(kù)函數(shù),需要編寫_sys_exit()之類底層函數(shù)。照你的提示看,也許是_sys_open()沒寫。_sys_xxx之類的的只要寫個(gè)空函數(shù)就行了。

dragonwww:

to yugen:

能否說的再仔細(xì)些,如果自己編寫個(gè)空函數(shù)應(yīng)該放在哪里?函數(shù)定義格式是什么樣的呢?

納悶的是以前也用過printf,沒出現(xiàn)這個(gè)提示啊。

PZLPDY:

5樓的應(yīng)該不是這樣吧?

應(yīng)該是你沒有選中微庫(kù)造成的。這個(gè)問題昨天我遇到過。在工程的設(shè)置選項(xiàng)里把微庫(kù)勾上就OK了

dragonwww:

to PZLPDY:

蒼天啊,果然如你所說,把微庫(kù)勾上就OK了,奇怪了為什么以前用的的時(shí)候沒報(bào)錯(cuò)呢?以前也沒選微庫(kù)啊!

yugen:

因printf()之類的函數(shù),使用了半主機(jī)模式。使用微庫(kù)的話,不會(huì)使用半主機(jī)模式,所以就沒有問題。

添加下面代碼,就可以使用標(biāo)準(zhǔn)庫(kù)了:

#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;

dragonwww:

yugen是高手啊,再請(qǐng)教一下:

1.何為“半主機(jī)模式”?與 非半主機(jī)模式有何區(qū)別?

2.你的這段代碼需要放在那個(gè)文件里?自己的main函數(shù)所在的文件嗎?

3.看到代碼實(shí)現(xiàn)了_sys_exit,那我提示錯(cuò)誤的_sys_open()不用實(shí)現(xiàn)嗎?

請(qǐng)指教,多謝!

yugen:

你說的問題都可以在"RealView® 編譯工具庫(kù)和浮點(diǎn)支持指南"書中找到,網(wǎng)上有下,我就不復(fù)制了。書有中文的。realview編譯器有好幾本書,都有中文。

編輯:admin  最后修改時(shí)間:2018-05-18

聯(lián)系方式

0755-82591179

傳真:0755-82591176

郵箱:vicky@yingtexin.net

地址:深圳市龍華區(qū)民治街道民治大道973萬(wàn)眾潤(rùn)豐創(chuàng)業(yè)園A棟2樓A08

Copyright © 2014-2023 穎特新科技有限公司 All Rights Reserved.  粵ICP備14043402號(hào)-4