OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 11559|回复: 2

MDK的MicroLIB与仿真 请教原子和各位前辈

[复制链接]

12

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2011-10-11
在线时间
0 小时
发表于 2013-4-1 14:14:31 | 显示全部楼层 |阅读模式

 以前一直用原子提供的MDK3.80A,烧写调试也一直使用串口ISP的方式用得挺好。最近另外一个组的同事移交过来一个项目,他们的板子是用JTAG口进行烧写的,MCU是STM32F100C8,仿真工具是STLINKv2的。网上查了下MDK只有在4.2之后的版本才支持STLINKv2,好吧,直接官网下了个MDK4.7A版本的,破解好,开始调试。直接打开原来MDK3.80A下的一个调试程序,设置好仿真的一些参数开始仿真。问题出来了,开始从复位状态开始运行,当运行到
跳转MAIN函数的语句时就会无限进入一个不可屏蔽中断,如下:
Reset_Handler   PROC
                EXPORT  Reset_Handler             [WEAK]
                IMPORT  __main
                LDR     R0, =__main
                BX      R0                        //进入HARD_FAULT中断
                ENDP

 //HARD_FAULT中断
HardFault_Handler\
                PROC
                EXPORT  HardFault_Handler         [WEAK]
                B       .
                ENDP
网上查了下进入该中断的原因是堆栈溢出之类的。由于原来程序是在STM32F103C8上写的,现在换到了STM32F100C8上,猜想是不是启动文件或者头文件出了问题。于是在Debug里选上Run to main()跳过复位部分,发现程序会在不确定的随机位置进入HardFault中断。纠结了很久之后想在MDK4.7下重新建一个工程试试看。发现在新版本下STM32的启动文件改了,各种头文件例如.MAP .TYPE .CONF等都整合成了一个新的头文件stm32f10x.h。需要在C/C++配置 define里加上STM32F10X_HD USE_STDPERIPH_DRIVER等等等等,各种纠结之后终于可以调试了,然后同样的问题再次出现。纠结N久无果之后问同事拿来了他们之前在这套环境下写得程序,他们从未发生过这样的现象。开始比较两边程序的区别后发现在他们的程序里用到了Printf()这个函数,之前记得要用这个函数需要调用微库。于是在Target配置里勾上Use MicroLIB,编译,仿真,这次好了,程序正常进入MAIN函数也再也没有进入过那个坑爹中断。
网上查了下microlib:
microlib 是缺省 C 库的备选库。 它用于必须在极少量内存环境下运行的深层嵌入式应用程序。 这些应用程序不在操作系统中运行。microlib 不会尝试成为符合标准的 ISO C 库。
microlib 进行了高度优化以使代码变得很小。 它的功能比缺省 C 库少,并且根本不具备某些 ISO C 特性。某些库函数的运行速度也比较慢,例如,memcpy()。
完全搞不明白不用微库怎么会导致这样奇怪的错误,希望各位前辈能够给予指点。之前对于这块完全没有理解,正好趁这个机会搞搞明白,谢谢了!!

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-4-1 16:32:25 | 显示全部楼层
你的printf,不适用微库的时候,有没有重定向实现?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

12

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2011-10-11
在线时间
0 小时
 楼主| 发表于 2013-4-1 16:37:00 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
我自己的程序里面不用printf的。我做测试的时候甚至main函数都是空的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-22 06:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表