问题标签 [newlib]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1874 浏览

c - ARM Cortex M-3 GCC/newlib 初始化

我刚刚开始深入研究 ARM Cortex-M 微控制器的世界,我决定不使用现有的开发板或易于使用的 IDE,而是直接进入这些东西的裸机,所以我已经将一个 STM32F103 焊接到原型板上,现在我正在尝试使用 Launchpad 中的 gcc-arm-embedded Toolchain 进行工作。在阅读了有关链接器脚本之类的手册之后,我现在编写了自己的链接器脚本和启动代码,它们基本上什么都不做,只是将 .data 部分从 ROM 复制到 RAM,将 .bss 清零,然后调用 SystemInit()从 ST 的标准外设库进行基本的 uC 初始化,最后调用 main()。
现在,从我找到的有关 Cortex M-3 开发的几个教程中,我看到他们使用 -nostartfiles 标志连接器,但现在我想知道:在这种情况下我是否必须自己初始化 newlib?还是我应该使用 GCC/newlib 中的默认启动文件并删除 -nostartfiles?但在这种情况下,我仍然需要进行一些初始化,例如将 .data 复制到 RAM 并设置向量表,这需要自定义链接器脚本。那么我在哪里做呢?
而且我什至不想开始考虑 C++!

那么,初始化这种基于 Cortex-M3 的微控制器及其 libc(不包括外围设备)的推荐方法是什么?

提前致谢!

0 投票
3 回答
893 浏览

c - Newlib printf 延迟

我对 newlib 的 printf 函数有一个奇怪的问题,它被重定向到 uart 端口。

这个问题可以用一个例子很好地解释。

现在,当我运行程序时,直到到达/调用下一个 printf 才会出现“hi”。即,当应该打印“hello”时,它会打印“hi”,.. 1 呼叫的延迟总是进行。最后一个 printf 根本没有打印出来。

我的 UART 代码在哪里:

解决方案是什么?

0 投票
1 回答
3696 浏览

c - __init_array 是什么?

我有一个用 GCC 编译的 Cortex-M3 项目。startup_LPC177x_8x.s 代码将初始化数据从闪存复制到 RAM,初始化bss,调用时钟初始化 SystemInit。在调用_main函数之前,代码还会调用函数_libc_init_array

__libc_init_array函数调用在 中定义的所有初始化例程,__preinit_array调用该_init函数,以及在 中定义的所有例程__init_array

使用 GDB,我可以发现它__preinit_array是空的(start==end),并且第二次调用__init_array_start[i] ()崩溃。

我不知道这个数组中包含哪些函数。链接描述文件使所有.init.array.*部分都位于此处。但是如何找到对应的.o源文件呢?

0 投票
0 回答
555 浏览

linux - 为 msp430-elf 目标构建 gcc

我正在尝试为 msp430 构建 gcc-4.9。我已经构建了最新版本binutils并尝试gcc-4.9使用基本配置进行构建:

configure --target=msp430-elf --enable-languages=c,c++ --with-newlib=yes

但问题是 gcc 为我的机器构建自己x86-unknown-linux然后我认为它开始msp430使用新编译器构建目标但我已经安装了 gcc-4.8 并且只想要msp430-elf已经安装的目标4.8

注意:msp430目标仅在其中可用4.9,我只想为msp430不为我的主机构建 4.9,因为我已经安装了它。

首先构建失败,其次,即使它确实成功了,我也不想安装,x86恐怕make install会这样做。

的文档configure非常模糊,我非常感谢一些帮助。

0 投票
2 回答
2093 浏览

linux-kernel - 内核头文件如何参与构建 gcc 工具链?

我了解到内核头文件指定程序如何与内核交互,因此它们必须参与构建标准库,或者?我刚刚阅读了一个教程,它很好地解释了如何构建一个 arm-elf 工具链(http://wiki.ubuntuusers.de/GNU_ARM-Toolchain)。

让我感到困惑的是,这个过程不涉及内核头文件。他们用

和 Newlib

在我看来,他们只从 newlib 中获取标头(他们使用 newlib 而不是 glibc)。这个目录中的文件看起来很一般。我希望Linux“内核版本”出现在这个过程中的某个地方,但它没有。我认为 Linux ABI 可以从内核版本更改为内核版本。内核(头文件)和 gcc 工具链之间的“连接”如何?

0 投票
0 回答
620 浏览

c++ - GNU gcc/ld 部分之间的额外字节

我使用arm-eabi-gcc (ver 4.6.4 / binutils 2.24)with newlib (ver 2.1.0)(不带AngelSWI)。

我不使用Exception也不RTTI

链接描述文件几乎与默认相同。

在链接文件中,一个 section 之后有额外的 32K 空间.eh_frame

我可以删除这个多余的空间吗?




问候。

0 投票
1 回答
1985 浏览

c - 如何替换newlib的malloc

我正在使用带有 LPC1768 的 LPCXpresso。我正在尝试实现几个内存池。我有我的旧代码允许这样做,所以我很好。我无法做的是阻止 newlib 使用它自己的 malloc。newlib 中调用 malloc 的函数很少。我避开了它们,除了 _Csys_alloc,不幸的是它被 _initio 调用。由于 malloc 并不弱,我不能简单地用我自己的实现替换它。那么除了修改 newlib 并重新编译或编写我自己的 _initio 例程之外,还有其他方法吗?

谢谢你的帮助。

0 投票
1 回答
658 浏览

c - 如何移植 newlib?

我想编写自己的内核,但我坚持为我的交叉编译器移植 newlib。

  1. 我要下载哪个版本的newlib

  2. 我在哪里放置系统调用存根?最小的实现是否足够?如果我决定在以后编辑系统调用,是否必须重新构建 newlib?

  3. 我的内核在中断 0x80 (128d) 上公开了所有系统调用,所以我只需要在每个存根中放入一些内联汇编来完成我需要它做的事情。如何根据内核实现它们取决于您。

我该怎么做呢?

0 投票
2 回答
4222 浏览

linux - Cygwin 不支持 glibc

Cygwin 常见问题解答有以下关于“glibc 在哪里?”的信息。: Cygwin 不提供 glibc。它使用 newlib 代替,它提供了许多(但不是全部)相同的功能。将 glibc 移植到 Cygwin 会很困难。

我很惊讶并检查了我之前使用过的发布包。虽然我检查了存储库,但似乎 glibc 实际上确实是 cygwin 的一部分,直到 2.10 版。谁能说出 glibc 后续版本的移植困难?

0 投票
3 回答
5348 浏览

arm - 尝试打印数字> = 10时的STM32硬故障

临时解决方法

我用小 printf 解决了这个问题:

可能 newlib printf 只是占用了太多内存。在这之后PC变成了一些奇怪的东西,理论上应该是数组的结尾char[100]

后来它尝试执行

它崩溃了。内存错误?有很多事情我不明白。例如,我不确定链接描述文件是否正确,或者是否是系统调用函数。在进一步了解之前,我必须坚持使用微小的 printf。


原来的

我有一块 STM32F103RB 板(Nucleo),我刚刚让 USART1 工作。另外,我测试了 Newlib 函数,并按puts()预期工作。但是,当我尝试使用printf()整数时,如下所示:

如果test < 10程序有效,但如果test >= 10生成硬故障。经过一些 GDB 调试后,我发现它是从 vfprintf 生成的:

我想不出任何解决方案。这是我的_sbrk()

我的最小堆栈大小配置为 1024 字节。我试图增加到 10k,但它仍然会产生这个硬故障。我不知道如何调试或找到问题。我该如何解决?

我注意到一件事。失败发生在vfprintf.c:1601,我检查了cpGDB 中的指针:

我不知道为什么地址0x20004f57指向一个不存在的地址。

另外,p _stackend

显然不存在

似乎在_VFPRINTF_R()执行时,在goto number执行时,指针cp已损坏:

链接器脚本:

对这个linker script不是很了解,修改了《Discovering the STM32 Microcontroller》附带的那个。