Просто я привык писать на С++. У меня уже алгоритмы паттерны наработаны.
Раньше писал на асме для авр - казалась что вот оно - контроль над регистрами. Не доверял компилятору. Потом, плавно перешел на С, не знаю почему. Устал видимо держать все в голове.
А тут, год назад начал для своей квартиры собирать "приточку" (система автоматического подачи свежего воздуха в квартиру) пробурил дырки в стене (15см в диаметре) сделал воздуховоды, вентилятор, глушитель, калорифер - адская установка получилось!
Но вот чтобы ей управлять - нужен некий "контроллер" который стоит 15тыщь рублей.
Подумал подумал, нафиг нам такой контроллер.
Стал собирать свой.
На борту атмега 128.
Заслонки двигаем сервами мощными.
ЖКИ мониторчег.
Датчики температуры. (улица, болкон, калорифер, квартира)
датчик давления. (отслеживание загрезнения фильтра)
релюхи для включения калорифера и вентилятора
---
Нужно было сделать систему, которя в определенный момент по расписанию включала и выключала вентилятор, шевилила заслонками, в зависемости от температуры включала калорифер. Все это выводить на ЖКИ. ну и нормальный интерфес чтобы был.
Вродебы все просто, задача ясна.
писать стал на "С".
Пошло быстро и легко. Сделал расписание включения устройств. вывод на ЖКИ информации. плавно программа переросла в монстра
--
дальше, когда мне потребовалось зафигачить меню для тонкой настройки приточки... мой мозг поплыл, ибо я не привык процедурно программировать.
--
взяв в пивка, и мое сознание выдало. а не попробывать бы нам С++ залить.
Сказано сделлано. настроен компилятор использую WinAVR среда CodeBlocks
В итоге.
Программа стала читабельней, полностью отделены мухи от коклет. Тоесть железячки в одном месте. логика программы в другом. Никак они между собой не пересекаются. Связь только через интерфес.
Выглядит что то вроде этого:
- Код: Выделить всё
int main(void)
{
cHardware hardware;
hardware.create();
hardware.run();//запуск основоного процесса
return 0;
}
тобишь есть класс железячки в нем классы серв, лсд, клава, индикаторы итд. все они унаследуются от общего класса "прерывания".
Вот код оброботчка гланого цыкла жилизячег
- Код: Выделить всё
void cHardware :: run (void)
{
/* основной цикл программы
*/
while (1)
{
/* сначало передаем управление железу
*/
servo. process();//движение серв
led. process();//динамическая индикация светодиодов
LCD. process();//фоновая отрисовка дисплея
keyBoard. process();
/* отработка логики программы
*/
application.process();
}
}
Все обстрагировался до основания. Наверно всем покажется это дикостью. Но мне нравится!