如何使Keil RealView ARM MDK(用于Cortex-M3)与BOTH重定向(到USART)和STL一起工作?

时间:2012-01-22 07:44:52

标签: c++ stl arm crt cortex-m3

我一直在寻找解决方法好几天。到目前为止没有运气。

我用的是什么:

  • STM32F103VET6
  • 的J-Link
  • RealView MDK-ARM v4.12
  • 我的程序中的C和C ++代码

在我的代码中包含STL之前,一切正常。我可以毫无问题地将printf()scanf()重新定位到USART。这是通过包含RV-MDK附带的Retarget.c并编写我自己的sendchar()getkey()来完成的。 Retarget.c有一行代表#pragma import(__use_no_semihosting_swi),要求链接器使用重定向版<cstdio>,而不是调用半主机实现。

但是当我开始#include <deque>deque<int> buffer;时,它就不再起作用了。似乎链接器已经确定<deque>依赖于半主机<cstdio>,这与我刚才写的重定向代码冲突。

我尝试过但失败了:

  • 摆脱__no_semihosting_swi,而是尝试覆盖_sys_open()。它不起作用,因为半主机<cstdio>依赖于已导出此符号的目标文件。
  • 使用$super$$$sub$$语法建议here(我想我已尝试过他们提供的所有内容!)
  • 使用“MicroLIB”。这是EPIC FAIL。
  • 深入了解提供的STL标头。我找不到任何stdio的引用。而且,既然我可以#include <cstdio>并且仍然有重新定位,我认为即使参考也没有任何区别。

我怀疑解决方案与指向链接器有关,但到目前为止我还没想到......这太令人沮丧了!

0 个答案:

没有答案