реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> scmRTOS - первые шаги, как правильно расшарить ресурсы?
sonycman
сообщение Aug 7 2010, 23:11
Сообщение #1


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Доброго времени суток!

Вот стало мне нечего делать, и потянуло попробовать в первый раз какую нибудь операционку.
Остановился пока что на scmRTOS - с виду очень простая и красиво написанная система.

Скачал порт на STM32 - немного поправить и должно заработать на LPC1768.

Думаю, как правильно работать разными процессами с такими ресурсами, как FatFs диск на карте памяти и ЖКИ.

Интересно, можно ли в последней 0.08 версии FatFs просто установить флаг конфигурации REENTRANT и использовать в функциях sync_obj() мьютекс OS для синхронизации?
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Aug 8 2010, 06:04
Сообщение #2


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(sonycman @ Aug 8 2010, 05:11) *
Вот стало мне нечего делать, и потянуло попробовать в первый раз какую нибудь операционку.
Остановился пока что на scmRTOS - с виду очень простая и красиво написанная система.

Отличный выборsmile.gif
Цитата
Интересно, можно ли в последней 0.08 версии FatFs просто установить флаг конфигурации REENTRANT и использовать в функциях sync_obj() мьютекс OS для синхронизации?

Конечно можно. Мутекс проще создать статически:
Код
OS::TMutex ff_mutex;

extern "C" int ff_cre_syncobj(BYTE, int*)    { return true; }
extern "C" int ff_del_syncobj(int)        { return true; }
extern "C" int ff_req_grant(int)        { ff_mutex.Lock(); return true; }
extern "C" void ff_rel_grant(int)        { ff_mutex.Unlock(); }


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
sonycman
сообщение Aug 8 2010, 12:05
Сообщение #3


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(AHTOXA @ Aug 8 2010, 10:04) *
Конечно можно. Мутекс проще создать статически:

Спасибо! Значит, я на правильном пути smile.gif.

А как обычно реализовывают работу с ЖКИ под ОС?
Тоже городить мьютексы? Или проще отдать эту задачу одному единственному процессу, а другие будут, в случае надобности, слать сообщения с нужными данными?

И по поводу сообщений - как происходит с ними работа?
Я так понимаю, что сообщение - просто некий контейнер, который выполняет функцию промежуточного хранения или транспортировки данных между процессами.
Может ли сообщение затираться другим, в случае, если процесс-отправитель имеет высокий приоритет, а получатель - низкий и просто не получает времени на прочтение?

ЗЫ: извиняюсь, оказывается, на форуме есть соответствующая операционным системам тема.
Наверное, стоит перенести топик туда? smile.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 8 2010, 12:41
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(sonycman @ Aug 8 2010, 16:05) *
ЗЫ: извиняюсь, оказывается, на форуме есть соответствующая операционным системам тема.
Наверное, стоит перенести топик туда? smile.gif

Moderator: Перенес.
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Aug 8 2010, 13:50
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Цитата(sonycman @ Aug 8 2010, 15:05) *
Может ли сообщение затираться другим, в случае, если процесс-отправитель имеет высокий приоритет, а получатель - низкий и просто не получает времени на прочтение?


scmRTOS - система с приоритетным планировщиком. Соответственно, вы должны предусмотреть, чтобы высокоприоритетный процесс на захватил систему навсегда. Вообще подход должен быть таким - оповестил нужный процесс тем или иным образом, что он должен чего-то сделать, он это что-то быстренько сделал и отдал управление. Кому процессу какой приоритет задать должны вы решить, исходя из вашей задачи.
Go to the top of the page
 
+Quote Post
sonycman
сообщение Aug 8 2010, 15:05
Сообщение #6


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



А если ситуация такая: высокоприоритетная задача занята работой, и в процессе может отправить одно или несколько однотипных сообщений низкоприоритетной задаче.
Но передача управления произойдёт не сразу, как будет отправлено любое сообщение, а только когда работа закончится.

Нет смысла отдавать время низкоприоритетной задаче, когда полно более важной работы.

Тут, наверное, нужно организовывать очередь сообщений, только с одним не получится...

Ещё не совсем разобрался с организацией прерываний.

Надо ли обрамлять макросом TISRW все подряд обработчики прерываний, или только те, в которых используются сервисы ОС?

И имеет ли значение приоритет прерывания SYS_TICK, на котором висит планировщик?
Ведь на кортексах по умолчанию работают вложенные прерывания.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Aug 8 2010, 17:03
Сообщение #7


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(sonycman @ Aug 8 2010, 18:05) *
А как обычно реализовывают работу с ЖКИ под ОС?
Тоже городить мьютексы? Или проще отдать эту задачу одному единственному процессу, а другие будут, в случае надобности, слать сообщения с нужными данными?

Оба варианта имеют право на существование. Например, один процесс мониторит заряд батарейки, и рисует соответствующую пиктограмму, а второй процесс - пользовательский интерфейс (опрашивает кнопки и рисует меню). В этом случае наверное достаточно мутекса (области рисования независимы). В более общем случае можно назначить отдельный процесс, и к нему - очередь сообщений.

Цитата
И по поводу сообщений - как происходит с ними работа?
Я так понимаю, что сообщение - просто некий контейнер, который выполняет функцию промежуточного хранения или транспортировки данных между процессами.

Да.
Цитата
Может ли сообщение затираться другим, в случае, если процесс-отправитель имеет высокий приоритет, а получатель - низкий и просто не получает времени на прочтение?

Да, может. Чтобы этого не произошло, нужно отправлять сообщения более приоритетному процессу. Либо использовать очередь сообщений.

Цитата(sonycman @ Aug 8 2010, 21:05) *
А если ситуация такая: высокоприоритетная задача занята работой, и в процессе может отправить одно или несколько однотипных сообщений низкоприоритетной задаче.

Тогда очередь, да. Например, OS::channel<>.
Цитата
Надо ли обрамлять макросом TISRW все подряд обработчики прерываний, или только те, в которых используются сервисы ОС?

Только те, где сервисы.

Цитата
И имеет ли значение приоритет прерывания SYS_TICK, на котором висит планировщик?
Ведь на кортексах по умолчанию работают вложенные прерывания.

Да, его приоритет минимальный, это гарантирует, что он выполняется после всех прерываний (не является вложенным). (Приоритет задаётся в OS_Target_asm.S)


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
sonycman
сообщение Aug 8 2010, 19:08
Сообщение #8


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(AHTOXA @ Aug 8 2010, 21:03) *
Да, его приоритет минимальный, это гарантирует, что он выполняется после всех прерываний (не является вложенным). (Приоритет задаётся в OS_Target_asm.S)

Спасибо за помощь!
С меня пиво beer.gif
Буду продолжать осваивать.

К сожалению, одновременно приходится осваивать IAR (до этого работал только в Кейле), поэтому всё получается совсем не быстро sad.gif
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Aug 8 2010, 19:49
Сообщение #9


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(sonycman @ Aug 9 2010, 01:08) *
С меня пиво beer.gif

smile.gif
Цитата
К сожалению, одновременно приходится осваивать IAR

Хм. Я думал, что GCC. Потому что для LPC17xx под IAR есть примерчики, и ничего допиливать не надоsmile.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
sonycman
сообщение Aug 8 2010, 20:07
Сообщение #10


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(AHTOXA @ Aug 8 2010, 23:49) *
Хм. Я думал, что GCC. Потому что для LPC17xx под IAR есть примерчики, и ничего допиливать не надоsmile.gif

Ну я же не буду пустую ось, как в этих примерах, запускать.
Да и камень у меня другой. Плюс заготовка проекта под Кейл.
Вот и переношу sad.gif

Кстати, вопрос не по теме, конечно, но вдруг кто подсобит.

Привык работать с исходником в среде SlickEdit - нравится подсветка цветом и, особенно, автоподстановка переменных\имён регистров и всего и вся в этом роде.

Набил пару первых знаков имени - а дальше просто выбираешь из раскрывшегося списка.
Очень удобно работать со структурами или классами - все члены сразу видно, ничего не надо вспоминать, два нажатия на кнопку - и длинное имя функции\объекта\переменной на месте.
Не представляю, как люди могут работать в простых редакторах без автоподстановки (типа голых кейла или иара) - ужас просто. smile.gif

Но не всё так радужно - ИАРовские макросы под LPC17xx вида NAME ## _bits слик не понимает, к сожалению.
Приходится тащить с собой более простой "и понятный" LPC17xx.h из кейла.

Может, есть какой редактор, который и с этими макросами (##) прекрасно справляется?

Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Aug 9 2010, 07:59
Сообщение #11


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(sonycman @ Aug 9 2010, 02:07) *
Может, есть какой редактор, который и с этими макросами (##) прекрасно справляется?


Eclipse? smile.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 9 2010, 08:17
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (sonycman @ Aug 8 2010, 23:07) *
Но не всё так радужно - ИАРовские макросы под LPC17xx вида NAME ## _bits слик не понимает, к сожалению.

Ну самое правильное на эти уродские IARовские прибамбасы наплевать раз и навсегда, ибо писать подобную фигню:
CODE
    S0SPCR_bit.CPOL = 1;     
    S0SPCR_bit.CPHA = 1;        
    S0SPCR_bit.BITENABLE = 1;
    S0SPCR_bit.BITS   = 9;    
    S0SPCR_bit.MSTR = 1;

даже если-бы она была переносима, вместо ОДНОЙ строчки неразумно. А если написаны нормальные дефиниции битов, то ими в отличии от этой красатульки, можно пользоваться ВСЕГДА.
А во-вторых слик, как и эклипсе, в исходниках - можете и написать под себя smile.gif.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
sonycman
сообщение Aug 9 2010, 08:41
Сообщение #13


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(AHTOXA @ Aug 9 2010, 11:59) *
Eclipse? smile.gif

Да, надо в очередной раз попробовать очередную версию Эклипса smile.gif

Цитата(zltigo @ Aug 9 2010, 12:17) *
Ну самое правильное на эти уродские IARовские прибамбасы наплевать раз и навсегда, ибо писать подобную фигню:
Код
    S0SPCR_bit.CPOL = 1;     
    S0SPCR_bit.CPHA = 1;        
    S0SPCR_bit.BITENABLE = 1;
    S0SPCR_bit.BITS   = 9;    
    S0SPCR_bit.MSTR = 1;

даже если-бы она была переносима, вместо ОДНОЙ строчки неразумно.

В случае работы с несколькими битами одного регистра конечно, не стоит пользоваться такими макросами.
Получается отвратно, учитывая, что volatile вообще не оптимизируется.

Но в случае единичных битов - нет проблем.

Всё равно понравился ИАРовский хидер под LPC1766, в отличие от сырого кейловского, в котором вообще отсутствуют определения битов sad.gif
Go to the top of the page
 
+Quote Post
sonycman
сообщение Aug 9 2010, 20:53
Сообщение #14


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Вроде получается, контроллер сконфигурировал и пример запустил, сейчас потихоньку адаптирую под многозадачность интерфейс ЖКИ и т.д.

А как поступать с вызовами библиотечных функций типа sprintf(), memalloc() и т.д.?
Неужели их тоже надо обрамлять мьютексами?
Или критич. секциями?

Работу с кучей вернее всего придётся защитить, а вот всякие printf()?

Что-то сразу не получилось найти инфу по этому поводу sad.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 9 2010, 21:15
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(sonycman @ Aug 10 2010, 00:53) *
Работу с кучей вернее всего придётся защитить, а вот всякие printf()?

printf() придется в любом случае, вы же не хотите получить кашу в stdout? Всякие *s*printf() - в зависимости от реентерабельности.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 07:48
Рейтинг@Mail.ru


Страница сгенерированна за 0.01514 секунд с 7
ELECTRONIX ©2004-2016