Архитектура функциональных блоков в C-программе - PullRequest
0 голосов
/ 30 ноября 2018

Я хотел бы создать программное обеспечение, где некоторые функции (или блоки) могут быть запрограммированы позже на моем микроконтроллере без необходимости перепрограммировать все программное обеспечение снова (флэш-память будет выполняться через интерфейс связи, например, SPI).Все новые блоки будут иметь один и тот же API (например, 5 байтов в качестве аргументов, возвращенный 1 байт).

Архитектура памяти будет организована, как показано на этом рисунке: Block architcuture .

В настоящее время я не вижу проблем, если я использую только локальные переменные в своих новых функциях, потому что переменные будут помещены в стек и не будут инициализированы в сегменте .bss.Но если я захочу добавить статическую переменную в свою функцию, у меня возникнут некоторые проблемы, потому что код запуска не инициализирует эту переменную в сегменте .bss (или .data).

Мой вопрос: возможно ли это событие для реализации подобной архитектуры в коде C?Если да, как я могу адаптировать мой код запуска для инициализации моих новых переменных?Как вы думаете, C ++ более уместен для подобных вещей?

Большое спасибо!

1 Ответ

0 голосов
/ 30 ноября 2018

Включите одну функцию в API, которая инициализирует блок.Хост должен вызывать эту функцию перед любыми другими функциями блока.

Кроме того, имейте в виду, что если вы делаете это, вы также должны зарезервировать часть ОЗУ (в дополнение к флэш-памяти) для блока, которыйхозяин не должен трогать.Эти переменные обычно помечаются как __no_init или что-то похожее, чтобы компоновщик даже не пытался сгенерировать данные инициализации для размещения .data.

Язык, который вы используете (C или C ++), скорее всего, не будет иметь значения.Размещение в памяти не является функцией ни одного из языков, но вместо этого выполняется с расширениями компилятора и функциями компоновщика, которые зависят от набора инструментов.

...