嵌入式开发中用于调试的技术Semihosting

Semihosting是嵌入式开发中用于调试的技术,允许程序通过调试器与主机通信,实现输入输出操作。在Keil环境中使用printf等函数时,若程序无法运行,通常与Semihosting配置有关。 ‌

问题原因

当在Keil中启用标准C库(未使用MicroLIB)并调用printf时,编译器会默认启用Semihosting功能。该功能通过SVC/BKPT指令与调试器交互,若初始化失败(如调试环境未连接或配置错误),程序会停止执行。 ‌

解决方案

使用MicroLIB库‌

在Keil工程设置中勾选"Use MicroLIB"选项,可避免启用Semihosting。 ‌

若不使用MicroLIB,需通过以下方式禁用Semihosting:

添加编译器指令#pragma import(__use_no_semihosting)到代码中 ‌‌

定义必要函数(如:ml-search-more[_ttywrch]{text="嵌入式 _ttywrch函数"})以兼容Semihosting调用 ‌‌

重定向输出‌

若需保留printf功能,可重定向到串口:

定义fputc函数:int fputc(int ch, FILE *f) { uart_send_char(ch); return ch; } ‌‌

配置串口驱动(如FlexIO或FLEXCOMM) ‌‌

注意事项

Semihosting仅在调试阶段启用,发布产品时需完全关闭以避免性能损耗。 ‌‌

使用:ml-search-more[CMSIS]{text="CMSIS"}或:ml-search-more[CMSIS-Compiler pack]{text="CMSIS-Compiler pack"}可简化配置,避免手动修改代码。 ‌‌

相关推荐
冉卓电子1 小时前
GD32C103RBT6 misc 内核驱动库极简解析
单片机·嵌入式硬件
yongui478341 小时前
MAX6675 K型热电偶温度采集程序(Keil环境)
单片机·嵌入式硬件
豆包公子1 小时前
AUTOSAR CP XCP 移植到裸机 MCU-实践篇
单片机·嵌入式硬件
三佛科技-134163842121 小时前
智能暖脚按摩器方案开发,智能暖脚按摩器MCU单片机主控芯片选择 (FT60F系列8位MCU)
单片机·嵌入式硬件·物联网·智能家居·pcb工艺
与仪共舞2 小时前
罗德与施瓦茨NRP 40T功率传感器
科技·单片机·目标检测
是温不嗜温2 小时前
芯茂微100V SR同步整流方案技术解析:效率+5%、温降-20°C,管脚兼容直接替代传统肖特基
嵌入式硬件·电源管理·电源芯片·ac-dc
嵌入式-老费2 小时前
esp32开发与应用(按键输入)
嵌入式硬件
追兮兮2 小时前
告别手动搭建Keil工程!MCUQuickStart一键生成STM32/GD32工程模板,打开即编译
stm32·单片机·嵌入式硬件·gd32·keil5
不会武功的火柴3 小时前
SystemVerilog语法(9)-验证基础与简单Testbench
嵌入式硬件·fpga开发·fpga·systemverilog·硬件描述语言·rtl·uvm验证
XINVRY-FPGA3 小时前
XC7Z020-2CLG484I Xilinx Zynq-7000 SoC FPGA
嵌入式硬件·fpga开发·云计算·硬件工程·fpga