_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