基于Eclipse下使用arm gcc开发GD32调用printf

文章介绍了如何在Eclipse+GCC环境下实现串口重映射,通过重写_write()函数以替代Keil的printf功能。同时,文章提到了使用GCC的libgcc.a会导致较大flash空间消耗,并给出了优化前后对比。

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

系列目录


第一章 xxx

目录

系列目录

文章目录


前言

开发环境:Eclipse代替Keil,IAR

开发平台:GD32

开发编译器:arm-none-eabi-  gcc

基于此环境,调用类似于Keil的printf函数,进行串口打印信息

一、Keil实现串口重映射

int fputc(int ch, FILE *f)
{
  HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);
  return ch;
}

此方法仅针对于Keil,且调用了keil自己精简优化过的库文件 ,不适用gcc环境

二、Eclipse+GCC实现串口重映射

标准C库的底层调用的是_write() 函数实现输出,所以要重写write函数

int _write (int fd, char *pBuffer, int size)  
{  
    for (int i = 0; i < size; i++)  
    {  
		usart_data_transmit(USART_PORT, (uint8_t)pBuffer[i]);
		while(RESET == usart_flag_get(USART_PORT, USART_FLAG_TBE));		
    }  
    return size;  
}

仅添加这个重映射并不能直接就使用printf。会有以下报错

undefined reference to  `_sbrk'   `_close'  `_fstat'  `_read' `_write

这个时候需要配置一下eclipse。

右键项目,选择 Properties->GNU Arm Cross Linker->Miscellaneous

勾选红色框图所示

此时即可调用printf及sprintf等。 

注意:使用GCC的libgcc.a进行使用printf,会消耗较大的flash空间。小容量的单片机慎用

对比:同样开启优化

使用GCC printf,程序所用flash

不适用GCC printf,程序所用flash

 仅调用libgcc 的printf,就多出了将近30多KB的Flash。

总结

没有总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Terry.Z_1009

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

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

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

打赏作者

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

抵扣说明:

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

余额充值