【发布时间】:2020-08-15 20:03:50
【问题描述】:
使用arm-none-eabi-gcc 工具链。
在使用链接器中的选项-nostdlib 进行 ARM 开发期间,我可以使用 unsigned int、int 等。
但是对于uint8_t,我必须使用--specs=nano.specs,因为它们在newlib 标准库中。
那么unsigned int是如何解决的呢?
我一直在使用 IDE 进行 ARM 开发。因此不知道底层的东西是如何工作的。 当我遇到这些疑问时,正在阅读一些裸机教程。
谢谢。
【问题讨论】:
-
However for uint8_t i have to use --specs=nano.specs, since they are in the newlib standard library.这几乎不相关。nano.specs与小版本的 newlib 库链接(例如,printf中的%lld不起作用)。你可以链接完整版,你可以只#include <stdint.h>文件,甚至在你的代码中做typedef __UINT8_TYPE__ uint8_t(见ex.arm-none-eabi-gcc -dM -E - </dev/null | grep -i uint8)。 -
编译器作者选择 int、long、short、char 的大小,因为它们是基本的变量类型。然后他们必须制作 stdint.h 以匹配广告的大小,例如 uint32_t。不期望同一目标的两个不同编译器(或版本)具有相同的定义。所以要么检查编译器的大小,要么使用 stdint.h (并检查大小)
-
我希望你不是说 uint8_t 是在 newlib 库中定义的,那将是一个错误。只有编译器作者知道,它是编译器提供的头文件而不是库提供的头文件......除非......库指向或复制或以其他方式使用编译器提供的头文件。
标签: c arm embedded bare-metal