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"的解决办法。的更多相关文章
- Eclipse Java,debug模式无法调试,调试按钮不可用时解决办法
经常出现debug模式进入后,debug的几个按钮置灰,F5,6,8,没有任何反应时,这样操作: 退出 Eclipse.打开 Eclipse 目录下的 configuration 下的 org.ecl ...
- Django项目关闭debug模式后,静态文件无法加载的解决办法
开启内置服务器,由于项目中local_settings.py文件中的DEBUG=True,进行开发和调试一直没什么问题. 但是现在需要编写404,500等出错页面,在debug模式下出了错都会出现报错 ...
- 关于Eclipse Debug断点调试出现 Search not found 页面的解决办法
1. 在代码中鼠标右键 Debug AS ---> Debug Configurations... ----> 找到Source选项 ---> 点击add ---> 选择 j ...
- django在关闭debug后,admin界面 及静态文件无法加载的解决办法
当debug为true的时候,ALLOWED_HOSTS是跳过不管用的.所以这里需要将debug关掉,令debug=false,ALLOWED_HOSTS=[ '*' ]表示所有的主机都可以访问 开启 ...
- [转]VS2005 Debug时提示"没有找到MSVCR80D.dll"的解决办法
总结各种解决方法如下: 原因:(不知道在说啥)由于VS.net 2005 采用了一种新的DLL方案,搞成一个exe还要配有一个manifest文件(一般在嵌入文件里了,所以看不到,不过也可以不嵌入,这 ...
- 在debug模式下运行不报错,换到release模式下报找不到某某库或文件的错。。解决办法
我遇到的问题是:把edit secheme调到debug模式运行没有问题,然后调到release模式的时候报目录下没有libTuyoo.a 解决办法 把断开真机设备,用IOS device下relea ...
- Eclipse中debug调试java代码一直报Source not found的解决办法
今天使用eclipse的debug调试代码,一直没法正常调试,一按F6就提示Source not found 根据提示发现可能是另一个项目影响了,所以把另一个项目Close Project,这次直接t ...
- STM32的PA15、PB3、 PB4管脚作普通管脚的解决办法
最近做了一个板子,使用的是SWD方式进行下载程序,仅仅使用到SWDIO(PA13) 和SWCLK(PA14)两个管脚.我将PA15(JTDI)和PB3(JTDO)管脚用于他用(用于点LED使用), ...
- 分享一个android debug模式,出现 waiting for debugger把界面卡住,取巧的解决办法
使用android studio开发程序时,有时会出现 waiting for debugger 卡住界面,软件无法正常debug运行的情况,很多网友分享了一些解决办法,比如: 1 打开cmd进入命令 ...
随机推荐
- C#的参数修饰符out,params,ref
using System; namespace ParamsProgram { class TestParams { public static void Main(string[] args)//s ...
- [IOS多线程]的使用:防止进行HTTP数据请求时,UI卡死。
多线程的实现:NSThread 1.子线程的创建:两种方法 第一种: [NSThread detachNewThreadSelector:@selector(downloadImage:) toTar ...
- python deep copy and shallow copy
Python中对于对象的赋值都是引用,而不是拷贝对象(Assignment statements in Python do not copy objects, they create bindings ...
- RNN 入门教程 Part 2 – 使用 numpy 和 theano 分别实现RNN模型
转载 - Recurrent Neural Networks Tutorial, Part 2 – Implementing a RNN with Python, Numpy and Theano 本 ...
- python chinese code
http://blog.csdn.net/inte_sleeper/article/details/6676351 编码的历史 1. ASCII ASCII(American Standard ...
- edmx代码分析
http://www.cnblogs.com/FoundationSoft/archive/2011/01/08/1930479.html 本文分析Entity Framework从数据库自动生成的模 ...
- Spring事务传播简介
一.事务传播属性(propagation) 1.REQUIRED,默认属性 此级别下,会为每一个调用的方法创建一个逻辑事务域,如果前面的方法已经创建了事务,那么后面的方法支持当前事务,如果当前没有事务 ...
- Android学习笔记——LinearLayout
该工程的功能是实现LinearLayout 以下的代码是MainActivity.java中的代码 package com.example.linearlayout; import android.a ...
- Flash Decompiler
http://www.sothink.com/product/flash-decompiler-for-mac/ http://blog.sina.com.cn/s/blog_697935ad0100 ...
- ecshop 团购点击价格变动
前提:价格阶梯只能设置一级 需要用到: jquery,transport.js(transport_jquery.js),Ajax.call html页面 js代码,还需要插入jquery,trans ...