2015-10-05 59 views
2

我正在开发一个使用GCC交叉编译器(arm-none-eabi-)的ARM架构(裸机)程序。为了保持代码小,我使用“--specs = nano.specs”链接器标志来链接到newlib-nano。 我碰到的问题是有在printf的“长长”的支持,即:newlib-nano long long support

long long int val = 1234; 
pritnf("%lld", val); 

添加“-u _printf_float”链接标志不解决这个问题。它确实会使代码大小增加9kB,但它似乎只是增加了浮点支持,没有“长期”的支持。链接到newlib(删除“--specs = nano.specs”标志) - 虽然解决了问题 - 是不可接受的,因为它会导致代码大小增加46kB。

是否有任何标志只重新启用newlib-nano版本的printf的“long long”支持?

+0

考虑打印出来的十六进制代替,这可以通过简单地分成两个'uint32_t's和打印这些来完成。 – unwind

+0

这对于打印'-1234LL'没有多大帮助。 –

回答

1

不知道很多关于newlib纳米(是一些叉?),但也newlib有很长很长符不默认支持的,所以可能是这将有助于:

  • 重新配置你--enable-newlib-io-long-long newlib标志
  • 重建
+1

newlib-nano是newlib的精简版。根据这个:[link](https://github.com/32bitmicro/newlib-nano-1.0/blob/master/newlib/README.nano),'enable-newlib-io-long-long'标志被忽略。这似乎回答了我的问题 - 要么使用newlib,要么在newlib-nano的情况下不可能使用long long。 –

+0

@JacekŚlimok:或者也许你可以将newlib的'long long'支持移植到newlib-nano。 –

+0

@KeithThompson我会看看这个,看看它需要多少努力来移植这个单一的部分。然而,我假设'enable-newlib-io-long-long'被明确提及为被忽略的原因。 –