基于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。
总结
没有总结
相关文章:
基于Eclipse下使用arm gcc开发GD32调用printf
系列目录 第一章 xxx 目录 系列目录 文章目录 文章目录 系列文章目录前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结前言 开发环境:Eclipse代替Keil,IAR 开发平台:GD32 开发编译器:arm-none-eabi- …...
5个降低云成本并提高IT运营效率的优先事项
在过去的十年里,公司在公有云和私有云基础设施上构建了大量的计算工作负载,或者将工作负载转移到云端。Gartner 预测,到2023年,全球终端用户在公共云服务上的支出将达到5910亿美元,比2021年增长43%。这是一个显著的增长…...
95-拥塞控制
拥塞控制1.什么是拥塞控制2.拥塞控制的方法(1)慢启动和拥塞避免(2)快速重传和快速恢复1.什么是拥塞控制 在计算机网络中的链路容量(即带宽)、交换结点中的缓存和处理机等,都是网络的资源。在某段时间,若对网络中某一资源的需求超…...
Linux常见操作命令【二】
一、Vi 编辑器 Vi 编辑器存在三者模式:命令、末行、编辑 1.1 命令模式 输入 vi 默认进入命令模式 输入n或者nG:定位到某一行行首 输入G:跳到文件最后一行行首 输入hjkl:表示左下上右移动光标(方向键也可以…...
Linux驱动中断和定时器
目录 中断 顶半部/底半部机制 软中断: Tasklet: 工作队列: 定时器 中断 中断是正在执行的程序被另一个程序打断,去执行另一个程序的处理函数,当执行完再返回执行被打断的程序。分为内中断(异常)和外中断(硬件中断)。 当cp…...
表达式和函数
表达式: 将数字和运算符连接起来的组合称为表达式。我们可以将数字称为操作数,单个操作数也可以被看作是一个表达式。 操作数:常数,列名,函数调用,其他表达式 运算符:算数运算符,…...
C#基础复习
目录 格式字符串 多重标记和值 预定义类型 用户定义类型 值类型和引用类型 存储引用类型对象的成员 C#类型的分类 静态类型和dynamic关键字 类的基本概念 类成员的类型 为数据分配内存 访问修饰符 格式字符串 多重标记和值 C#程序就是一组类型声明,学习C#就是学习…...
Windows服务器使用代码SSH免密登录并执行脚本
服务器操作系统 Window Server 2016 1、Windows服务器安装OpenSSH 有多种方式,本文介绍一种方式 下载页: https://github.com/PowerShell/Win32-OpenSSH/releases 在下载页下载文件OpenSSH-Win64.zip 本次实验解压至 D:\OpenSSH-Win64\OpenSSH-Win6…...
(Deep Learning)交叉验证(Cross Validation)
交叉验证(Cross Validation) 交叉验证(Cross Validation)是一种评估模型泛化性能的统计学方法,它比单次划分训练集和测试集的方法更加稳定、全面。 交叉验证不但可以解决数据集中数据量不够大的问题,也可以…...
通俗举例讲解动态链接】静态链接
参考动态链接 - 知乎 加上我自己的理解,比较好懂,但可能在细节方面有偏差,但总体是一致的 静态链接的背景 静态链接使得不同的程序开发者和部门能够相对独立的开发和测试自己的程序模块,从某种意义上来讲大大促进了程序开发的效率…...
K8S部署常见问题归纳
目录一. 常用错误发现手段二、错误问题1. token 过期2. 时间同步问题3. docker Cgroup Driver 不是systemd4. Failed to create cgroup(未验证)子节点误执行kubeadm reset一. 常用错误发现手段 我们在部署经常看到的提示是: [kubelet-check] It seems …...
Redis高可用
最近离职后还没开始找工作,在找工作前去学习一下Redis高可用方案。 目录Redis高可用高可用的概念实现方式持久化主从复制简单结构优化结构优缺点哨兵模式(Sentinel)哨兵进程的作用自动故障迁移(Automatic failover)优缺点集群优缺点Redis高可…...
Hyperledger Fabric 2.2版本环境搭建
前言 部署环境: CentOS7.9 提前安装好以下工具 git客户端golangdockerdocker-composecurl工具 以下是个人使用的版本 git: 2.39.2golang: 1.18.6docker: 23.0.3dockkekr-compose: v2.17.2curl: 7.29.0 官方文档参考链接:跳转链接,不同的版本对应的官…...
macOS Monterey 12.6.5 (21G531) Boot ISO 原版可引导镜像
本站下载的 macOS 软件包,既可以拖拽到 Applications(应用程序)下直接安装,也可以制作启动 U 盘安装,或者在虚拟机中启动安装。另外也支持在 Windows 和 Linux 中创建可引导介质。 2023 年 4 月 10 日(北京…...
【软件设计师13】数据库设计
数据库设计 1. 数据库设计过程 2. E-R模型 3. E-R图向关系模型的转换 例如一对一联系,可以将联系单独做为关系模式,也可以存放到任意一个实体中 而一对多要合并只能合并到多这边,不能存放到1 多对多则联系必须单独转成一个关系模式 4. 案…...
SpringMVC的全注解开发
文章目录一、spring-mvc.xml 中组件转化为注解形式二、DispatcherServlet加载核心配置类三、消除web.xml一、spring-mvc.xml 中组件转化为注解形式 跟之前全注解开发思路一致, xml配置文件使用核心配置类替代,xml中的标签使用对应的注解替代 <!-- 组件…...
C# | 导出DataGridView中的数据到Excel、CSV、TXT
C# | 导出DataGridView中的数据到Excel、CSV、TXT 文章目录C# | 导出DataGridView中的数据到Excel、CSV、TXT前言DataGridView数据转存DataTableDataTable转Excel方法一、使用Microsoft.Office.Interop.Excel方法二、使用EPPlus库方法三、使用NPOI库DataTable转CSVDataTable转T…...
新规拉开中国生成式AI“百团大战”序幕?
AI将走向何方? ChatGPT在全球范围掀起的AI热潮正在引发越来越多的讨论,AI该如何管理?AI该如何发展?一系列问题都成为人们热议的焦点。此前,马斯克等海外名人就在网络上呼吁OpenAI暂停ChatGPT的模型训练和迭代…...
日撸 Java 三百行day31
文章目录day31 整数矩阵及其运算面向对象思想java异常处理java中的getter和setter方法代码day31 整数矩阵及其运算 面向对象思想 结合之前day7和day8面向过程开发,只关注了矩阵加法和矩阵乘法的功能。而day31是面向对象开发,一个矩阵类,在这…...
在线绘制思维导图
思维导图是一种可视化的思维工具,它可以将放射性思考具体化为可视的图像和图表。 思维导图利用图文并重的技巧,把各级主题的关系用相互隶属与相关的层级图表现出来,把主题关键词与图像、颜色等建立记忆链接。 它运用图像和颜色等多种元素&…...
从零构建:基于FreeRTOS与LVGL的低功耗智能手表实战指南
1. 项目背景与核心目标 第一次接触智能手表开发是在三年前,当时市面上开源的方案要么功能简陋,要么功耗高得离谱。作为一个嵌入式老鸟,我决定自己动手搞一套真正可用的低功耗方案。经过多次迭代,最终选择了FreeRTOSLVGL这个黄金组…...
OpenClaw隐私保护:GLM-4.7-Flash本地处理敏感数据的实践方案
OpenClaw隐私保护:GLM-4.7-Flash本地处理敏感数据的实践方案 1. 为什么需要本地化AI处理敏感数据? 去年我在处理公司财务报告自动化时遇到一个棘手问题:使用云端AI服务需要上传包含客户隐私的Excel文件到第三方服务器。尽管服务商承诺数据安…...
大模型数据治理终极指南:5个关键步骤实现高效生命周期管理
大模型数据治理终极指南:5个关键步骤实现高效生命周期管理 【免费下载链接】Foundations-of-LLMs 项目地址: https://gitcode.com/GitHub_Trending/fo/Foundations-of-LLMs 大模型数据治理是构建高质量AI系统的基石,对于确保模型性能、合规性和可…...
UE5.3与Colosseum集成配置指南及常见问题解析
1. 环境准备:Windows系统下的基础配置 在开始Colosseum与UE5.3的集成之前,我们需要确保开发环境满足基本要求。我最近在Windows 11系统上完成了一次完整配置,实测下来这几个关键组件版本组合最稳定: 操作系统:Windows …...
利用ADS实现多频段阻抗自动优化的实战指南
1. 从零开始理解多频段阻抗匹配 刚入行那会儿,我对阻抗匹配的理解还停留在"把50欧姆搞对就行"的层面。直到某次调试一个同时工作在900MHz和2.4GHz的双频天线时,才发现单频段匹配的思路完全不够用——调好了低频段,高频段性能就崩了…...
零基础入门:5分钟学会用Ollama运行Granite-4.0-H-350M文本生成
零基础入门:5分钟学会用Ollama运行Granite-4.0-H-350M文本生成 1. 为什么选择Granite-4.0-H-350M Granite-4.0-H-350M是一个轻量级但功能强大的文本生成模型,特别适合初学者和资源有限的用户。它只有3.5亿参数,却能在普通电脑上流畅运行&am…...
【计算机组成原理】1 计算机组成原理学习路线:从晶体管到云架构的知识图谱
1 为什么你需要一张知识图谱 计算机组成原理是计算机科学的核心基石,它研究计算机硬件系统的基本组成原理、逻辑实现及工作机制。对于计算机专业学生或软件开发者而言,理解"代码如何在硬件上运行"不仅是应试需要,更是性能优化、系统…...
Python 3.15 JIT不是“可选优化”——而是CPython官方首次强制嵌入的LLVM后端(2024 Q3起新项目默认启用)
第一章:Python 3.15 JIT 的历史定位与架构革命Python 3.15 标志着 CPython 运行时的一次范式跃迁——它首次将生产就绪的、默认启用的即时编译(JIT)引擎深度集成至解释器核心,而非作为外部补丁或实验性分支存在。这一设计终结了自…...
从随机采样到精准决策:蒙特卡罗方法在复杂系统建模中的实践
1. 蒙特卡罗方法:用随机性破解复杂世界的密码 想象你是一位古代数学家,手里只有一把沙子和一块画着方格的石板。现在要计算一个不规则形状的湖泊面积,你会怎么做?最原始的方法可能是把沙子均匀撒在石板上,然后数出落在…...
H3六边形层次化地理空间索引:重新定义空间数据处理的颠覆式突破
H3六边形层次化地理空间索引:重新定义空间数据处理的颠覆式突破 【免费下载链接】h3 Hexagonal hierarchical geospatial indexing system 项目地址: https://gitcode.com/gh_mirrors/h3/h3 地理空间数据处理长期面临着精度与效率难以兼顾的困境。传统网格系…...
