您现在的位置: 主页 > MCU > 单片机应用 > keil编译出错关于__use_no_semihosting_swi的使用 -
本文所属标签:
为本文创立个标签吧:

keil编译出错关于__use_no_semihosting_swi的使用 -

来源: 网络用户发布,如有版权联系网管删除 2018-09-08 

[导读]
__use_no_semihosting_swi,即不使用半主机模式,防止程序进入软件中断。1.在嵌入式程序编译时如果出现printf、fopen、fclose等文件操作,因程序中并没有对这些函数的底层实现,使得设备运行时会进入软

 

本文引用地址: http://www.21ic.com/app/mcu/201804/765831.htm

__use_no_semihosting_swi,即不使用半主机模式,防止程序进入软件中断。

 

1.在嵌入式程序编译时如果出现printf、fopen、fclose等文件操作,因程序中并没有对这些函数的底层实现,使得设备运行时会进入软件中断BAEB处,这时就需要__use_no_semihosting_swi这 个声明,使程序遇到这些文件操作函数时不停在此中断处,具体操作如下,将下列程序加入你的工程中:

 

//不使用半主机模式
#if 1 //如果没有这段,则需要在target选项中选择使用USE microLIB
#pragma import(__use_no_semihosting) //注释本行, 方法1
struct __FILE {
int handle;
};
FILE __stdout;

_sys_exit(int x)
{
x = x;
}

//__use_no_semihosting was requested, but _ttywrch was referenced, 增加如下函数, 方法2
_ttywrch(int ch)
{
ch = ch;
}
#endif

 

 

 

若出现如下编译错误:Error: L6915E: Library reports error: __use_no_semihosting_swi was requested, but _ttywrch was referenced,此时你只需重写_ttywrch 函数即可

void _ttywrch(int ch){}。

2.__use_no_semihosting_swi也常用于对printf的重定向,通常是重定向到串口输出,这时只需在1中的重写函数中加入:

int fputc(int ch, FILE *f)
{
uart_send_char(ch);//你的串口发送字符函数
return ch;
}

这样即可。

 

 



              查看评论 回复



嵌入式交流网主页 > MCU > 单片机应用 > keil编译出错关于__use_no_semihosting_swi的使用 -
 

"keil编译出错关于__use_no_semihosting_swi的使用 -"的相关文章

网站地图

围观()