Я тут немного оптимизировал код, расскажу, что помню:
Оптимизировал процесс чтения по внешнему прерыванию: проверка на окончание принятого пакета теперь происходит в 8 раз реже не при каждом принятом бите, а байте.
Так как в программах пользователя не требуется использование функции проверки контрольной суммы, убрал ее из заголовочного файла, сделал статичной, после сборки выяснилось, что компилятор предпочел уже использовать ее как inline, бинарник сократился и я принял решение добавить это ключевое слово в объявление функции.
Inline-функцию обработки принятого пакета сделал статичной, компилятор сократил бинарник.
Некоторые переменные вместо 16-битного типа int заменил на unsigned char (uint8_t), переполнения возникать не должно, бинарник сократился.
Функции проверки готовности к отправке изменил возвращаемое значение на 8-битный беззнаковый тип uint8_t, так как использование 16-битного int более расточительно для передачи значения от 0 до 4 :)
Добавил проверку приоритета сообщения в функции отправки и ограничил как положено от 1 до 4.
Для оптимизации пришлось переназначить объявления этапов отправки в заголовочном файле, чтобы можно было использовать инкремент.
Ну и много комментариев переделал, ветвлений и т.п. В объявлениях функций заменил unsigned char на короткий псевдоним uint8_t.
Еще много мелочей о которых уже не помню...
Вообщем в итоге при том же Makefile в результате бинарник демо-проекта сократился на 17% с 1990 байт в оригинале до 1652 байт в моем варианте.
Просьба протестировать как следует, дать оценку и возможно выполнить слияние кода.
Для сборки использовался официальный Atmel AVR 8-bit Toolchain 3.5.3 (июнь 2016) (GCC 4.9.2).
Я тут немного оптимизировал код, расскажу, что помню:
Вообщем в итоге при том же Makefile в результате бинарник демо-проекта сократился на 17% с 1990 байт в оригинале до 1652 байт в моем варианте. Просьба протестировать как следует, дать оценку и возможно выполнить слияние кода. Для сборки использовался официальный Atmel AVR 8-bit Toolchain 3.5.3 (июнь 2016) (GCC 4.9.2).