|
|
  |
FreeRTOS: семафоры,очереди..., Разъясните мне, что для чего нужно |
|
|
|
Aug 24 2006, 09:03
|

Частый гость
 
Группа: Участник
Сообщений: 123
Регистрация: 28-06-05
Из: Тула
Пользователь №: 6 361

|
Решил вот использовать ось. Допустим есть девайс вот такой конфигурации: кнопка, индикатор(I2C), память(I2C),часы(I2C). Требуется: 1. отображать на индикаторе текущее время 2. при нажатой кнопке вывести дополнительно сообщение на индикатор 3. записать в память время нажатия/отпускания кнопки
Значит, есть ресурс I2C, который должен быть в монопольном доступе некоторое время есть событие - нажатие/отпускание кнопки и есть флаг состояния кнопки
Как бы это получше реализовать во FreeRTOS с помощью ее сервисов?
Я думаю так: Создаем семафор I2C Создаем задачи: а) вывод на индикатор, период, допустим 0.2сек б) опрос часов период, допустим 0.5сек в) опрос кнопки, период, допустим 0.05сек г) запись в память
Если задача работает с I2C, то она захватывает семафор. Остальные ждут его освобожения А вот как дальше организовать взаимодействие, не представляю... Как задаче записи сообщить про событие нажатия? как при выводе на индикатор получить состояние кнопки?
|
|
|
|
|
Oct 19 2006, 08:09
|
Частый гость
 
Группа: Свой
Сообщений: 82
Регистрация: 26-09-05
Пользователь №: 8 955

|
Цитата(Demeny @ Sep 5 2006, 14:14)  Цитата(Bender @ Aug 24 2006, 13:03)  Если задача работает с I2C, то она захватывает семафор. Остальные ждут его освобожения А вот как дальше организовать взаимодействие, не представляю... Как задаче записи сообщить про событие нажатия? как при выводе на индикатор получить состояние кнопки?
Дык стандартно. Послать сигнал. В программу вывода ставим обработчик сигнала, а программа обработки нажатия кнопки посылает сигнал. Или то же самое с помощью сообщений (SendMessage - GetMessage или что-то в этом роде, в зависимости от ОС) В FreeRTOS нет понятия программа/процесс, а только задача. Но в целом все правильно. А вообще здесь можно и без ОС обойтись вполне. Все решается в пределах одной задачи и прерываний I2C и по кнопке (или по таймеру, опрашивающему кнопку). Ось может только упростить передачу информации из прерываний.
|
|
|
|
|
Oct 19 2006, 14:26
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(Bender @ Aug 24 2006, 12:03)  Решил вот использовать ось. Допустим есть девайс вот такой конфигурации: кнопка, индикатор(I2C), память(I2C),часы(I2C). Требуется: 1. отображать на индикаторе текущее время 2. при нажатой кнопке вывести дополнительно сообщение на индикатор 3. записать в память время нажатия/отпускания кнопки
Я думаю так: Я бы возможно решал так: семафор на I2C семафор на индикатор задача опроса часов задача опроса кнопки. Задача опроса часов: захватить семафор I2C прочитать часы отпустить I2C захватить LCD вывести время отпустить LCD ждать 0.5с Задача опроса кнопки: ждать 0.05с читать кнопку если нажали захватить LCD вывести надпись отпустить LCD захватить I2C прочитать часы записать в память отпустить I2C
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Oct 20 2006, 13:45
|
Частый гость
 
Группа: Свой
Сообщений: 82
Регистрация: 26-09-05
Пользователь №: 8 955

|
Цитата(Obi @ Oct 19 2006, 21:25)  Господа, а где можно почитать про это все дело по подробнее и с самого начала  ? У Лабросса. Там конечно про uCOS-II, но на FreeRTOS все легко экстраполируется (на сайте FreeRTOS тоже кое-какие азы описываются).
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|