Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Предсказуемость

Используются конструкторы вместо трейтов-расширений (C-CTOR)

Все периферийные устройства, для которых HAL добавляет функциональность, должны быть обернуты в новый тип, даже если для этой функциональности не требуются дополнительные поля.

Следует избегать реализации трейтов-расширений для исходного периферийного устройства.

Методы помечены #[inline] там, где это уместно (C-INLINE)

Компилятор Rust по умолчанию не выполняет полное встраивание через границы крейтов. Поскольку приложения для встраиваемых систем чувствительны к неожиданным увеличениям размера кода, #[inline] следует использовать для направления компилятора следующим образом:

  • Все "маленькие" функции должны быть помечены #[inline]. Что считать "маленьким" — субъективно, но, как правило, все функции, которые компилируются в последовательности инструкций с однозначным количеством, считаются маленькими.
  • Функции, которые с высокой вероятностью принимают константные значения в качестве параметров, должны быть помечены #[inline]. Это позволяет компилятору вычислять даже сложную логику инициализации во время компиляции, если входные данные функции известны.