Entry tags:
Операционные системы изобрели не от хорошей жизни
Изобрёл очередную недо-RTOS. Вернее, она не совсем RT, потому что специфика задачи позволяет иметь задержку реакции аж в несколько секунд, но если вдруг понадобится - разогнать до "почти реального времени" не проблема.
Задача классическая, как раз для встраиваемой системы - опросить энное количество разнообразных датчиков, ответить на команды или послать сообщения, привести исполнительные устройства в соответствующие состояния и, тащемта, на этом всё. А, ну ещё лампочками помигать или дуделкой подудеть, если что. В процессе решения задачи пришлось написать собственный "шедулер" (примитивный, но всё-таки), "очередь исполнения" (FIFO с приоритетами) и прочая, прочая.
В будущем функционал будет только наращиваться, поэтому сначала написал огромную (по меркам платформы, на которой всё это крутится - 8-битный МК с 4 кБ оперативки) библиотеку, поддерживающую всё, что на плате есть (и кое-что ещё). И теперь, используя мой расчудесный шедулер и эту библиотечку, добавлять новые функции стало проще простого. Например, обнаружилось, что собственный преобразователь питания этой штуковины начинает серьёзно греться, если включить несколько нагрузок - но я мудро предусмотрел возможность подключения кулера и термодатчика. Добавил в список заданий проверку температуры (датчик приклеил прямо на чип преобразователя) и вуаля! Перегрелись выше определённого порога - включаем кулер, остыли ниже другого - отключаем, чтоб зря энергию не тратить. И автоматицки сообщаем наверх, что у нас тут жарковато.
Команды могут приходить из разных портов, все они сливаются в одну очередь и единообразно обрабатываются. Т.е. не надо путаться, откуда что пришло - структура программы такова, что ответы автоматически уходят туда, откуда был запрос.
Предстоит ещё накалякать нечто вроде DHCP - протокольчик, который автоматически пронумерует контроллеры, сидящие на одной шине и изначально про свои адреса ничего не знающие.
Задача классическая, как раз для встраиваемой системы - опросить энное количество разнообразных датчиков, ответить на команды или послать сообщения, привести исполнительные устройства в соответствующие состояния и, тащемта, на этом всё. А, ну ещё лампочками помигать или дуделкой подудеть, если что. В процессе решения задачи пришлось написать собственный "шедулер" (примитивный, но всё-таки), "очередь исполнения" (FIFO с приоритетами) и прочая, прочая.
В будущем функционал будет только наращиваться, поэтому сначала написал огромную (по меркам платформы, на которой всё это крутится - 8-битный МК с 4 кБ оперативки) библиотеку, поддерживающую всё, что на плате есть (и кое-что ещё). И теперь, используя мой расчудесный шедулер и эту библиотечку, добавлять новые функции стало проще простого. Например, обнаружилось, что собственный преобразователь питания этой штуковины начинает серьёзно греться, если включить несколько нагрузок - но я мудро предусмотрел возможность подключения кулера и термодатчика. Добавил в список заданий проверку температуры (датчик приклеил прямо на чип преобразователя) и вуаля! Перегрелись выше определённого порога - включаем кулер, остыли ниже другого - отключаем, чтоб зря энергию не тратить. И автоматицки сообщаем наверх, что у нас тут жарковато.
Команды могут приходить из разных портов, все они сливаются в одну очередь и единообразно обрабатываются. Т.е. не надо путаться, откуда что пришло - структура программы такова, что ответы автоматически уходят туда, откуда был запрос.
Предстоит ещё накалякать нечто вроде DHCP - протокольчик, который автоматически пронумерует контроллеры, сидящие на одной шине и изначально про свои адреса ничего не знающие.