> 文章列表 > 基于Eclipse下使用arm gcc开发GD32调用printf

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

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

系列目录

第一章 xxx

目录

系列目录

文章目录

文章目录

  • 系列文章目录
  • 前言
  • 一、pandas是什么?
  • 二、使用步骤
    • 1.引入库
    • 2.读入数据
  • 总结

前言

开发环境: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。

总结

没有总结