Mar 27, 2014 11:06
Балуюсь иногда программами на МК и в очередной раз борюсь с внутренним противоречием. Противоречие очень сильное, прямо разрывающее на части.
МК имеет ограниченный обьем памяти для программ. Еще более ограниченный обьем RAM. И поэтому надо следить за их использованием, как минимум за оперативкой.
С одной стороны, я считаю обьектно-ориентированный код намного более удобочитаемым. В то же время я считаю компиляторы умными, а процессоры (компьютерные) мощными, чтобы из кода взять только то, что нужно, т.е. сделать ассемблерный код более-менее оптимальным.
С другой стороны, код на С, при всей его нечитаемости, все же оптимальнее С++. Почему? Не понимаю и не хочу понимать. Я хочу печеньку и спать.
Но самый оптимальный (маленький и быстрый) код получается, если забить на модульность и писать спагетти. Почему так получается - я понимаю, но выхода из ситуации не вижу. Это происходит из-за отсутствия точек передачи данных между модулями. Минус один уровень абстракции.
Банальный пример. Что получается всегда на МК, независимо от того, что делается? Да, это - часы :) Так вот, часы с несколькими будильниками очень легко описать обьектами. Класс "часы", класс "будильник", "часы" заводит Х "будильников", автоматический callback будильником функции, в которой в основной программе отрабатывается действие.
Что делается в С? Код часов, вызывающий код будильника, вызывающий callback-и, все это на HAL кристалла.
Что делается в спагетти? Пофиг на callback - там, где считается время, проверяем будильники, тут же дергаем ножками действия (HAL? нет, не слышал). Быстро, запутано, зато на 50% меньше паняти жрет. Хрен разберешься, но зато влезает в кристалл. А HEX из чистого обьектного кода (в котором нет ничего лишнего, прошу заметить!) в кристалл не влезает, хоть тресни.
Что делать? Кто виноват? ©
arduino,
Размышления,
Электроника,
Философия,
Программизмы