Забавлявахме се през празниците с участието си в Hackaday 1kB Challenge - състезание за създаване на устройство, което използва 1kB или по-малко изпълним код.
Избрахме да пренесем „шрифт с малък пиксел“ и драйвер за LCD, който проектирахме преди в C. Шрифтът има много малък отпечатък (около 500 байта), но с нашия драйвер и обработка на текст полученият размер на компилирания файл е близо 3–4KB.
Така че ние го пренаписваме в асемблиране.
Днес дори малките вградени устройства имат много памет, така че това е добро напомняне какво се случва под капака. Като разработчици на софтуер напоследък бяхме разглезени от практически неограничено дисково пространство, облачна изчислителна мощност и мощни скриптови езици. Ние също приемаме основните библиотеки за даденост. Това предизвикателство ни принуждава да разбираме всяко програмно извикване и да бъдем креативни, за да спестим място.
Трябва да разделите? Е, нашият микроконтролер не поддържа разделяне. Добре, че делим на 8 – това е същото като три операции за десен преместване.
Модулна операция? Също голям. Но ние можем да използваме творчески оператора AND.
Изчистване на SRAM от 0 до 504 (0x01F8)? Можем да спестим няколко думи в програмата, ако пожертваме SRAM и преминем към 512 (0x0200).
Можете да следите проекта в Hackaday:
Или вижте кода в Github: