|
двоичные семафоры для FreeRTOS, двоичные семафоры для FreeRTOS реализованы неэффективно и жрут RAM |
|
|
|
Dec 12 2008, 16:47
|

Участник

Группа: Validating
Сообщений: 27
Регистрация: 12-12-08
Из: Ижевск
Пользователь №: 42 419

|
В FreeRTOS работа двоичного семафора реализована в виде макросов, которые вызвают функции очереди при создании семафора, на самом деле вместо семафора создаётся очередь в 1 элемент размером в 0 байт. Другими словамии Двоичный мемафор -- очередь 1 элементx0 байт В итоге получаеться что почти все элементы структуры Очереди не используются: из двух списков (списки читателей и писателей) используеться только один. Переменные "Счётчик элементов" и "Размер элемента" всегда заведомо равны 1 и 0, так зачем их хранить в памяти???? Не знаю как создатель ОС -- Ричард Барри, но по моему тратить такое ценный ресурс как ОЗУ на двоичный семафор расточительно. В связи с этим я написал свой вариант Двоичных семафоров Он выложен на http://freertos.narod.ru. В нём в качестве двоичного семафора используеться толко Один список то есть typedef xList Semph, что позволяет экономить на памяти, и выигрывает в скорости. Особенно это может быть применено в системах где не нужны очереди сообщений, где нужны только семафоры. Если кого заинтересовало прошу скачивать и пользоваться. Если это чудо зароботает у кого ещё можно и написать что-нибудь тут!
|
|
|
|
|
 |
Ответов
|
Dec 12 2008, 17:10
|

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

|
Цитата(ddiimmaa @ Dec 12 2008, 19:47)  Не знаю как создатель ОС -- Ричард Барри, но по моему тратить такое ценный ресурс как ОЗУ на двоичный семафор расточительно. На самом деле семафор эта такая сущность, задачи которой можно рещить, особенно в микроконтроллерном мире, другими способами. По этой причине реализация его ввиде макроса на очереди позволяет его в первом приближении иметь, напимер при быстром портировании чего либо готового, причем во вполне рабочем и отлаженном варианте. Цитата В связи с этим я написал свой вариант Двоичных семафоров Он выложен на http://freertos.narod.ru. В нём в качестве двоичного семафора используеться толко Один список то есть typedef xList Semph, что позволяет экономить на памяти, и выигрывает в скорости. Особенно это может быть применено в системах где не нужны очереди сообщений, где нужны только семафоры. Систем, где нужны очереди/сообщения переделал за свою жизнь немало, а вот на голых семафорах как-то не приходилось еще задач встречать. Цитата Если кого заинтересовало прошу скачивать и пользоваться. Посмотрю обязательно! P.S. Оказывается раньше уже смотрел  Оталось проникнутся и попробовать живьем, при случае! Цитата(ddiimmaa @ Dec 12 2008, 19:47)  Не знаю как создатель ОС -- Ричард Барри, но по моему тратить такое ценный ресурс как ОЗУ на двоичный семафор расточительно. Пообщаться пробовали  ? Мужик сильно упертый  , на мой взгляд.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Dec 13 2008, 18:03
|

Участник

Группа: Validating
Сообщений: 27
Регистрация: 12-12-08
Из: Ижевск
Пользователь №: 42 419

|
Цитата На самом деле семафор эта такая сущность, задачи которой можно рещить, особенно в микроконтроллерном мире, другими способами. Семафор -- основа основ, а другими способами, это как? -- бесконечный цикл ожидания или система управляемая событиями? -- тогда это как-то не по ОС-овски выходит. Цитата Систем, где нужны очереди/сообщения переделал за свою жизнь немало, а вот на голых семафорах как-то не приходилось еще задач встречать. Ну не знай, по моему первое и самое простое, основа основ -- семафор. Семафор используется для защиты от совместного доступа к одной и той же части устройства или одним и тем же переменным. Зачем мне тут очередь каких-то сообщений? Мне главное чтобы одновременно эту часть устройства не использовали несколько потоков. Даже там, где передаётся информация, можно обойтись семафором, если пара производитель/потребитель( читатель/писатель) в определённый момент времени существует всего лишь одна. То есть никогда нет такого, что два читателя или два писателя. Вот у меня так на атмеге написана работа с АЦП, SPI, TWI, просто и со вкусом: очень даже неплохо работает семафор + указатель на буфер + счётчик и всё тут: приложение заказывает небходимое число байт а прерывание заполняет ему буфер, пока то висит на семафоре. Множно сказать, что я и написал очередь сообщений, ан нет! то как написано на полноценную очередь сообщений не катит, так как и писатель и читатель всего лишь один, и вообще писатель не задача а прерывание. Цитата Пообщаться пробовали :) :( ? Мужик сильно упертый :( , на мой взгляд. Пробовал! Особого энтузиазизьма у него это не вызвало! И у меня немного чешуться руки "утереть ему нос" за это. На мой взгляд тоже упёртый и гнёт свою линию жёстко. У него есть своё вИденье того, как надо развивать своё ПО. Ну чтож влаг ему в руки. Мне кажеться, дело всё в том, что у него двойное лицензирование. И то, что он развивает FreeRTOS под GPL -- это просто хороший рекламный трюк.
|
|
|
|
|
Dec 13 2008, 18:28
|

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

|
Цитата(ddiimmaa @ Dec 13 2008, 21:03)  Ну не знай, по моему первое и самое простое, основа основ -- семафор. Семафор используется для защиты от совместного доступа к одной и той же части устройства или одним и тем же переменным. Ну давайте по порядку, если это какая-то "мелкая" недолго занимемая часть устройства, то для разруливания доступа к ней совершенно незачем дергать ядро системы ввиде семафоров. Тут много более эффективнее критические секциии во всем своем разнообразии, начиная с банальных запретов прерываний. Если это действительно сложное и долго обслуживаемое "устройство", то очень часто его обслуживает свой, действительно сложный процесс - тут уже может быть буферизация, приоритеты, замораживание процессов... Цитата Даже там, где передаётся информация, можно обойтись семафором, если пара производитель/потребитель( читатель/писатель) в определённый момент времени существует Ну зачем-же обходится-то  надо все делать наиболее бескомпромисно  Цитата Вот у меня так на атмеге написана работа с АЦП, SPI, TWI, просто и со вкусом: очень даже неплохо работает семафор + указатель на буфер + счётчик и всё тут: приложение заказывает небходимое число байт а прерывание заполняет ему буфер, пока то висит на семафоре. Множно сказать, что я и написал очередь сообщений, ан нет! то как написано на полноценную очередь сообщений не катит, так как и писатель и читатель всего лишь один, и вообще писатель не задача а прерывание. Ну-ну... Семафор-то зачем? Задача вообще спит "вечным" сном. Обработчик прерывания получив порцию чего-то и положив в буфер поднимет задачу. Так у меня издревле, например, консолька работает - набежала командная стока - поднимаем задачу с ней разбирающуюся. Код static __noreturn void Console( void *param ) { ....... cbuf_parser( &cmd, &cbuf.buf[0] ); // Call Command Line parser vTaskSuspend( NULL ); } }
__irq __arm void uart_isr( void ) {
...... case '\r': xTaskResumeFromISR( handle_Console ); break; ..... }
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
Сообщений в этой теме
ddiimmaa двоичные семафоры для FreeRTOS Dec 12 2008, 16:47   ddiimmaa Цитата(zltigo @ Dec 13 2008, 22:28) Ну-ну... Dec 14 2008, 12:37    zltigo Цитата(ddiimmaa @ Dec 14 2008, 15:37) 1. ... Dec 14 2008, 13:01     ddiimmaa Цитата(zltigo @ Dec 14 2008, 17:01) При э... Dec 14 2008, 14:45      zltigo Цитата(ddiimmaa @ Dec 14 2008, 17:45) ...... Dec 14 2008, 14:53     Terminator Интересная тема
Цитата(zltigo @ Dec 14 2008,... Feb 4 2010, 09:18 Terminator Пример выше и с семафором работать не будет, т.е. ... Feb 5 2010, 05:16 Terminator Простите протупил с семафором будет работать в л... Feb 5 2010, 09:49
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|