использование fopen на плате не OS Arm

Я работаю на Arm Board, не поддерживающем ОС. Я проверил свой код на С ++ на своем настольном компьютере. Он работает нормально. Теперь мне нужно выгрузить файл bin, сгенерированный после кросс-компиляции кода с использованием arm-elf-g ++.
Мой код открывает файл для чтения его содержимого с помощью команды fopen, но будет ли это работать на плате, так как нет ОС, значит, нет файловой системы?

Спасибо
vid09

2

Решение

Почему вы открываете файл, чтобы прочитать его — что это за данные?

Вы можете предоставить его встроенному коду другими способами. Например

  • скомпилировать его как константу
  • считайте его через какой-то порт (возможно, через последовательный порт или Ethernet — хотя последний — большая работа без O / S!) и используйте хост для отправки данных.
2

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

Обычный способ использования файлового ввода / вывода в baremetal — для отладки. В этом случае это обычно реализуется с использованием semihosting.

CS3 предназначен для поддержки плат без операционной системы. к
разрешить такие функции, как open а также write работать без операционной системы
поддержка, semihosting функция поддерживается в сочетании с
отладчик.

При включенном полухостинге эти системные вызовы переводятся в
эквивалентные вызовы функций в вашей хост-системе. Вы можете использовать только эти
вызовы функций при подключении к отладчику; если вы попытаетесь использовать их
при отключении от отладчика вы получите аппаратное обеспечение
исключение.

Очевидно, что это не будет работать в автономном режиме.

Тем не менее, вы можете сделать необходимые вызовы самостоятельно. Это зависит от того, какую библиотеку времени выполнения C вы используете; Вот учебник о том, как сделать это для Newlib: http://www.embedded.com/electronics-blogs/industry-comment/4023922/Embedding-GNU-Newlib-Part-2

1

Ваша целевая библиотека, скорее всего, будет иметь заглушку fopen (); неработающее пустое определение функции, которое необходимо заменить на рабочую версию. Это известно как retargetting. Без ретаргетинга ваш код может хорошо компилироваться и связываться, но вызов fopen () и любые другие стандартные вызовы ввода-вывода, включая printf (), например, ничего не сделают.

То, как вы перенаправляете, зависит от стандартной библиотеки C вашего компилятора. В Keil / RealView вы можете изменить один из предоставленных примеров retarget.c и связать его с вашим проектом. Если вы используете Newlib (обычно используется с голыми металлическими цепочками инструментов GNU), вам нужно изменить или переопределить Системные вызовы окурки. Другие наборы инструментов будут иметь аналогичные методы.

Однако это все довольно академично, поскольку для открытия файла необходима файловая система, которая, в свою очередь, требует наличия какой-либо формы носителя с данными на нем, которые можно прочитать как файл. Все это можно сделать в «голой железной» системе, но это требует как дополнительного оборудования, так и программного обеспечения. Увидеть FatFs например. Например, добавить карту SD или MMC через интерфейс SPI относительно просто в аппаратном плане. Конечно, вы могли бы внедрить RAM-диск или файловую систему на встроенном Flash-устройстве, но вы все равно должны подумать, как в первую очередь перенести данные в такую ​​файловую систему.

1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector