2011-01-05 2 views
3

Привет Я пытаюсь выяснить, что есть и не возможно с C++ на BrewMP.Какие части C++ не поддерживаются с помощью Brew (MP)?

ли кто-нибудь из первых рук опыт использования C++ с Brew, в частности BrewMP, и могу сказать, что им удалось получить эти вещи работают на устройстве, не слишком много хлопот:

  • статических переменных/функций
  • шаблоны
  • исключения
  • литье т.д.

ответ

2
  1. Ранее в Brew3.X глобальные и статические переменные не поддерживались. Однако в Brew MP есть инструмент ELF2MOD. При этом вы можете использовать глобальные и статические переменные.
    См свой путь SDK, такие как:
    C: \ Program Files \ Qualcomm \ Brew MP SDK \ Toolset 7,10 Rev 10.0.1489821 \ бин

    Если глобальные или статические данные не-POD (С ++ объект, который должен вызывать конструктор класса C++), пожалуйста, не используйте его. См https://developer.brewmp.com/forum/using-static-variables-classes-0

  2. Standard C Library (STDC Lib, или с выполнения) абсолютно запрещены в BrewMP, такие как MemSet и Sprintf. Причина. В общем модуле процесса с функцией main() те из среды выполнения C уже инициализируются автоматически до вызова кода пользователя. Файлы BrewMP mod (mod1) динамически загружаются и связаны. Не существует подходящего времени для инициализации вызова, и эти MOD не должны вызывать инициализацию инициализации C в отдельности.

  3. Функции шаблона C++ и классы шаблонов: экземпляр кода шаблона генерируется во время компиляции, и им не нужна инициализация кода времени загрузки и времени выполнения. Они могут безопасно использоваться в устройстве.

  4. C++ Исключения: я не тестировал его. В параметрах компилятора по умолчанию ARM исключение не включено. И исключениям необходимо включить C++ RTTI.

  5. C++ cast: dynamic_cast - большая проблема, так как ему нужна поддержка идентификации времени выполнения во время выполнения и проверка типа во время выполнения. Другие роли, такие как static_cast, reinterpret_cast и const_cast, являются лишь подсказкой для компилятора для проверки во время компиляции.

+0

, так как точка 2, вам нужно перегрузить оператор new и удалить с помощью MALLOC() и FREE(), предоставленных . – MikimotoH

+0

Спасибо за подробный ответ, я ценю его. –

1

Были некоторые проблемы с:

  • виртуальных или абстрактных методов
  • Статическая и глобальная переменная поддержки
  • Статическая инициализация глобальных объектов

Большинство из них могут быть решены с помощью пользовательских post-linker. Это сработало для меня, надеюсь, он подходит и вам.

+0

Спасибо. Что вы подразумеваете под механизмами компоновки сообщений? Можете ли вы представить какой-либо конкретный пример? –