Stm32 debug停留在"BKPT 0xAB"或者"SWI 0xAB"的解决办法。
来源:互联网 发布:淘宝查号 客户达 编辑:程序博客网 时间:2024/05/09 05:20
Stm32 debug停留在"BKPT 0xAB"或者"SWI 0xAB"的解决办法。
一、、背景:
曾经在工作中接触过STM32一段时间,但没有深入的去学习,只是用前辈搭建好的模型来实现一些功能罢了,俗话说的好,大树底下好乘凉,开发确实轻松了,可是不深究点,又觉着心里不踏实,然而也一直没花时间去深究。刚好,最近需要重新使用STM32,完全自己开发,没想到今天一上来就让我碰上个不小的问题,废话不多说,进入正题。
二、正文:
在使用串口的时候,代码可以正常编译,没有报任何错误,烧录进MCU内,就是看不到程序正常运行的现象,而把串口部分注释掉就没问题。进入调试模式,发现代码停在 "BKPT 0xAB" 这里,并不是死循环,按下全速运行键“F5”,代码会立马在该段被终止,不会继续往下跑,这里说明了main函数都没有进入。Google到了ARM的技术支持有提到过这个问题, “ARM: Application Builds Without Error, But Does Not Run”,这个链接描述的现象即是我现在碰到的现象。此处指出,调试时,出现代码停在 “BKPT 0XAB” 的现象,说明Semihosting 被使能了。
解决办法有三个:
1、添加一个“retarget.c”的文件,文件内容如下:
#include "stdio.h"#pragma import(__use_no_semihosting_swi)#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;
2、使用keil 的软件包补丁(觉得有点繁琐没有使用),贴个图做个参考
3、打开Microlib:
点击“keil”的“Target option”里面的“Target”,选择“Use MicroLIB”,如下图:
经过测试,按“1”、“3”两种办法,均可以使程序正常运行,“2”办法有点繁琐,没有去尝试。
按照“1”方法为什么就能使程序正常运行呢?释义如下:
现在问题来了,这个“Semihosting”到底是什么?官方释义如下:
而按照方法“3”的原因在于:
“Microlib”已经将“Semihosting”部分移除,代码也更精简,所以,不会出现卡在某处的情况。
个人是推荐用方法“1”或“2”,毕竟微库“Microlib”不具备ISO C的某些特性,某些库函数运行的也比较慢,具体不同之处参照参考链接。当然它的好处在于,其代码经过高度优化而变得很小,可以使用malloc,其内置了一个堆管理模块。具体不同会在第三部分参考链接中贴出。
三、参考链接
“ARM: Application Builds Without Error, But Does Not Run”
http://www.keil.com/support/docs/3614
“What is semihosting?”
http://www.keil.com/support/man/docs/ARMCC/armcc_pge1358787046598.html
“Differences between microlib and the default C library”
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0475k/chr1358938938431.html
记录地点:深圳WZ
记录时间:2016年8月1日
- Stm32 debug停留在"BKPT 0xAB"或者"SWI 0xAB"的解决办法。
- STM32程序死在BEAB BKPT 0xAB解决办法
- 死循环在BEAB BKPT 0xAB汇编的解决办法
- 死循环在BEAB BKPT 0xAB汇编的解决办法
- 死循环在BEAB BKPT 0xAB汇编的解决办法
- 【MDK调试经验】 程序死在BEAB BKPT 0xAB汇编的解决办法
- 【不算奇葩的问题】MDK调试stm32遇到BEAB BKPT 0xAB,重定向printf的BUG
- STM32仿真停在0x08001460 BEAB BKPT 0xAB这个_sys_open代码下
- J-Link仿真Cortex-M架构eCos停留在swi 0的解决办法
- UnicodeDecodeError: 'gbk' codec can't decode byte 0xab in position 11126: illegal multibyte sequence
- UnicodeDecodeError: 'gbk' codec can't decode byte 0xab in position 11126: illegal multibyte sequence
- 长时间停留在calculating requirements and dependencies 的解决办法
- ios breakpoint自动停留在main的解决办法
- opencv3.0&vs2013 debug下可以运行 release下不能运行或者release 下可以运行debug下不能运行的解决办法
- 0x08002628 BEAB BKPT 0xAB0, 死循环
- 关于项目突然启动缓慢或者停留在Initializing Spring FrameworkServlet xx的原因
- 关于在进程中对对话框或者视图操作,出现读写错误0x000000的解决办法
- Clion点击debug,没有反应,在断点处没有停留
- NSDate 时间排序
- python 当前时间多加一天、一小时、一分钟
- 在数组下的选择、冒泡排序
- C++虚函数和多态
- Ubuntu下安装maven
- Stm32 debug停留在"BKPT 0xAB"或者"SWI 0xAB"的解决办法。
- Tomcat学习总结(3)——Tomcat优化详细教程
- win10 安装 .Net Framework 3.5 采用 netframework3.5.cab文件安装
- struts中使用servlet
- STL中的swap函数
- intValue()的用法,以及与parseInt()和valueOf 的区别
- Python中常见的异常(类)
- 顺序表查找和折半查找
- spring mvc学习的一点总结