За исключением исключительных обстоятельств (см. Примечание), организация вашего кода не окажет влияния на конечный продукт. (содержание кода, очевидно, другое дело)
Итак, помня об этом, вы должны организовать свой код так же, как и в любом другом проекте.
С учетом вышесказанного довольно типично следующее:
Если это процессор, над которым вы работали раньше или над которым вы будете работать в будущем, вы обычно захотите сохранить выделенный уровень аппаратной абстракции, который может быть разделен между проектами в будущем. Обычно этот модуль содержит такие элементы, как процедуры для управления любыми uarts, таймерами и т. Д.
Обычно разумно поддерживать набор платформо-зависимого кода для инициализации и настройки, который выполняет всю конфигурацию и инициализацию до того момента, когда ваш руководитель вступит во владение и запустит ваше приложение. Он также будет включать в себя подпрограммы hal для конкретной платформы.
Администратор / приложение, вероятно, поддерживается как отдельный модуль. Весь аппаратный код должен быть скрыт в халате (как упомянуто выше).
Разделив ваш код таким образом, вы также получаете возможность компилировать и запускать ваше приложение в виде симуляции на совершенно другой платформе, просто заменив код, специфичный для аппаратного обеспечения, подпрограммами, имитирующими аппаратное обеспечение.
Это может быть полезно для модульного тестирования и отладки, а также для решения проблем алгоритмического характера.
Исключительные обстоятельства, которые могут быть наложены необычными ограничениями компилятора. например. Я встречал некоторые компиляторы, которые ожидают, что все подпрограммы обработки прерываний будут скомпилированы в одном объектном файле.