Keil 使用半主机模式

本文介绍了在使用TouchGFX时遇到的问题,即printf函数导致单片机无法正常启动。通过添加特定代码如__use_no_semihosting和重定向串口函数,解决了半主机模式冲突,确保了程序的正常运行。

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

在使用TouchGFX 的时候发现无法使用微库 而时候printf函数则会导致单片机无法正常启动 关闭半主机模式后则能正常运行 添加一下代码即可

__ASM (".global __use_no_semihosting");	//AC6编译器
//定义_sys_exit()以避免使用半主机模式  
void _sys_exit(int x) 
{ 
  x = x; 
}

void _ttywrch(int ch)
{
  ch = ch;
}
struct FILE 
{
  int handle; 
};
FILE __stdout;

串口重定向

#define Printf_UART huart1 /* 定义使用的串口 */
/*****************************************************
*function: 写字符文件函数
*param1: 输出的字符
*param2: 文件指针
*return: 输出字符的 ASCII 码
******************************************************/
int fputc(int ch, FILE *f)
{
    HAL_UART_Transmit(&Printf_UART, (uint8_t*)&ch,1,10);
    return ch;
} 
/*****************************************************
*function: 读字符文件函数
*param1: 文件指针
*return: 读取字符的 ASCII 码
******************************************************/
int fgetc(FILE *f)
{ 
    uint8_t ch = 0; 
    HAL_UART_Receive(&Printf_UART, (uint8_t*)&ch, 1, 10); 
    return (int)ch;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cat_milk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值