HAL+clion+armgcc编译器的printf问题

news/2025/11/28 11:59:28/文章来源:https://www.cnblogs.com/JORNTAN/p/19281782

网上绝大部分都在说在重定向printf时候只要重写fputc函数并勾选微库来实现

但是那是keil才有的微库,如果不勾选微库,就得先停用标准库的半主机模式,再重写。。。

但是对于stm32cubeide和clion这种目前不是主流但是体验很好的armgcc编译器来说,上述方法完全不管用,题主在很长一段时间内只能用自带的haltransmit发送。字符串倒无所谓,变量真的是麻烦。

于是,看见知乎某篇帖子(应该是知乎)写的很详细,也是关于这个问题的解决方法

在其基础上优化一下,用于契合clion的用户

首先创建一个c和h文件,名字随便取名,我的直接复制的帖子中原帖的

retarget.h和retarget.c

image

retarget.h如下
`// All credit to Carmine Noviello for this code
// https://github.com/cnoviello/mastering-stm32/blob/master/nucleo-f030R8/system/include/retarget/retarget.h

ifndef RETARGET_H_

define RETARGET_H_

include "stm32f4xx_hal.h"

include <sys/stat.h>

void RetargetInit(UART_HandleTypeDef huart);
int _isatty(int fd);
int _write(int fd, char
ptr, int len);
int _close(int fd);
int _lseek(int fd, int ptr, int dir);
int _read(int fd, char* ptr, int len);
int _fstat(int fd, struct stat* st);

endif //#ifndef RETARGET_H_`

retarget.c如下
`// All credit to Carmine Noviello for this code
// https://github.com/cnoviello/mastering-stm32/blob/master/nucleo-f030R8/system/src/retarget/retarget.c

include <_ansi.h>

include <_syslist.h>

include <errno.h>

include <sys/time.h>

include <sys/times.h>

include <limits.h>

include <signal.h>

include "retarget.h"

include <stdint.h>

include <stdio.h>

if !defined(OS_USE_SEMIHOSTING)

define STDIN_FILENO 0

define STDOUT_FILENO 1

define STDERR_FILENO 2

UART_HandleTypeDef *gHuart;

void RetargetInit(UART_HandleTypeDef *huart) {
gHuart = huart;

/* Disable I/O buffering for STDOUT stream, so that* chars are sent out as soon as they are printed. */
setvbuf(stdout, NULL, _IONBF, 0);

}

int _isatty(int fd) {
if (fd >= STDIN_FILENO && fd <= STDERR_FILENO)
return 1;

errno = EBADF;
return 0;

}

int _write(int fd, char* ptr, int len) {
HAL_StatusTypeDef hstatus;

if (fd == STDOUT_FILENO || fd == STDERR_FILENO) {

// hstatus = HAL_UART_Transmit_DMA(gHuart, (uint8_t *) ptr, len);
hstatus = HAL_UART_Transmit(gHuart, (uint8_t *) ptr, len, HAL_MAX_DELAY);
if (hstatus == HAL_OK)
return len;
else
return EIO;
}
errno = EBADF;
return -1;
}

int _close(int fd) {
if (fd >= STDIN_FILENO && fd <= STDERR_FILENO)
return 0;

errno = EBADF;
return -1;

}

int _lseek(int fd, int ptr, int dir) {
(void) fd;
(void) ptr;
(void) dir;

errno = EBADF;
return -1;

}

int _read(int fd, char* ptr, int len) {
HAL_StatusTypeDef hstatus;

if (fd == STDIN_FILENO) {hstatus = HAL_UART_Receive(gHuart, (uint8_t *) ptr, 1, HAL_MAX_DELAY);if (hstatus == HAL_OK)return 1;elsereturn EIO;
}
errno = EBADF;
return -1;

}

int _fstat(int fd, struct stat* st) {
if (fd >= STDIN_FILENO && fd <= STDERR_FILENO) {
st->st_mode = S_IFCHR;
return 0;
}

errno = EBADF;
return 0;

}

endif //#if !defined(OS_USE_SEMIHOSTING)`

这时候,主函数加上

RetargetInit(&huart1);

image

编译的时候会报错,说函数重定义,进去syscalls.c文件,把报错的函数直接注释掉即可
image

csdn的也是我本人,所以带了水印

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/979555.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年知名的薄壁不锈钢管/316不锈钢管厂家最新TOP实力排行

2025年知名的薄壁不锈钢管/316不锈钢管厂家TOP实力排行行业背景与市场趋势随着全球工业化和城市化进程的加速,不锈钢管材因其优异的耐腐蚀性、高强度、美观性和环保特性,在建筑装饰、石油化工、食品医药、机械制造等…

2025年广州存储服务器托管代理商TOP8推荐榜

在2025年,广州的存储服务器托管市场上涌现了多家值得关注的代理商。本文将为您介绍深圳市数港科技有限公司等八家顶尖代理商,帮助企业在选择合适的托管合作伙伴时做出明智决策。这些公司不仅提供全面的托管解决方案,…

2025年微型简易斜楔滑块定做厂家权威推荐榜单:微型斜楔升降机构/微型斜楔技术/微型斜楔式夹具源头厂家精选

在精密模具与自动化设备领域,微型简易斜楔滑块作为实现复杂运动控制和精准导向的关键功能部件,其加工精度与可靠性直接影响到整套设备的工作效率与成品质量。根据精密零部件行业数据显示,2025年中国模具配件市场规模…

雅思高效出分选对机构!2025年高性价比机构推荐及选课技巧

雅思高效出分选对机构!2025年高性价比机构推荐及选课技巧雅思备考的关键节点,选对培训机构往往能事半功倍。但面对市场上五花八门的课程,不少考生陷入"越对比越迷茫"的困境。我们调研了近千名雅思高分学员…

2025年企业出海一站式智能外贸服务平台有哪些?

在当前数字化的发展背景下,选择一家优秀的全渠道数字获客企业是外贸成功的关键。广州作为外贸服务中心,拥有众多实力强大的平台,这些平台各具特色,提供全面的智能外贸解决方案。通过多元化的渠道,企业可以更有效地…

2025年如何选择合适的PT型锚具厂家

在选择合适的PT型锚具厂家时,首先要明确自己的定制需求,包括锚具的规格、材料和功能等。了解这些需求有助于锁定合适的厂家。接着,考察厂家的生产能力与经验至关重要,确保其能够满足您的特定要求。联系方式的获取也…

OBDPROG Doctor M500 Basic 1-Year Renew Service: Diagnose European/American Vehicles

Streamline Your Vehicle Diagnostics with the OBDPROG Doctor M500 Basic Version – 1-Year Renew Service Diagnosing Modern Vehicles: A Pain Point for Pros and DIYers Alike Today’s European and American …

北京雅思培训避坑指南!2025年11月5大品牌深度测评

北京雅思培训避坑指南!2025年11月5大品牌深度测评在北京备考雅思,面对街头巷尾的培训广告和线上繁杂的推荐信息,不少考生陷入"选择困难"。我们调研了北京海淀、朝阳、国贸等核心区域的30+机构,结合500+不…

2025年质量好的净化材料净化板厂家最新权威推荐排行榜

2025年质量好的净化材料净化板厂家权威推荐排行榜 行业背景与市场趋势 随着工业制造、医疗健康、食品加工等行业对洁净环境要求的不断提高,净化材料市场迎来快速增长。净化板作为洁净室、实验室、医院等场所的核心建…

2025年耐用的高低压配电柜行业内知名厂家排行榜

2025年耐用的高低压配电柜行业内知名厂家排行榜行业背景与市场趋势随着中国电力基础设施建设的持续投入和智能电网的快速发展,高低压配电柜作为电力系统中的核心设备,市场需求呈现稳定增长态势。据行业权威机构预测,…

2025年可靠的电子平台秤传感器厂家推荐及选购参考榜

2025年可靠的电子平台秤传感器厂家推荐及选购参考榜 行业背景与市场趋势 随着工业自动化水平的不断提升,电子平台秤作为称重测力领域的重要设备,广泛应用于物流、制造、食品、化工等行业。传感器作为电子平台秤的核…

2025年口碑好的正极电动搬运车用户好评厂家排行

2025年口碑好的正极电动搬运车用户好评厂家排行行业背景与市场趋势随着全球制造业和物流业的快速发展,电动搬运车作为现代仓储物流的核心设备,正迎来前所未有的市场机遇。2025年,中国电动搬运车市场规模预计将达到1…

2025土工新材料企业TOP5权威推荐:解析中水土工的管理水

水利、市政、环保工程的高质量建设,离不开土工新材料的技术支撑。2024年国内土工材料市场规模突破600亿元,年增速达32%,但行业内企业管理效率参差不齐、技术创新能力分化明显、综合实力差距较大等问题,成为制约工程…

2025年屏蔽电缆生产厂家权威推荐榜单:家装电缆‌/耐火电缆‌/软电缆源头厂家精选

在工业自动化、智能家居与新能源产业快速发展的背景下,屏蔽电缆凭借其抗电磁干扰、信号传输稳定及安全防护等特性,市场需求显著增长。行业数据显示,2025年中国屏蔽电缆市场规模预计突破120亿元,年均增长率稳定在10…

12.基础语法-变量

12.基础语法-变量12 变量———————————————————————————————————————————————————————————————————————————无敌小马爱学习

必收藏!2025 人工智能/优质大模型培训机构权威排名,企业培训专用!

在人工智能浪潮席卷全球的今天,企事业单位对AI与大模型技术的需求日益迫切。一场高质量的培训,能帮助企业团队快速掌握前沿技术,提升核心竞争力。为帮助企事业单位精准选择培训服务,我们特别整理2025年度人工智能/…

css-滚动条挤压布局问题

如图由于滚动条占据了右侧的容器宽度,导致容器被挤压,中间内容偏移 解决方案 动态判断是否存在滚动条,如果存在,则paddingr-right - 一般的滚动条宽度,

什么产品美白效果比较好?2025权威机构认证榜单,让你告别暗黄沉着

色斑反复、肤色暗沉、美白产品不对症?2025 分斑分肌美白精华焕白攻略,帮你精准匹配需求,告别“无效美白”困境! 【导读:分斑护理,肌活美白新效能】 据《2025 年中国色斑防治白皮书》数据显示,我国 25-45 岁女性…

2025年耐用的双辊径矫平机实力厂家TOP推荐榜

2025年耐用的双辊径矫平机实力厂家TOP推荐榜行业背景与市场趋势随着中国制造业向高质量发展转型,金属加工行业对精密矫平设备的需求持续增长。双辊径矫平机作为金属板材精整处理的核心设备,其性能直接影响最终产品的…

闭眼入不踩坑!人工智能/python/ansys/fluent/abaqus/devops培训机构 TOP10,实战教学不划水!

在数字化转型浪潮中,企业技术团队的能力提升已成为推动创新的关键。面对人工智能、Python、ANSYS、Fluent、Abaqus、DevOps等热门技术领域,如何选择一家靠谱的培训机构?我们深入调研市场,从师资实力、课程质量、服…