Как я могу заставить Keil RealView ARM MDK (для Cortex-M3) работать с ОБА ретаргетингом (в USART) и STL? - PullRequest
2 голосов
/ 22 января 2012

Я искал обходной путь в течение нескольких дней.Пока что не повезло.

Что я использую:

  • STM32F103VET6
  • J-Link
  • RealView MDK-ARM v4.12
  • Код на C и C ++ в моей программе

До того, как я включил в свой код STL, все работает нормально.Я могу переназначить printf() и scanf() на USART без проблем.Это делается путем включения Retarget.c, поставляемого с RV-MDK, и написания моих собственных 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$$, предлагаемый здесь (я думаю, что 'мы перепробовали все, что они предоставили!)
  • Используйте «MicroLIB».Это EPIC FAIL.
  • Копание в поставляемых заголовках STL.Я не нашел ссылки на какие-либо stdio.И, поскольку я могу #include <cstdio> и все еще иметь ретаргетинг, я не думаю, что даже ссылка будет иметь какое-то значение.

Я подозреваю, что решение как-то связано с направлением компоновщика, но пока я не понял ... Это так расстраивает!

...