进入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对齐,尤其是使用操作系统可减少莫名其妙错误。