问题标签 [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 投票
0 回答
160 浏览

c - 包含/使用 scanf 时我的系统停止

我一直在为我的 Raspberry Pi B+ 开发一个“操作系统”(还不是真正的操作系统),当我处理数据输入时,我无法让 scanf() 工作,每次我将它包含到我的操作系统中,我的操作系统甚至没有启动。我搜索了很多网站,但似乎是我制造的一个错误(很可能),我不知道如何找到它,所以我请求大家帮助。我将提供所有需要的代码,所以如果您需要其他任何东西,请告诉我。

我的输入功能:

我的标志:-O1 -mfpu=vfp -mfloat-abi=hard -march=armv6zk -mtune=arm1176jzf-s -nostartfiles -Wall

我已经解决了为 printf() 启用 VFP 的问题,所以它应该不是问题。

我已经测试了相同的代码,但使用 getchar() 而不是 scanf(),它运行良好。RPI_GetChar() 本身没有任何问题。

谢谢你的帮助。(甚至没有启动我的意思是我的操作系统根本没有启动,就像 kernel_main 函数为空一样)

0 投票
2 回答
1283 浏览

gcc - 尝试打印到 UART 时 ARM7 printf 挂起

我在使用各种打印命令时遇到问题。
每次我尝试调用 printf() 时,我的系统都会挂起或有时会重置。
我有工作的 UART,我可以用 UART_PutChar() 打印到我的控制台就好了。
fprintf 适用于仅打印纯字符串的简单情况,fprintf(stdout, "test\n");
但是格式化的字符串会挂起我的系统fprintf(stdout, "test %d\n", 1);
当我尝试从 .data 部分打印数据时也会发生挂起

当我打印换行符时 printf 会起作用printf("\n");
printf 只会在我执行类似的操作 时打印换行符

在某些情况下,当 fprintf 失败时,它会返回 EOF(现在不记得了,如果相关,明天将提供它们)
(f)printf 似乎正在调用 putchar,我已将其重新定位到 UART。
奇怪的是,我认为它应该是 newlib-nano 提供的调用_write_write_r例程(而 printf 没有调用它们)。
作为 IDE,我使用 EmBitz 和它提供的工具链(arm-none-eabi)。我使用的 CPU 是 at91sam7x128。我无法使用 JTAG 调试我的程序,所以我只需要尝试使用 UART 进行调试。

更新 启动脚本:SAM7.s

链接器脚本

更新 2 我对系统调用的快速而肮脏的重新实现。

0 投票
0 回答
838 浏览

newlib - newlib 和 C++ 导致硬故障

我对 newlib 比较陌生,所以我的问题可能听起来很愚蠢......

我有一个用 C 语言完成的 ARM CortexM4 项目,并在项目中添加了一个 C++ 库。我将链接器可执行文件从 arm-none-eabi-gcc 更改为 arm-none-eabi-g++。在这样做时,我注意到我开始在处理器上遇到硬故障。

我发现 __libc_init_array(); 从堆中分配了大约 2500 个字节,我在链接描述文件中限制为 4k。然后很快我的堆空间就用完了。我的 sbrk() 在超出堆时确实返回 -1,但是在使用浮点调用 sprintf() 期间,我注意到 dtoa() 似乎尝试从堆中分配 4096 个字节,但在我遇到困难后不久就失败了d2b() 中的错误。请注意,硬故障似乎是由于尝试读取/写入地址 -1,这可能是 dtoa() 中的错误,没有检查 malloc 返回值。

如果我将链接器改回 gcc,则一切正常,并且我不会获得大的堆分配。

我想知道这是正常还是错误,如果正常有人可以解释大堆分配发生了什么吗?

注意我正在使用适用于 ARM 版本 5.2 2015sq4 的 GNU 工具,但我不确定如何检查 newlib 版本。

0 投票
1 回答
310 浏览

c - printf 只打印不超过标准输出缓冲区大小的字符

我正在尝试使用 newlib 的 printf 函数在 UART 设备上打印一些东西。为此我实施了

打印工作正常,直到标准输出的缓冲区被填满,例如,如果我尝试

我只在设备上收到“Hel”。使用_IONBF或观察到类似的行为_IOLBF。当我_write在调试器中设置断点时,我只被调用一次以获取一个缓冲区大小的内容。

任何想法或提示为什么_write不经常被调用?

0 投票
0 回答
762 浏览

gcc - 使用接口库的多个实现时的 CMake 链接排序

我有一个包含接口库的层的项目:

然后这些接口库被实现多次,以适应应用程序的不同环境:

还有一些独立于应用程序的库,它们使用接口库。

最后,应用程序定义正在使用的接口库层的实现。

幸运的是,这没关系,只要在综合链接命令之后和中IA列出。FooBar

但是,I 的某些实现再次使用了应用程序独立库。在这些环境中,链接命令行变成这样:

虽然它应该是

这是有道理的,因为在编译时没有描述Foo/Bar依赖的显式依赖。IAExeA

在简单的情况下,我们很幸运,因为默认情况下链接命令行与调用中的顺序相同target_link_libraries

我正在使用gcc-arm-none-eabi交叉编译器。这是我尝试过的:

  • LINK_INTERFACE_MULTIPLICITY

    似乎不起作用。即使数字更大,生成的命令行仍然相同。

  • set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--start-group")

    链接成功,但程序无法在目标硬件上正常运行。只有在连接调试器并重置后,它才会运行。奇怪的行为。

    当我用而不是显式链接Foo/时,命令行变为,然后一切正常。但我一般不能这样做,因为.BarIA--start-groupFoo Bar IA Foo BarExeB


  • 有没有办法在编译 ExeA 时定义 Foo / Bar 暂时依赖 IA,而在编译 ExeB 时暂时依赖 IB?
  • 关于如何处理如上所述的项目结构,是否有不同的方法?
0 投票
0 回答
197 浏览

android - 我可以重新定位预构建的 ARM 二进制文件(静态库)吗?

我有一个静态库 (.a),可直接在 ARM Cortex-M0+ (arm-none-eabi) 上运行。是否可以以某种方式修改它或我的工具链,以便我可以在运行 android (arm-linux-androideabi) 的 Cortex-A7 上使用该库?我无权访问它的构建源。

该库不与硬件外围设备交互。它最初是使用飞思卡尔 ARM 编译器构建的;我正在使用 gcc。

当我尝试链接它时,我得到了

对库中的每个目标文件重复几次。

0 投票
1 回答
949 浏览

eclipse - 将现有 *.bin 文件添加到 gnu arm eclipse 中的项目

我有 2 个独立的项目:引导加载程序和应用程序。

在构建引导加载程序项目时,我在 Eclipse 的构建后步骤中添加了以下行: arm-none-eabi-objcopy -S -O binary "${ProjName}.elf" "${ProjName}.bin", 所以 * .bin 文件已创建。

现在,在应用程序项目中,我想在指定地址添加这个 *.bin 以生成一个 *.hex/*elf 文件。

arm-none-eabi-objcopy 可以用于此目的吗?或者是否有链接器命令可以在链接过程中组合来自引导加载程序项目的现有 *.bin 文件和来自应用程序项目的 *.o 文件?

0 投票
1 回答
3271 浏览

c++ - scons 错误“sh:1:arm-none-eabi-gcc:未找到”

在我的项目中,我同时使用 Scons 和 Makefile 来构建。当我使用 Makefile 时它工作得很好,但当我使用 Scons 时出错

“arm-none-eabi-gcc -g -mthumb -mlittle-endian -mcpu=cortex-m4 -mcpu=cortex-m4 -Wl,--start-group -lm -lc -Wl,--end-group -Wl ,--gc-sections -Wl,-Map,main.map -Tstm32_flash.ld -Wl,--entry=Reset_Handler -DSTM32F407xx -DUSE_STDPERIPH_DRIVER -I/home/minhtan/Downloads/STM32F4-Discovery_FW_V1.1.0/Utilities/STM32F4-发现 -I/home/minhtan/Downloads/STM32F4-Discovery_FW_V1.1.0/Libraries/CMSIS/包含 -I/home/minhtan/Downloads/STM32F4-Discovery_FW_V1.1.0/Libraries/CMSIS/ST/STM32F4xx/包含 -I/home/ minhtan/Downloads/STM32F4-Discovery_FW_V1.1.0/Libraries/STM32F4xx_StdPeriph_Driver/inc "-I/home/minhtan/Downloads/led(make file moi)" main.c -c -o main.o
sh: 1: arm-none- eabi-gcc: not found
scons: [main.o] Error 127
scons: building 由于错误而终止。”

0 投票
2 回答
1703 浏览

c - newlib 中的 malloc() :在一次大失败分配后是否会浪费内存?

我正在为 STM32F7 编写嵌入式软件,我的 libc 是 newlib-2.4.0.20160527。

我已经实现_sbrk()如下:

然后,当我执行以下操作时:

一切正常(即 malloc 两次返回非零值)。

但是当我执行以下操作时(出于测试目的):

每个malloc()失败,甚至malloc(0)(即,__BKPT()从未达到)。所以,实际上堆上没有分配的内存(我没有得到任何内存,mem != 0所以我什free()至什么都做不到),也没有可用的内存。

我希望malloc()每一次都失败sz > 0x40000并为每一次成功sz <= 0x40000(假设在每一次free()之后都可以正常工作malloc())。

我错过了什么,或者这是 newlib 中的错误或预期行为?

0 投票
1 回答
66 浏览

terminal - mac上STM320f的arm-none-eabi-as错误

在终端中,我尝试将汇编代码转换为目标代码

汇编消息:

错误:无法打开 main.o 进行读取:没有这样的文件或目录

并删除我正在操作的那个目录中的 sample.s。