昨日调试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}
0x08001450
0x08001452
0x08001456
0x0800145A
0x0800145C
0x0800145E
0x08001460
0x08001462
pldjn :
应该是项目设置的问题,检查一下你的设置.
sdc666:
pldjn 你好,能具体点拨以下么?应该怎样设置? 这个程序是我该的,本来是没有#include ,我增加串口后由于需求规范库函数,所以才加上的. 是不是还要设置编译环境? 谢谢.
pldjn :
你用J-Flash翻开你的HEX文件看看编译的是否是对的.不必主动下载运用J-flash烧进去调一下试试.
你用J-Flash翻开你的HEX文件看看编译的是否是对的.不必主动下载运用J-flash烧进去调一下试试.
dragonwww:
我也遇到相同问题,我是调用printf时呈现的这个过错,我现已把putchar重定位了,不知道为何仍是犯错,求解,THX!
yugen:
那是由于你运用了printf之类的库函数,需求编写_sys_exit()之类底层函数。照你的提示看,也许是_sys_open()没写。_sys_xxx之类的的只需写个空函数就行了。
dragonwww:
to yugen:
能否说的再细心些,假如自己编写个空函数应该放在哪里?函数界说格局是什么样的呢?
疑惑的是曾经也用过printf,没呈现这个提示啊。
PZLPDY:
5楼的应该不是这样吧?
应该是你没有选中微库形成的。这个问题昨日我遇到过。在工程的设置选项里把微库勾上就OK了
应该是你没有选中微库形成的。这个问题昨日我遇到过。在工程的设置选项里把微库勾上就OK了
dragonwww:
to PZLPDY:
苍天啊,公然如你所说,把微库勾上就OK了,奇怪了为什么曾经用的的时分没报错呢?曾经也没选微库啊!
yugen:
因printf()之类的函数,运用了半主机形式。运用微库的话,不会运用半主机形式,所以就没有问题。
增加下面代码,就能够运用规范库了:
#pragma import(__use_no_semihosting)
_sys_exit(int x)
{
x = x;
}
struct __FILE
{
int handle;
};
FILE __stdout;
增加下面代码,就能够运用规范库了:
#pragma
_sys_exit(int
{
x
}
struct
{
int
};
FILE
dragonwww:
yugen是高手啊,再讨教一下:
1.何为“半主机形式”?与 非半主机形式有何差异?
2.你的这段代码需求放在那个文件里?自己的main函数地点的文件吗?
3.看到代码完成了_sys_exit,那我提示过错的_sys_open()不必完成吗?
请指导,多谢!
1.何为“半主机形式”?与
2.你的这段代码需求放在那个文件里?自己的main函数地点的文件吗?
3.看到代码完成了_sys_exit,那我提示过错的_sys_open()不必完成吗?
请指导,多谢!
yugen:
你说的问题都能够在”RealView? 编译东西库和浮点支撑攻略”书中找到,网上有下,我就不仿制了。书有中文的。realview编译器有好几本书,都有中文。