Уже не такой простой диспетчер с динамической очередью задач для PIC12F/16F

Доброго времени суток. Опять я со своими ассемблером и ПЫК16. Вот наконец-то, как и запланировал, дописал свою «Недо ОС» на ассемблере под Пики. Кому интересно, с чего начиналось — могут почитать здесь: we.easyelectronics.ru/Gnusmas/prostoy-dispetcher-s-fiksirovannoy-ocheredyu-zadach-dlya-pic16.html

В этой итерации я шагнул гораздо дальше. Настолько дальше, что следующей итерацией должно уже быть что-то на Си. Но я все же прошу заглянуть адептов асcемблера и высказать свое 'фе' по поводу качества и функционала моего кода, чтобы я был твердо уверен, что выжал все, что можно было.
Из того что усовершенствовано по сравнению с предыдущим проектом:
  1. Очередь задач из фиксированной переделана в динамическую, в виде кольцевого буфера, размер котрого задеться в файле настройки ОС
  2. Проект «Недо ОС» разбит на несколько файлов: файл «ядра», файл задач, файл настройки ОС, файл макросов общего употребления
  3. Все возможные настройки системы упакованы в макросы и по максиму автоматизированы. То есть расчитано, что Вы зайдете в файл настройки системы Nedo_OS_v1.4.h, внесете в него необходимые Вам параметры ОС, а дальше все само подстроится и создастся. Вам останется только написать обработчик для каждой Вашей задачи.
  4. Исправление банальных ляпов вроде переписи содержимого таймера в конце, а не начале обработчика прерывания, что устраняет неравномерность возникновения прерываний при разном количестве таймеров, и прочие мелочи.

Сейчас проект (8 светодиодов мигают каждый со своей частотой) занимает 269 слов памяти программ и 52 байта ОЗУ, влазя таким образов во все 12F и 16F камни. На 16F84 остается 755 слов памяти программ (3/4 доступного объема) 16 байт ОЗУ (1/4 доступного обьема). Как видим, добавление очереди задач в виде кольцевого буфера и номера целевой задачи для каждого таймера съело львиную долю ОЗУ. Замечания и пожелания приветствуются.

Простой диспетчер с фиксированной очередью задач для PIC16

Меня посетила мысль, что если ты хочешь хорошо освоить какое-то семейство МК, надо собственноручно, на его ассемблере, написать для него какую-то управляющую систему. В идеале кооперативную ОС, по для начала можно и что-то попроще, типа местного динамического диспетчера. Я уже написал такой для MCS-51, но сейчас не о нем. Последнее время что-то внутри меня постоянно подталкивало изучить ПИКи. Наверное, чтобы можно было самому сравнить их с тем что я уже знаю (а знаю я уже MCS-51 немного, и AVR еще меньше), а не читать форумные баталии аля «AVR vs PIC». В процессе написания своей первой псевдо-ОС под ПИКи я немного разобрался с ними, и уже чувствую себя гораздо увереннее. Под катом результат работы — диспетчер с фиксированной очередью задач и службой на 8 (можно меньше) программных таймеров. Данный проект независимо (каждый со своей частотой) мигает 8 светодиодами на порту В. Проект занял 223 слова, что составляет 22% от доступного объема PIC16F84A. Критика приветствуется. В будущем планируется добавление динамической очереди задач для избавления от приставки «псевдо» перед ОС.


Читать дальше