Вставка файлів в прошивку

Я вже писав про метод додавання зовнішніх файлів в прошивку мікроконтролера, навіть написав для цієї мети онлайн-конвертер бінарного файлу в c-хедер. Однак є більш простий і зручний спосіб, який надає IAR, та й строго кажучи, будь-який линкер зобов'язаний вміти так робити.

Звичайно, ви вже зрозуміли - ми готові до десантування в параметри линкера.

Одна з найбільш частих моїх завдань за останній час - це збірка прошивки основного девайса, в яку вкомпілена прошивка дочірньої плати. Основний девайс при запуску перевіряє версію прошивки додаткової плати, і якщо вона молодша - оновлює її до свіжої. Тому я повинен включити в основну прошивку бінарний файл з дочірньою прошивкою.

Відкриваємо вікно Options -> Linker -> Input:

Вставка файлів в прошивку

Внизу бачимо опції «Raw binary image». Це саме те, що нам потрібно, вказуємо файл.

Що позначають інші опції?

  • Symbol - глобальний символ коду, це те ім'я, яке буде присвоєно масиву з вмістом файла. Я написав тут batp_fw, тому що це прошивка (firmware) плати BATP.
  • Section - секція линкера, в якій файл буде розміщений. Напишемо тут «fw_section», тільки ще треба буде створити і розмістити цю секцію.
  • Align - вирівнювання по межі байт, півслів або слів. Зазвичай я ставлю тут 4 (вирівняти по межі слів).

Вкажіть ім'я символу в віконці «Keep symbols», інакше символ (і весь масив) буде викинуть лінкером при складанні.

Вставка файлів в прошивку

Збережіть зміни, і підемо правити скрипт линкера. Він лежить в папці проекту, щось на зразок stm32f4xx_flash.icf.

Я додав рядок

Вставка файлів в прошивку

Вставка файлів в прошивку

Ну і вишенька на торті, використання цього шматка пам'яті, як масив в програмі - це дуже ... ні, вкрай просто!

Звичайно, тип даних може бути будь-який зручний вам. Хочете звертатися побайтово - використовуйте char або краще uint8_t, хочете прискорити читання - звертайтеся пословно за допомогою unsigned int або краще uint32_t.

Однак, цей спосіб дає включити тільки один файл, якщо потрібно включити несколько- потрібно ручна правка командного рядка линкера.

Схожі статті