今天编译一个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就报错了。