Забавлявахме се през празниците с участието си в Hackaday 1kB Challenge - състезание за създаване на устройство, което използва 1kB или по-малко изпълним код.

Избрахме да пренесем „шрифт с малък пиксел“ и драйвер за LCD, който проектирахме преди в C. Шрифтът има много малък отпечатък (около 500 байта), но с нашия драйвер и обработка на текст полученият размер на компилирания файл е близо 3–4KB.

Така че ние го пренаписваме в асемблиране.

Днес дори малките вградени устройства имат много памет, така че това е добро напомняне какво се случва под капака. Като разработчици на софтуер напоследък бяхме разглезени от практически неограничено дисково пространство, облачна изчислителна мощност и мощни скриптови езици. Ние също приемаме основните библиотеки за даденост. Това предизвикателство ни принуждава да разбираме всяко програмно извикване и да бъдем креативни, за да спестим място.

Трябва да разделите? Е, нашият микроконтролер не поддържа разделяне. Добре, че делим на 8 – това е същото като три операции за десен преместване.

Модулна операция? Също голям. Но ние можем да използваме творчески оператора AND.

Изчистване на SRAM от 0 до 504 (0x01F8)? Можем да спестим няколко думи в програмата, ако пожертваме SRAM и преминем към 512 (0x0200).

Можете да следите проекта в Hackaday:



Или вижте кода в Github: