MDK编译常见错误(1)- Library reports error: __use_no_semihosting was request,but _ttywrch was referenced

使用环境:

MDK版本号: MDK-ARM professional Version:5.30.0.0

编译错误:

linking…
…\OBJ\TEST.axf: Error: L6915E: Library reports error: __use_no_semihosting was requested, but _ttywrch was referenced
Not enough information to list load addresses in the image map.

解决流程:

__use_no_semihosting was requested, but _ttywrch was referenced:
__use_no_semihosting已请求,但已引用_ttywrch;没有足够的信息来列出图像映射中的加载地址。
__use_no_semihosting明显是一个宏定义,在工程中搜索,出现在usart.c中的printf()函数重定向设置的相关代码中,查阅网上资料,__use_no_semihosting是不使用半主机模式的宏定义,__use_no_semihosting was requested, but _ttywrch was referenced读下来的感觉是_ttywrch跟不使用半主机模式是相互矛盾的。再次仔细阅读半主机的来源和用法,发现得去keil官网上寻找答案。。。
找了好久,方向逐渐明确,最终找到_ttywrch()的来源和用法,在keil官网上主页的库和浮点数用法支持指南的The C and C++ Library Functions reference这一章节里。解释如下:


可以看出,该函数本身就是半主机模式下使用的函数,禁止半主机模式下,需要对 _ttywrch 函数重写覆盖。
即在printf重定向(不使用微库重定向)代码中加上以下几行:

 _ttywrch(int ch)
    {
        ch = ch;
    }

涉及知识点

  1. 半主机
  2. printf重定向
  3. ARM支持库

参考链接:

keil关于use MicroLIB 和半主机模式的总结
STM32半主机模式
semihost/ITM机制浅析以及使用JLINK通过ITM调试stm32单片机
半主机(百度百科)
keil编译出错关于__use_no_semihosting_swi的使用
ARM库使用指南

求索之路无止境,若有不当之处请指出,感激不尽.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值