c-newlib nano-printf在嵌入式项目中转换为iprintf



我有一个cortex-m0+的嵌入式项目,我想链接到newlib nano库。我正在学习事物是如何工作的(你需要为某些函数实现存根等(。我已经设法创建了一个构建的工作示例。

源代码:

int main(void)
{
uint32_t i = 0;
printf("Hello Wordl!");
while (1)
{
i += 1;
}
}

我很好奇哪些函数会被调用,想窥探一下幕后,所以我转储了最后一个elf文件,令我惊讶的是,代码调用了";iprintf";而不是printf。

但是,我找不到iprintf get映射到printf的位置。我希望在标题中有一些宏,但我找不到它。

有人能解释一下发生了什么吗?或者告诉我,在哪里可以找到这个";映射";?

有很多

Athttps://github.com/32bitmicro/newlib-nano-1.0/blob/master/newlib/libc/stdio/printf.ciprintfprintf:的别名

_EXFUN(iprintf, (const char *, ...)
_ATTRIBUTE ((alias("printf"))));

nanoprintf()不支持浮点,因此iprintf()变体是相同的函数,而在完整的Newlib中,它们将是不同的实现。

由于它们引用了相同的实现,所以您的elf转储是否将iprintfprintf作为匹配符号发出可能是任意的,也可能是不确定的——这是一个关于链接器符号表是如何形成的问题,以及可能是objdumpnm的行为的问题,无论您使用什么。它们只是同一事物的不同名称。

最新更新