STM32调试记录,由printf引发的故障BEAB BKPT 0xAB

进入debug状态,卡在BEAB BKPT 0xAB!用到了标准库函数printf,标准库函数的默认输出设备是显示器;

要实现在串口等自定义的输出,必须重定义标准库函数里调用的与输出设备相关的函数;

例如 :printf 输出到串口,需要将 fputc 里面的输出指向串口;添加一个 int fputc(int ch, FILE *f) 函数,用串口发送字符;

如果使用串口输入,也可添加int fgetc(int ch, FILE *f),从串口获取一个字符;

使用上面方法还需要:

1.确保没有从 C 库链接使用半主机的函数, 必须导入符号 __use_no_semihosting 。

可在工程的任何 C 或汇编语言源文件中执行如下操作:
在 C 模块中,使用 #pragma 指令:
#pragma import(__use_no_semihosting)
在汇编语言模块中,使用 IMPORT 指令:
IMPORT __use_no_semihosting
如果仍然链接了使用半主机的函数,则链接器会报告错误。

2.亦或使用编译器自带微库,选择“Use MicroLIB“,“Microlib”已经将“Semihosting”部分移除,代码也更精简。

使用printf 还有堆栈限制,一定确保printf 所使用的堆栈8BYTE对齐,尤其是使用操作系统可减少莫名其妙错误。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值