ClusterM / clunet

CLUNET library - simple single-wire peer-to-peer network driver for AVR microcontrollers, perfect way to interconnect microcontrollers in your house
The Unlicense
112 stars 21 forks source link

Сделал несколько оптимизаций прошу рассмотреть #4

Closed dudanov closed 8 years ago

dudanov commented 8 years ago

Я тут немного оптимизировал код, расскажу, что помню:

  1. Оптимизировал процесс чтения по внешнему прерыванию: проверка на окончание принятого пакета теперь происходит в 8 раз реже не при каждом принятом бите, а байте.
  2. Так как в программах пользователя не требуется использование функции проверки контрольной суммы, убрал ее из заголовочного файла, сделал статичной, после сборки выяснилось, что компилятор предпочел уже использовать ее как inline, бинарник сократился и я принял решение добавить это ключевое слово в объявление функции.
  3. Inline-функцию обработки принятого пакета сделал статичной, компилятор сократил бинарник.
  4. Некоторые переменные вместо 16-битного типа int заменил на unsigned char (uint8_t), переполнения возникать не должно, бинарник сократился.
  5. Функции проверки готовности к отправке изменил возвращаемое значение на 8-битный беззнаковый тип uint8_t, так как использование 16-битного int более расточительно для передачи значения от 0 до 4 :)
  6. Добавил проверку приоритета сообщения в функции отправки и ограничил как положено от 1 до 4.
  7. Для оптимизации пришлось переназначить объявления этапов отправки в заголовочном файле, чтобы можно было использовать инкремент.
  8. Ну и много комментариев переделал, ветвлений и т.п. В объявлениях функций заменил unsigned char на короткий псевдоним uint8_t.
  9. Еще много мелочей о которых уже не помню...

Вообщем в итоге при том же Makefile в результате бинарник демо-проекта сократился на 17% с 1990 байт в оригинале до 1652 байт в моем варианте. Просьба протестировать как следует, дать оценку и возможно выполнить слияние кода. Для сборки использовался официальный Atmel AVR 8-bit Toolchain 3.5.3 (июнь 2016) (GCC 4.9.2).