Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: FreeRTOS: семафоры,очереди...
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы
Bender
Решил вот использовать ось.
Допустим есть девайс вот такой конфигурации:
кнопка, индикатор(I2C), память(I2C),часы(I2C).
Требуется:
1. отображать на индикаторе текущее время
2. при нажатой кнопке вывести дополнительно сообщение на индикатор
3. записать в память время нажатия/отпускания кнопки

Значит, есть ресурс I2C, который должен быть в монопольном доступе некоторое время
есть событие - нажатие/отпускание кнопки и есть флаг состояния кнопки

Как бы это получше реализовать во FreeRTOS с помощью ее сервисов?

Я думаю так:
Создаем семафор I2C
Создаем задачи:
а) вывод на индикатор, период, допустим 0.2сек
б) опрос часов период, допустим 0.5сек
в) опрос кнопки, период, допустим 0.05сек
г) запись в память

Если задача работает с I2C, то она захватывает семафор. Остальные ждут его освобожения
А вот как дальше организовать взаимодействие, не представляю...
Как задаче записи сообщить про событие нажатия? как при выводе на индикатор получить состояние кнопки?
Demeny
Цитата(Bender @ Aug 24 2006, 13:03) *
Если задача работает с I2C, то она захватывает семафор. Остальные ждут его освобожения
А вот как дальше организовать взаимодействие, не представляю...
Как задаче записи сообщить про событие нажатия? как при выводе на индикатор получить состояние кнопки?

Дык стандартно. Послать сигнал. В программу вывода ставим обработчик сигнала, а программа обработки нажатия кнопки посылает сигнал. Или то же самое с помощью сообщений (SendMessage - GetMessage или что-то в этом роде, в зависимости от ОС)
slabnoff
Цитата(Demeny @ Sep 5 2006, 14:14) *
Цитата(Bender @ Aug 24 2006, 13:03) *

Если задача работает с I2C, то она захватывает семафор. Остальные ждут его освобожения
А вот как дальше организовать взаимодействие, не представляю...
Как задаче записи сообщить про событие нажатия? как при выводе на индикатор получить состояние кнопки?

Дык стандартно. Послать сигнал. В программу вывода ставим обработчик сигнала, а программа обработки нажатия кнопки посылает сигнал. Или то же самое с помощью сообщений (SendMessage - GetMessage или что-то в этом роде, в зависимости от ОС)

В FreeRTOS нет понятия программа/процесс, а только задача. Но в целом все правильно.

А вообще здесь можно и без ОС обойтись вполне. Все решается в пределах одной задачи и прерываний I2C и по кнопке (или по таймеру, опрашивающему кнопку). Ось может только упростить передачу информации из прерываний.
Сергей Борщ
Цитата(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
Obi
Господа, а где можно почитать про это все дело по подробнее и с самого начала smile.gif ?
slabnoff
Цитата(Obi @ Oct 19 2006, 21:25) *
Господа, а где можно почитать про это все дело по подробнее и с самого начала smile.gif ?


У Лабросса. Там конечно про uCOS-II, но на FreeRTOS все легко экстраполируется (на сайте FreeRTOS тоже кое-какие азы описываются).
sensor_ua
Взгляни на мануал по embOS - http://www.segger.com/pub/manuals/embOS_Generic_rev2.pdf
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.