Текущий архив: 2003.06.30;
Скачать: CL | DM;
Вниз
Операционная система это очень Найти похожие ветки
← →
Soft © (2003-06-10 15:33) [0]Разрабатываю свою ОС для микроконтроллера 8051. У меня возникло несколько вопросов:
1) Какая ОС для этого удобнее кооперативная или с вытеснением?
2) Как (логически) реализовать приоритеты для задач?
3) Как реализать(логически) обработку "критических участков" для создания ОС "жесткого" реального времени.
Очень буду благодарен за ответы и ссылки по теме.
ЗЫ
Пока разбираюсь с Сишными кодами текущих операционок, но они не под 8051:( Остались здесь еще Настоящие Программисты?:)
← →
Danilka © (2003-06-10 15:40) [1]а шо такое ос для микроконтроллера?
я-то всю жизнь думал что микроконтроллер служит для определенной задачи а управляется программой записаной в нем, какая программа - зависит от задачи.
и никаких ос.
← →
Домарощинер © (2003-06-10 15:46) [2]это очень "просто" ;)
← →
Danilka © (2003-06-10 15:49) [3]просто, есть один друг, который на хлеб зарабатывает всякими устройствами, которые собирает на микроконтороллерах (правда, какие-то пики, атмели, незнаю 8051) у него никаких операционок нет. :))
хотя он, хвастался: какой-то свой быстрый протокол обмена данными между ними изобрел, когда делал сигнализацию для гаражного массива, но это не операционка.
← →
Soft © (2003-06-10 15:51) [4]>>Danilka © (10.06.03 15:40)
>>а шо такое ос для микроконтроллера?
Это такая программа, которая занимается опросом и в/в данных для устройств подключенный к МК, а также расстановкой приоритетов, буферизацией и выделением памяти.
Можно конечно сделать это все одной программой, но попробуйте удержать в голове 100Кб Сишного кода. Глюки вам обеспечены.
>>я-то всю жизнь думал что микроконтроллер служит для определенной задачи а управляется программой записаной в нем, какая программа - зависит от задачи.
и никаких ос.
Микроконтроллер по функциональности ничем не отличается от того же Пентиума, единственно, команд поменьше и работает медленнее.
Иногда в одном МК(процессоре) работает множество задач. Пример мобилка.
С Уважением к Вашему "глубокомысленному" профессионализму Soft:)
← →
HolyGlory (2003-06-10 16:01) [5]А зачем писать мультизадачную? Это самая большая твоя ошибка. Для 51-ого похоже что-то писал. Лучше сделай обычный загрузчик (тип памяти? Кол-во? Откуда загружаются?) и загружай по-очереди. Если нужно две задачи параллельно - ставь еще один контроллер. Вообще что за задача стоит? Если нужна помощь - обращайся к NetBreaker"у. netbreaker@mail.ru (что-то давно его здесь не видно :(:(:()
← →
Soft © (2003-06-10 16:07) [6]>>HolyGlory (10.06.03 16:01)
>>А зачем писать мультизадачную?
Да... и зачем ставить этот глюкавый Виндовс если есть такой стабильный ДОС.
← →
pasha676 (2003-06-10 16:09) [7]
> Можно конечно сделать это все одной программой, но попробуйте
> удержать в голове 100Кб Сишного кода. Глюки вам обеспечены.
Си-шного? Да на фига.Во-первых писать лучше на асме. По любому. Во вторых на фига все держать в голове? Для этого существут подпрограммы и макросы. Понятие "операционка" для микроконтроллера весьма условна, т.к. задачи выполняемые на данной железке, как правило делаються для данного оборудования (схемы) и не несут универсальности. Конечно если ты делаешь универсальный комп вместе с материнкой на МК... Но опять же пример приведенный тобой (мобилка) - это не ОС, имхо. Это на конкретной плате, стоят конкретные девайсы, а МК ими рулит. ОС это назвать можно - но с натяжкой. А уж о таком что на МК работает несколько задач... Впервые слышу. Там все же будет более применим термин - "крутиться основной цикл, а по прерываниям запускаються подзадачи". Все это вполне успешно реализуется на асме. Си в микроконтроллере (опять же имхо) - не есть хорошо, ибо ресурсы часто жрет, по чем зря. А к памяти и к быстродействию программ на таких железках требования куда как более жесткие. Создавать же на МК многозадачные системы реального времени - не самая лучшая идея.
← →
N197 (2003-06-10 16:14) [8]>Разрабатываю свою ОС для микроконтроллера 8051.
Гиблое дело.
← →
Soft © (2003-06-10 16:16) [9]>>pasha676 (10.06.03 16:09)
Задачу можно рассматривать как отдельную программу с независимым алгоритмом. Весь обмен информацией между задачами может быть организован с помощью сервисов ОС. Хотя, это и не обязательно.
Предположим, мы хотим, чтобы наш контроллер "одновременно" работал с ADC, опрашивал состояние кнопок, мигал лампочками и управлял каким-нибудь устройством. Вот такой набор программ, работающих "одновременно", и напрашивается на перенос в многозадачную RTOS. Осталось "лишь" оформить эти программы в качестве задач. А за "одновременность" должна отвечать ОС, для этого ее и создают. Правда, сохранив массу нервных клеток и времени (значит и денег), мы не увеличим ни мощность нашего контроллера, ни его память. Скорее наоборот. И если контроллер не справляется с одной задачей, он точно не справится сразу с несколькими. В общем, ОС это "всего лишь" инструмент, и только опыт работы с ним подскажет оптимальный способ его использования.
← →
pasha676 (2003-06-10 16:17) [10]2N197
Подобные вещи делаються регулярно и сотнями и тысячами (а то и больше) в день... Только вот операционками их никто не называет.
← →
pasha676 (2003-06-10 16:29) [11]
> Предположим, мы хотим, чтобы наш контроллер "одновременно"
> работал с ADC, опрашивал состояние кнопок, мигал лампочками
> и управлял каким-нибудь устройством.
Все правильно. МК. На него заведены прерывания от устройств - ADC, кнопки и т.д. На прерывания раставляються (или они распаиваються на железке - все зависит от архитектуры проца) приоритеты. Еще заводиться по необходимости, несколько прерываний по таймеру. Ну и все это доблестно крутиться в основном цикле программы. Никаких парралельных процесов - на клавиши, на лампочки и прочую дребедень ставить не надо. Интерапты и таймеры на то в контроллерах и ставяться, чтоб работать можно было.
Грамотно построенная прога на прерываниях - даже 5МГц тактовой хватит на очень и очень многое количество таких медленных устройств, как лампочки и кнопочки или даже дисплейчик.
← →
uw © (2003-06-10 16:55) [12]У меня есть маленькая RTOS для 8XC552 из семейства 8051. В ней задачи, семафоры, обработка прерываний, Sleep... Использую несколько лет. Написана на ассемблере. В приложениях на С крутится задач по 12. Могу выслать.
Существует RTOS uCOS. Про ее исходники на С и разные кряки можешь узнать на этой хорошей конференции:
http://www.telesys.ru/wwwboards/mcontrol/index.shtml
← →
Li (2003-06-10 17:02) [13]А вообще как ты представляешь себе многозадачную ОС под i8051, вроде бы у него не было никаких команд для аппаратной поддержки такого изврата. Кроме того есть ли вообще для него компилятор с СИ, я сколько его программировал использовал асм. Кстати наиболее простой способ узнать как пишутся под него подобия операционки это слить код с "оценочного модуля" (в университете должен быть такой), а потом сидеть и тупо его дизассемблировать.
← →
Soft © (2003-06-10 17:03) [14]>>uw © (10.06.03 16:55)
>>У меня есть маленькая RTOS для 8XC552 из семейства 8051. В ней задачи, семафоры, обработка прерываний, Sleep... Использую несколько лет. Написана на ассемблере. В приложениях на С крутится задач по 12. Могу выслать.
Буду очень благодарен.
← →
uw © (2003-06-10 17:41) [15]>Li (10.06.03 17:02)
>А вообще как ты представляешь себе многозадачную ОС под i8051
Если это вопрос ко мне, то я просто взял и написал многозадачное ядро. Переключаю контекст задач по тикам, событиям или прерываниям. Под контекстом здесь понимается регистры общего назначения, содержимое стека. Все это сохраняю в хипе. Время переключения зависит от количества задач, где-то в пределах 1 мсек. Для моих целей это вполне удовлетворительно. Компиляторов хватает.
← →
Ru © (2003-06-11 10:43) [16]у меня создалось впечатление, что вы не представляете о чем говорите
← →
Странник © (2003-06-11 12:43) [17]да нет смысла делать многозадачную ОС для PLC. нафиг она нужна.
посмотри как сделано это на разных промышленных контроллерах:
- есть список задач, которые необходимо запускать с заданной частотой, обычно 1-2 частотных диапазона, именуемых "сканом".
- все запускается последовательно.
1. опрос датчиков, ввод-вывод и прочая организационно-подготовительная лабуда.
2. последовательный запуск задач с учетом приоритетов и частоты сканов.
- усё. goto 1.
← →
uw © (2003-06-11 13:40) [18]Есть контроллер, построенный на базе единственной однокристаллки 80CX552. С определенной периодичностью ~5 сек опрашиваются аналоговые сигналы, с другой периодичностью ~0.5 сек опрашиваются дискретные сигналы. Часть сигналов берется еще с 1-2 удаленных контроллеров (от нескольких до сотен метров). Все это обрабатывается. Расчет для каждого цикла занимает несколько секунд. Основной контроллер по прямым проводам (ПП) связан с контроллером верхнего уровня (на 10-20 км). Он же связан по прямым проводам с несколькими подчиненными контроллерами. Есть датчик сигнала свой/чужой, который разработчики контроллера сделали не с интерфейсом i2c, а с жестким последовательным.
Создаю такие задачи:
1) IdleTask - работает, когда ничего не надо делать;
2) MainTask - она производит инициализации и создает все остальные задачи, потом ждет команды с верхнего уровня по ПП, эти команды поставляет следующая задача;
3) SlaveSuppTask - поддерживает прием информации, приходящей сверху по ПП;
4) MessSuppTask - поддерживает посылку информации наверх по ПП;
5) AskRetrParamsTask - следит за изменениями параметров настройки ретранслятора;
6) ProcSlavesTask - работает с подчиненными объектами;
7) AskPointParamsTask - следит за изменениями параметров настройки технологического объекта (ТО);
8) AnalogsCollectionTask - собирает аналоговые данные;
9) DiscretsCollectionTask - собирает дискретные данные;
10) ProcParsTask - обрабатывает технологические данные;
11) RcvAuxCodesTask - поддерживает получение данных от вспомогательных контроллеров;
12) StrangeTask - работает с датчиком свой/чужой.
Можно было бы немного уменьшить количество задач, но и так хорошо. Каждая задача сравнительно проста, работают по большей части асинхронно.
← →
Rul (2003-06-11 16:22) [19]1. Построить схему:
1.1. МК
1.2. Разводка для подкючения устройств:
1.2.1. Память:
1.2.1.1. Изначально выбрать какую память использовать:
1.2.1.1.1. Внутренняя - очень маленький объем ОЗУ и ПЗУ
1.2.1.1.2. Внешняя - объем ОЗУ ограничен, ПЗУ - можно извращаться
1.2.1.2. Возможность наращивания памяти:
1.2.1.2.1. Тип памяти
1.2.1.2.2. Ограничения объема
1.2.2. Дисплей (LCD без вариантов) - осталось выбрать размер (количество строк и символов в строке)
1.2.3. Клавиатура (можно и от обычного компьютера взять)
1.2.3.1. Поддерживаемые языки (например русский и английский)
1.2.3.2. Количество клавиш
1.2.4. Набор портов ввода-вывода:
1.2.4.1. Последовательный (RS-232c - поддерживаемый по умолчанию и вроде как единственный)
1.2.4.2. Паралельный (?) - можно вывести один из портов (8бит)
1.2.4.3. Собственное извращение
1.3. Разводка для подключения дополнительный устройств (возможно хватит портов ввода-вывода)
2. Стандартизация:
2.1. Протоколы обмена данными между МК и переферией
2.2. Протоколы обмена данными между двумя МК (логично предположить что это RS-232c)
2.3. Стандарты хранения файлов:
2.3.1. Есть ли необходимость в FAT?
2.3.1.1. Место расположения
2.3.1.2. Формат
2.3.2. Если на пункт 2.3.1. ответ отрицательный, то, явно файл будет записываться в виде последовательности байт предваряемые заголовком. В этом случае необходимо предусмотреть формат заголовка и спецсимволы начала и конца файла
2.3.3. Есть ли необходимость паковать файлы для уменьшения занимаемого объема:
2.3.3.1. Алгоритм сжатия
2.3.3.2. Момент сжатия:
2.3.3.2.1. После записи
2.3.3.2.2. В реальном масштабе времени
2.4. Стандарты файлов:
2.4.1. Исполняемого (надо подумать. с точки зрения объема памяти, возможно, лучшим выбором будет интрерпретируемые файлы)
2.4.2. Текстовый (возможно, также, поддержка тегов)
2.4.3. Графический (если дисплей текстовый, то это будет текстовый файл с графикой в виде псевдокодов)
2.4.4. Звуковые см ниже
3. Возможности. С учетом тактовой частоты 12 МГц сильно не разгуляешься:
3.1. Количество задач (можно ограничиться 8-ю и переключаться между регистрами)
3.2. Хранение данных о количестве задач и данных о том, какие задачи выполняются
3.3. Метод переключения между задачами (размер кванта времени для задачи):
3.3.1. Задаче выделяется приоритет, от которого зависит размер кванта
3.3.2. Квант для всех задач одинаков, кроме задач вызванных по прерыванию
3.4. Графика см. Приложение 1 - возможно в схеме необходимо предусмотреть видеобуфер, в котором часть информации будет постоянной (графический интерфейс), а часть постоянно обновляться
3.5. Звук см. Приложение 2 - можно встроить минизвуковую плату
Приложение 1
Видеобуфер:
блок памяти, емкость которого равна числу символов (если дисплей не символьный будет сложнее)
Приложение 2
Положение 1: На таком устройстве мозможна либо мидизвуковая карта либо низкокачественная карта.
Вариант 1: Миди
довольно прост:
1. генераторы-синтезаторы частоты:
1.1. Мультивибраторы с цифровой регулировкой частоты (регулировать конденсаторы или резисторы)
1.2. Задающий генератор с максимальной частотой, после него цифровые делители частоты
2. система вывода звука:
2.1. минидинамик (выковырять из Тетриса либо разобрать диктофон за 50$)
2.2. пищалка от часов
Вариант 2:
1. 6-ти или 8-ми разрядный АЦП и ЦАП
2. хранение:
2.1. напрямую в память
2.2. применять алгоритм сжатия:
2.2.1. после записи
2.2.2. в реальном масштабе времени
3. дополнительно возможна система по Варианту 1
После того как начерчена схема, разработаны стандарты, предусмотрена вся переферия можно думать о создании ОС.
В данном случае ОС для i8051 это специализированная программа, которая производит вызов подпрограмм пользователя и регламентирует время их работы, а также выполняет сервисную работу.
← →
uw © (2003-06-11 20:37) [20]>Ru © (11.06.03 16:22)
>После того как начерчена схема, разработаны стандарты, предусмотрена вся переферия можно думать о создании ОС.
На самом деле делается так. Для конкретного процессора (однокристаллки) пишется ядро реального времени. В обязательном порядке предусматриваются задачи (процессы) и некоторые сущности, позволяющие синхронизировать задачи и разделять ресурсы (для этой цели хватает семафора). Реализуются следующие обязательные основные функции:
1) создание задачи;
2) изменение приоритета задачи;
3) создание семафора;
4) ожидание у семафора;
5) посылка элемента в семафор;
6) sleep;
7) планировщик задач;
8) механизм обработки прерываний (в том числе - системного таймера).
Писать это можно на ассемблере, а можно и на языке высокого уровня (с ассемблерными вставками). В свое время, когда мне не были доступны RTOS, я написал на ассемблере ядро для 8080, 8086, 80C552. При этом объем кода составлял всего примерно 1500 строк. Когда появился Turbo Vision, я отказался от ядра для 8086, т.к. там и так были нормальные крючки для многозадачности. А с нормальными Виндами, естественно, выбросил и Turbo Vision. А вот для очень хорошей однокристаллки ATmega128 я написал ядро на С - всего 440 строк и строк 30 на ассемблере.
А вот вся работа с периферией - это драйверы, не имеющие отношения к ядру; все это уже зависит от особенностей контроллера, и ничем по сути не отличается от написания прикладных модулей.
И уж конечно ядро не вызывает никаких подпрограмм пользователя - оно о них просто ничего не знает. Наоборот, прикладные задачи пользуются ресурсами ядра, т.е. вызывают функции ядра. А ядро имеет список дескрипторов задач и раздает процессорное время, исходя из приоритетов и состояний задач по некоторому алгоритму, реализованному в планировщике задач. Я предпочитаю пользоваться событийным механизмом, а не раздачей квантов времени.
Примерно так делаю я. Создатель одной из самых распространенных RTOS для микроконтроллеров - uCOS - подошел к решению более глобально. Он написал ядро на С и предусмотрел крючки для его портирования на любые процессоры. Для этого нужно написать пару модулей на ассемблере, реализовав переключение контекстов задач и обработку запроса на прерывание системного таймера. Все. А вот драйверы на различную периферию, о которой он ничего не знает, - это совсем другая история.
Я говорю это, собственно, для того, чтобы подчеркнуть, что эта вещь - сравнительно простая. На первое ядро я потратил недели 2-3. На последующие варианты я уже тратил времени порядка недели (на С еще меньше), а потом писал десятки программ с использованием этих модулей. И так привык, что уже и не пользуюсь чем-то типа uCOS.
← →
Ru © (2003-06-12 09:43) [21]>uw © (11.06.03 20:37)
допустим 8080 еще можно сравнить с 8051, но 8086 :)
к тому же 8080 явно хуже 8051. 8051 это однокристальная микроЭВМ, в то время как для 8080 нужна допплата и довольно не маленькая.
← →
Soft © (2003-06-12 11:28) [22]>>uw © (11.06.03 20:37)
>>На самом деле делается так. Для конкретного процессора (однокристаллки) пишется ядро реального времени. В обязательном порядке предусматриваются задачи (процессы) и некоторые сущности, позволяющие синхронизировать задачи и разделять ресурсы (для этой цели хватает семафора). Реализуются следующие обязательные основные функции:
А где бы это можно было бы увидеть в виде графиков и рисунков. Тоесть структуры ядра и взаимодействие их в виде диаграмы. По исходникам довольно сложно разбиратся, особенно, если почти без документации.
← →
uw © (2003-06-12 13:07) [23]Удалено модератором
Примечание: Личная переписка
← →
Soft © (2003-06-12 13:14) [24]Удалено модератором
Примечание: Личная переписка
← →
Soft © (2003-06-12 13:19) [25]Спасибо за uCOS.
>>Удалено модератором
>>Примечание: Личная переписка
Ну и что? Правила созданы для того чтоб их нарушать:)
Страницы: 1 вся ветка
Текущий архив: 2003.06.30;
Скачать: CL | DM;
Память: 0.56 MB
Время: 0.018 c