关于 “定义_sys_exit()以避免使用半主机模式”的问题

博主编译STM32程序时遇到编译不通过问题,错误信息显示类型缺失。借鉴他人方法,在_sys_exit前加void可解决,原因是数据类型不匹配。还介绍了半主机模式及使用标准库导致程序无法运行的解决办法,同时指出报错可能与keil4和keil5编译器不同有关。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天编译一个STM32程序的时候,遇到了一个问题,编译通不过。
//定义_sys_exit()以避免使用半主机模式
void _sys_exit(int x){
x = x;
}
输出的错误信息是:

…\SYSTEM\usart\usart.c(41): error: #260-D: explicit type is missing (“int” assumed)

借鉴他人的解决方法:

然后在_sys_exit前面加上void。

编译就可以通过了。

原因:没有加上函数的类型,所以编译器会默认为int类型的数据,数据类型不匹配,故会出现上述警告。
//////////////////////////////////////////////////////
PS:
半主机模式:半主机是用于 ARM 目标的一种机制,可将来自应用程序代码的输入/输出请求传送至运行调试器的主机。 例如,使用此机制可以启用 C 库中的函数,如 printf() 和 scanf(),来使用主机的屏幕和键盘,而不是在目标系统上配备屏幕和键盘。
这种机制很有用,因为开发时使用的硬件通常没有最终系统的所有输入和输出设备。 半主机可让主机来提供这些设备。

使用了半主机模式。使用标准库会导致程序无法运行,

以下是解决方法:

方法1.使用微库,因为使用微库的话,不会使用半主机模式. 勾选 micro lib;2:仍然使用标准库添加 ​_sys_exit(int x) 函数​

摘引自:

http://wojiushiwolxw.spaces.eepw.com.cn/articles/article/item/92847​
///////////////////////////////////////////
该报错:keil5的编译中一直提示错误, 不过keil4中没有提示。估计和这两个版本的编译器不同有关,原来写这个函数的人是在KEIL 4 下开发的,移植到KEIL 5就报错了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值