Вообще тема разделения низкого уровня и средне-высокого в embedded хлебная. Простые низкоуровневые вещи - обработчик прерывания, переключатель задач, mbox - пофиг на чем писать, они простые. Главное не использовать сторонние непонятные либы.
Сложные вещи в варианте С писать с нуля сильно непросто, а при заимствовании кода тянется необходимость использовать какие-то либы и проч, которые принесут с собой неизвестно что. В С++ это особенно весело.
Различные способы модулизации С, придуманные мною с 2005 года, как я появился на Сахаре и Электрониксе, тянут за собой очень большой объем работы по созданию инструментария. Поэтому они так и остались прожектами.
А в гибридном варианте сразу убивается куча зайцев.
Преимущество Оберона кроме компактного синтаксиса и модульности является то, что компилятор с него в ARM, судя по всему, достаточно эффективный. Много отзывов, что 32к в "STM32 чего-то-там" - это много, можно решать относительно сложные задачи.