Предсказуемость
Используются конструкторы вместо трейтов-расширений (C-CTOR)
Все периферийные устройства, для которых HAL добавляет функциональность, должны быть обернуты в новый тип, даже если для этой функциональности не требуются дополнительные поля.
Следует избегать реализации трейтов-расширений для исходного периферийного устройства.
Методы помечены #[inline] там, где это уместно (C-INLINE)
Компилятор Rust по умолчанию не выполняет полное встраивание через границы крейтов. Поскольку приложения для встраиваемых систем чувствительны к неожиданным увеличениям размера кода, #[inline] следует использовать для направления компилятора следующим образом:
- Все "маленькие" функции должны быть помечены
#[inline]. Что считать "маленьким" — субъективно, но, как правило, все функции, которые компилируются в последовательности инструкций с однозначным количеством, считаются маленькими. - Функции, которые с высокой вероятностью принимают константные значения в качестве параметров, должны быть помечены
#[inline]. Это позволяет компилятору вычислять даже сложную логику инициализации во время компиляции, если входные данные функции известны.