Clion开发stm32 无法使用printf (undefined reference to `_sbrk‘)

2023-05-16

原因是因为arm-none-eabi编译器为了节省空间,删减了一部分代码, 导致有些方法只有声明没有实现,只要在项目中添加实现的代码就可以了,使用__weak修饰语,如果其他地方有实现就自动失效

在项目中新建一个.c文件,随意取名,例如my_syscalls.c,内容如下。

然后将 printf 重定向(网络上有很多方法),把 printf 打印的内容透过串口发送到上位机,就可以用来调试代码了



#include <stdio.h>
#include <stdarg.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdarg.h>
#undef errno
extern int errno;
extern int _end;

__weak caddr_t _sbrk(int incr)
{
    static unsigned char *heap = NULL;
    unsigned char *prev_heap;
    if (heap == NULL)
    {
        heap = (unsigned char *) &_end;
    }
    prev_heap = heap;
    heap += incr;
    return (caddr_t) prev_heap;
}

__weak int link(char *old, char *new)
{
    return -1;
}

__weak int _close(int file)
{
    return -1;
}

__weak int _fstat(int file, struct stat *st)
{
    st->st_mode = S_IFCHR;
    return 0;
}

__weak int _isatty(int file)
{
    return 1;
}

__weak int _lseek(int file, int ptr, int dir)
{
    return 0;
}

__weak int _read(int file, char *ptr, int len)
{
    return 0;
}

__weak void abort(void)
{
    /* Abort called */
    while (1)
        ;
}






本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Clion开发stm32 无法使用printf (undefined reference to `_sbrk‘) 的相关文章

  • python numpy 和内存效率(通过引用传递与值传递)

    我最近越来越多地使用 python 来代替 c c 因为它使我的编码时间缩短了几倍 同时 当我处理大量数据时 我的python程序运行速度开始变得比c中慢很多 我想知道这是否是由于我使用大型对象 数组效率低下所致 有没有关于 numpy p
  • C 中的类型转换会变得香蕉吗? [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 看来 C 和我对这里的预期输出存在分歧 I have struct r struct int r i float r f
  • 使用 STM32F0 ADC 单独读取不同的输入

    STM32F072CBU 微控制器 我有多个 ADC 输入 并且希望单独读取它们 STMcubeMX 生成样板代码 假设我希望按顺序读取所有输入 但我无法弄清楚如何纠正这个问题 这篇博文 http blog koepi info 2015
  • 如何区分未传递的参数和传递错误值的参数?

    我试图找出在 Perl 中区分未传递参数和参数已作为 0 传递的情况的最佳方法 因为它们对我来说意味着不同的事情 通常我喜欢这种歧义 但在本例中我生成 SQL 因此我想用 NULL 替换未定义的参数 但将 0 保留为 0 所以这就是歧义 s
  • “&”和 std::reference_wrapper 之间的区别?

    我有以下代码 include
  • 为什么采用两个指针的交换函数只能与 using 命名空间 std 一起使用?

    我有一堆这样的代码 include
  • 的 xml 问题

    我有一个 xml 架构
  • 当我不知道它是否是临时的时,C++ 返回类型

    假设Foo是一个相当大的数据结构 我应该怎样写一个const返回实例的虚函数Foo 如果我不知道继承的类是否会存储Foo内部 因此 允许通过引用返回 如果我无法在内部存储它 我的理解是我无法返回const引用它 因为它将是临时的 它是否正确
  • 类 VS 引用结构

    我正在使用 C 编写游戏 因此 我非常关心性能 我想知道主要区别是什么 如果可能的话 使用类传递数据或通过引用传递结构的性能考虑因素 出于性能原因 我希望不要复制数据 我假设通过 ref 传递比这里通过值传递要快得多 我知道类始终通过引用传
  • 如何在 C++ 中调用不同项目的方法?

    使用 Visual Studio 时 我通常使用 C 工作 因此 C 中的某些内容让我感到困惑 概念看起来如此不同 但名称几乎相同 我创建了一个控制台项目 我想在其中运行另一个项目以进行测试 我将该项目添加为控制台应用程序的引用 然后陷入困
  • 当端点和 PMA 地址均更改时,CubeMX 生成的 USB HID 设备发送错误数据

    我正在调试我正在创建的复合设备的问题 并在新生成的仅 CubeMX 代码中重新创建了该问题 以使其更容易解决 我添加了少量代码main 让我发送 USB HID 鼠标点击 并在按下蓝色按钮时使 LED 闪烁 uint8 t click re
  • 引用的项目在编译时“丢失”

    我有一个包含两个项目的 C 解决方案 一个服务 主项目 和一个记录器 该服务使用记录器中的类 我在服务项目中添加了对记录器项目的引用 在设计时 自动完成工作正常 记录器的类是可见的 我使用的引用具有适当的颜色 我重建解决方案 但出现问题 不
  • java中引用和对象有什么区别? [复制]

    这个问题在这里已经有答案了 我有类 GUI 所以我可以创建这样的对象 GUI g1 new GUI 和一个像这样的引用变量 GUI g2 现在据我所知 g2 是一个引用变量 它引用 GUI 类 而 g1 是 GUI 类的对象 g1和g2有什
  • sprintf 风格字符串格式化的起源

    字符串格式化概念见sprintf如今几乎可以在任何语言中找到 你知道 用 s d f 等掩盖字符串 并提供变量列表来填充它们的位置 哪种语言最初具有提供此功能的库函数或语言结构 请指定某种来源参考以确认您的主张 以便我们避免纯粹的猜测或猜测
  • Java 中的引用变量里面有什么?

    我们知道对象引用变量保存表示访问对象的方式的位 它不保存对象本身 但保存诸如指针或地址之类的东西 我正在阅读 Head First Java 第 2 版 一书 书中写道 第 3 章第 54 页 在 Java 中我们并不真正知道什么是 在引用
  • 使用 openopenPanel() 方法打开 matAutocomplete

    我正在使用 Angular Material 的垫自动完成 https material angular io components autocomplete overview组件 并根据docs https material angula
  • java hashmaps 的 get() 函数

    我声明了以下哈希图 HashMap
  • %d 为长整型

    下面的代码正确吗 据我的理解 它应该不能正常工作 但是在Dev C 编译器上 它可以正常工作 有人可以详细解释一下吗 include
  • 如何在 C++ 中的特定坐标处将字符串打印到控制台?

    我正在尝试在控制台中的指定坐标处打印字符 到目前为止我一直在使用非常丑陋的printf 033 d dH s n 2 2 str 但我只想问 C 是否有其他方法可以做到这一点 问题甚至不在于它丑陋 当我试图让自己成为一个更漂亮的函数时 问题
  • ^ 和 _ 宏之后出现的数字(是:LaTeX 限制?)

    我在 LaTeX 中遇到了一个恼人的问题 我有一个大约 1000 行的 tex 文件 我已经有了一些数字 但是当我尝试添加另一个数字时 它会吐出 Undefined control sequence

随机推荐

  • ubuntu使用rc.local开机自启USB设备读写权限

    无人机飞控为ACM0 xff0c 串口USB为USB0 xff0c 使用rc为其开机自启给与权限 大部分由chagpt生成 xff0c 已验证 首先 xff0c 创建一个新的 etc rc local 文件 xff08 如果尚不存在 xff
  • Friendlycore增加inodes数量

    背景 xff1a 为Nanopim1安装了core系统 xff0c tf卡大小64G xff0c 安装后正常扩展到了整个tf卡 xff0c 但是在安装hass的docker显示磁盘空间不够 xff0c 最终发现是inode被用完了 其ino
  • UORB

    转载地址 xff1a http blog arm so armteg pixhawk 183 0503 html Pixhawk 飞控 系统是基于ARM的四轴以上飞行器的飞行控制器 xff0c 它的前身是PX4 IMU xff0c Pixh
  • rCS启动脚本分析

    转载地址 xff1a http wellmakers com p 61 401 还有一篇很重要的文章 xff0c 讲述了整个系统的大致启动过程 xff1a http blog chinaunix net uid 29786319 id 43
  • PID通俗解释

    转载地址 xff1a http blog gkong com liaochangchu 117560 ashx PID是比例 积分 微分的简称 xff0c PID控制的难点不是编程 xff0c 而是控制器的参数整定 参数整定的关键是正确地理
  • Kali Linux中安装Xfce的步骤2-1

    Kali Linux默认安装的是桌面环境是Gnome xff0c 可以通过以下方法在Kali Linux中安装Xfce xff0c 从而修改其桌面环境 1 Xfce介绍 Xfce是XForms Common Enviroment的简写 其可
  • STM32CubeMX教程之简介及基本使用

    STM32CubeMX是意法半导体推出的图形化配置工具 xff0c 通过傻瓜化的操作便能实现相关配置 xff0c 最终能够生成C语言代码 xff0c 支持多种工具链 xff0c 比如MDK IAR For ARM TrueStudio等 尤
  • Linux 文件流与目录流管理

    Linux 应用开发 04 文件流与目录流管理 本课目标 1 编程目标 xff1a a 实现磁盘文件的拷贝操作 b 缓冲区类型对磁盘真正写入操作的影响 2 理解文件流操作以及缓冲区概念 3 掌握ansi c 文件流相关操作函数 4 理解与掌
  • tensorflow InvalidArgumentError: Cannot serialize protocol buffer of type tensorflow.GraphDef 错误分析

    训练nfm模型 xff0c 每2000个step进行保存 一开始模型训练正常 xff0c 但是在使用tf train Saver的save方法保存模型时出现了如下错误 xff1a tensorflow python framework er
  • 7年厨师想转行程序员

    7年厨师想转行 xff0c 跟我学java 可是工资只有7千我惊呆了 xff0c 我还以为7年厨师工资至少1万多呢 看来每个行业都有工资高也有工资低的 xff0c 他可能属于厨师里工资低的吧
  • 八款值得尝试的精美的Linux发行版,你用过哪几款?

    Linux发行版各式各样 xff0c 每个发行版都有自己的特点 xff0c 在这篇文章中 xff0c 将会列出让一些另 Linux 用户印象最深刻且精美的 Linux 发行版 xff0c 包括对初学者友好和流行的发行版 elementary
  • VINS-mono 解析 生成用于回环检测的字典文件

    VINS回环检测使用的是FAST xff08 Features from Accelerated Segment Test xff09 特征点检测 xff0c 并利用BRIEF描述子存储特征 挑选了两个实时性较好的检测和描述 BRIEF提供
  • 将git下载的c++项目用vs打开

    首先确定下载的项目里包括CMakeLists txt的文件 然后在文件所在目录用cmd或power shell输入以下命令 以2017版本为例 cmake G 34 Visual Studio 15 2017 Win64 34 中间那个 表
  • 用 verilog 实现 minst 数字识别

    用verilog实现minst 的数字识别 可以用modelsim看结果 如果要部署到fpga上 PL的资源要非常非常多 代码下载 包含5个仿真文件 https download csdn net download howard789 13
  • ros + gazebo未报错却加载不出来机器人模型 解决办法

    以下几篇文章的问题 xff0c 我也遇到了 https www zhihu com question 442463457 answer 1717320391 https ask csdn net questions 7405583 我的环境
  • 4自由度机械臂正逆解公式推导与代码实现

    视频链接 四自由度机械臂逆解抓取 含代码 哔哩哔哩 bilibili 代码 import math P 61 7 5 A1 61 12 1 A2 61 8 2 A3 61 8 2 A4 61 18 5 MAX LEN 61 A2 43 A3
  • 无法获得下列许可solidworks standard无效的(不一致的)使用许可号码(-8,544,0) 解决办法

    将 SolidSQUAD 的Program Files里的所有文件夹覆盖到安装目录下 xff0c 如果是默认安装 xff0c 就是复制到C Program Files SOLIDWORKS Corp下 xff08 而不是C Program
  • 打开被独占的文件方法(二) -- 修改句柄访问权限

    打开被独占的文件方法 二 修改句柄访问权限 2010年06月08日 星期二 11 40 来自 xff1a http hi baidu com wsh chb blog item 1dfafadd4da473d48d1029a8 html 修
  • 将点云坐标转换成世界坐标的demo

    pcl calib cfg usr bin env python PACKAGE 61 34 depth camera calib 34 NODENAME 61 34 depth camera calib 34 from dynamic r
  • Clion开发stm32 无法使用printf (undefined reference to `_sbrk‘)

    原因是因为arm none eabi编译器为了节省空间 删减了一部分代码 导致有些方法只有声明没有实现 xff0c 只要在项目中添加实现的代码就可以了 xff0c 使用 weak修饰语 xff0c 如果其他地方有实现就自动失效 在项目中新建