_sys_exit()函数的以及半主机模式的说明

_sys_exit ():这是在rt_sys.h中定义的库退出函数。库中的所有出口最终都会调用_sys_exit()。
语法格式:void _sys_exit(int return_code);
用法:此函数不能返回。你可以在更高的级别拦截应用程序退出:
1. 将C库函数exit()实现为应用程序的一部分。如果这样做,就会失去atexit()处理和库关闭。
2. 实现函数__rt_exit(int n)作为应用程序的一部分。如果这样做,你将丢失库的关闭,但当调用 exit()函数或 main()函数返回时时,仍会执行atexit()处理
返回
返回一个警告信息,一个_sys_exit ()函数的执行可能尝试把返回值传递给执行环境
关联参考信息
“Direct semihosting C library function dependencies:
关联信息:
Semihosting for AArch32 and AArch64

//------------------半主机模式(Semihosting )的说明
一、什么是半主机模式?
简单的说,就是我们嵌入式程序中,类似printf的接口是会与我们PC进行通讯,以方便我们借助我们调试板的仿真器在PC上用开发工具进行调试。

二、为什么要禁用半主机模式?
在嵌入式的编程中你是避免不了使用printf、fopen、fclose等函数的但是因为嵌入式的程序中并没有对这些函数的底层实现,使得设备运行时会进入软件中断BAEB处,这时就需要__use_no_semihosting_swi这 个声明,使程序遇到这些文件操作函数时不停在此中断处。

MDK上开启半主机模式-需要SWO线(换言之,需要使用JTAG接线),而我们程序模式开启的半主机模式(此时没有SWO线),所以,我们需要禁止半主机模式。当目标板脱离仿真器(jlink/ulink)单独运行时,不能使用半主机模式。否则进入软件中断BAEB处,无法再执行下去。

三、如何禁止半主机模式?
pragma import(__use_no_semihosting_swi)
这条语句可以关闭半主机模式,只需要在任意一个C文件中加入即可。

还有在使用keil编程的过程中还会遇到…\OBJ\USART.axf: Error: L6915E: Library reports error: __use_no_semihosting was requested, but _ttywrch was referenced
说的大概的意思就是关掉了半主机模式,但是函数__ttywrch被要求了,这时要把函数重写一遍,当然出现其他的函数被要求的时候,可以参考上面的函数进行编写,只要放到任意一个.c源文件之中即可。

如下,再程序加入以下代码即可。这里我们不仅禁止了半主机,还将printf接口重定向为串口输出。

#if 1
#pragma import(__use_no_semihosting)  
//解决HAL库使用时,某些情况可能报错的bug
//因为禁止了半主机模式,需要重写一个半主机模式下的接口,如下
int _ttywrch(int ch)    
{
    ch=ch;
	return ch;
}
 
 
//标准库需要的支持函数                 
struct __FILE 
{ 
	int handle; 
	/* Whatever you require here. If the only file you are using is */ 
	/* standard output using printf() for debugging, no file handling */ 
	/* is required. */ 
}; 
/* FILE is typedef’ d in stdio.h. */ 
 
 
FILE __stdout;     
 
 
//定义_sys_exit()以避免使用半主机模式    
void _sys_exit(int x) 
{ 
	x = x; 
} 
//重定义fputc函数 
 
 
int fputc(int ch, FILE *f)
{      
	while((USART1->ISR&0X40)==0);				//循环发送,直到发送完毕   
	USART1->TDR = (u8) ch;      
	return ch;
}
 
 
#endif 

**关于 microlib
microlib 是缺省 C 库的备选库。 它用于必须在极少量内存环境下运行的深层嵌入式应用程序。 这些应用程序不在操作系统中运行。microlib 不会尝试成为符合标准的 ISO C 库。
microlib 进行了高度优化以使代码变得很小。 它的功能比缺省 C 库少,并且根本不具备某些 ISO C 特性。某些库函数的运行速度也比较慢,例如,memcpy()。

以上 //------------------半主机模式(Semihosting )的说明**部分原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/qq_34810707/article/details/112255306

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值