arm — C ++ на голой плате Встроенная система

Я пытаюсь портировать библиотеку, которая написана на C ++ в нашей встроенной системе. Встроенная система написана на языке программирования C на платформе ARM. Я думал, что возможно, что я мог сделать это. Язык программирования C ++ намного сложнее, чем C.

Библиотека C ++ требует, чтобы среда работала правильно? Если я это сделаю, то у меня могут возникнуть проблемы.

  1. Модель ООП C ++ требует специальной системы управления памятью. [New, delete, smart pointers]
  2. Мне кажется, что обработка исключений в C ++ — это своего рода миф. Насколько я знаю, обработка исключений WinCE для C ++ требует поддержки со стороны ARM-ядра / ядра.
  3. Другие функции, такие как информация о типе времени выполнения

Не могли бы вы поделиться со мной своим опытом? Спасибо Вам большое.

0

Решение

Многое зависит от вашей библиотеки, но на встроенных платформах вы обычно отключаете rtti и обработку исключений. C ++ обычно требует распределителя памяти и обычно реализуется в терминах malloc. Если это что-то еще, вы должны будете предоставить по умолчанию новый овератор и оператор удаления реализации. Компилятор позаботится обо всем остальном.

1

Другие решения

Из вашего вопроса неясно, пытаетесь ли вы портировать (т.е. переписать программу C ++ на C one) или просто запустить программу C ++ во встроенной среде, и поэтому (почти) не меняете ее. В случае № 1 вы просто должны использовать свой разум. Никаких проблем (за исключением того, что это займет очень много времени …) В случае # 2 это будет нелегко. о чем подумать (я предполагаю, что вы используете gnu toolchain или производные от него, если нет — я просто не знаю, как там обстоят дела)

  • у вас есть загрузчик, который может это сделать? То есть символы шаблона должны обрабатываться особым образом (они слабы), но это будет беспокоить вас, только если вы используете некоторые dylds (динамические библиотеки). Ваш загрузчик должен иметь возможность вызывать глобальные конструкторы и деструкторы. загрузка исключающей информации также должна быть обработана им. Точка, чтобы посмотреть это: https://refspecs.linuxfoundation.org/LSB_3.0.0/LSB-PDA/LSB-PDA/ehframechpt.html
  • Вам нужна среда выполнения C ++. То есть Базовая поддержка языка, просто в качестве отправной точки я предлагаю взглянуть здесь: https://github.com/gcc-mirror/gcc/tree/master/libstdc++-v3/libsupc++
    Это также подразумевает работу функции malloc / free, что-то похожее на mmap.
  • если ваша программа использует потоки, TLS (локальное хранилище потоков, ключевое слово thread_local c ++), обработку файлов и исключения, сложность резко возрастает … и я хотел бы пожелать вам удачи в портировании или использовании полной версии stdlibc ++ (g ++) или libc ++ (лязг)
  • просто подумайте, что вам нужен либо glibc, либо некоторые его микро-замены, такие как https://www.uclibc.org/ В случае, если вы используете какую-то нестандартную подстановку, стоит подумать, как вы будете объединять ее с библиотеками c ++ выше (stdlibc ++ или libc ++, или что-то еще, что вы теоретически можете использовать)

Размышляя о таких вещах выше, я решил, что для моего собственного маленького проекта с голой металлической рукой c ++ — это слишком много, а Force — в C.

0

По вопросам рекламы [email protected]