|
Использование семафоров до старта планировщика |
|
|
|
 |
Ответов
|
Mar 17 2016, 09:22
|
Частый гость
 
Группа: Участник
Сообщений: 132
Регистрация: 6-02-16
Из: г. Баку
Пользователь №: 90 364

|
Цитата(turnon @ Mar 17 2016, 12:33)  ... Конечно смысла в семафорах до старта задач нет, до старта задач поток один. Но это унифицированный код, он используется и из задач, и до старта планировщика. Все работало нормально, но вчера вылез HardFault, трассировка привела к этому участку в queue.c:
if( xTaskResumeAll() == pdFALSE ) { portYIELD_WITHIN_API(); }
При вызове portYIELD_WITHIN_API() вылетает в HardFault. А это Ваш код? В смысле Вы так придумали или это код совместной работы в команде? А зачем так извращаться вообще? Мне, можно сказать новичку, итак ясно, что при вызове portYIELD_WITHIN_API() работа перейдет к планировщику. А как оно у Вас до сих пор работало интересно?  Конечно в мире разные бывают любители и пр. Но вот зачем иногда не совсем понятно.
Сообщение отредактировал AleksBak - Mar 17 2016, 09:29
|
|
|
|
|
Mar 17 2016, 09:55
|
Местный
  
Группа: Свой
Сообщений: 340
Регистрация: 17-10-14
Пользователь №: 83 207

|
Цитата(AleksBak @ Mar 17 2016, 13:22)  А это Ваш код? Нет, это код из queue.c, привел его для понимания что вызывает HardFault
|
|
|
|
|
Mar 17 2016, 11:47
|
Частый гость
 
Группа: Участник
Сообщений: 132
Регистрация: 6-02-16
Из: г. Баку
Пользователь №: 90 364

|
Цитата(turnon @ Mar 17 2016, 13:55)  Нет, это код из queue.c, привел его для понимания что вызывает HardFault Да это понятно. Я неправильно выразился - имел ввиду, что код/проект/структуру программы Вы сами придумали или кто-то "заставляет"(совместная команда, код какой задачи закрытый и пр.) именно так поступить (использовать семафоры до старта). Уже тут esaulenka и написал к чему пришел и как получше тут будет.
|
|
|
|
|
Mar 17 2016, 13:41
|
Местный
  
Группа: Свой
Сообщений: 340
Регистрация: 17-10-14
Пользователь №: 83 207

|
Цитата(AleksBak @ Mar 17 2016, 15:47)  Да это понятно. Я неправильно выразился - имел ввиду, что код/проект/структуру программы Вы сами придумали или кто-то "заставляет"(совместная команда, код какой задачи закрытый и пр.) именно так поступить (использовать семафоры до старта). Уже тут esaulenka и написал к чему пришел и как получше тут будет. Сам придумал. Код унифицированный, он не знает что работает из задачи или не из задачи. При работе из задачи ресурс должен быть защищен от одновременного использорвания из нескольких потоков, потому в коде семафоры. Цитата(esaulenka @ Mar 17 2016, 15:17)  Я поначалу кинулся расставлять проверки "планировщик работает" прямо в код операционки (мне кажется, это правильнее, чем тыкать во все возможные места xTaskGetSchedulerState() ), но потом просто перенёс большую часть кода в задачи (до того у меня вся инициализация железа была в main() - осталось только самое необходимое). У меня в main только одноразовые инициализации, требующие много стековой памяти. Чтобы не выделять много стека под каждую задачу. А так тоже все остальное в задачах. Также реализовано отслеживание зависания задач.
|
|
|
|
|
Mar 17 2016, 13:48
|

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

|
QUOTE (turnon @ Mar 17 2016, 15:41)  потому в коде семафоры. Некоторое количество лет назал, где-то в районе появления FreeRTOS 2.0 я начал с ней копаться. До этого имел за плечами работу с операционными сисиемами, как с чужими, так и со своими. Удивило тогда меня, что всякие семафоры и иже с ними сделаны через макросы очередей. Призадумался я да и понял, что семафоры и иже с ними в общем-то есть ЛИШНЯЯ сущность. И с тех пор не пользую. За ненадобностью.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Mar 17 2016, 13:55
|
Местный
  
Группа: Свой
Сообщений: 340
Регистрация: 17-10-14
Пользователь №: 83 207

|
Цитата(zltigo @ Mar 17 2016, 17:48)  Некоторое количество лет назал, где-то в районе появления FreeRTOS 2.0 я начал с ней копаться. До этого имел за плечами работу с операционными сисиемами, как с чужими, так и со своими. Удивило тогда меня, что всякие семафоры и иже с ними сделаны через макросы очередей. Призадумался я да и понял, что семафоры и иже с ними в общем-то есть ЛИШНЯЯ сущность. И с тех пор не пользую. За ненадобностью. А как вы решаете проблему с одновременной работой участка кода из нескольких задач? Конечно в случае если участок кода критичен чтобы к нему не обращались из нескольких задая одновременно.
|
|
|
|
|
Mar 17 2016, 14:13
|

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

|
QUOTE (turnon @ Mar 17 2016, 15:55)  А как вы решаете проблему с одновременной работой участка кода из нескольких задач? Конечно в случае если участок кода критичен чтобы к нему не обращались из нескольких задая одновременно. Как оказалось  , система может строится так, что такая задача может быть решена и без лобовых семафоров. Например, чем этот "участок кода" не есть отдельная задача получающая сообщения и их обрабатывающая? Естественно, при этом нужно много тщательнее продумывать структуру, ибо задачи действительно должны быть задачами выполняющими разумны едействия, а не кучей "кусков кода". Семафоры это в общем-то заплатки. Ими удобно и привычно можно латать, а можно и не латать
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Mar 17 2016, 14:36
|
Местный
  
Группа: Свой
Сообщений: 340
Регистрация: 17-10-14
Пользователь №: 83 207

|
Цитата(zltigo @ Mar 17 2016, 18:13)  Как оказалось  , система может строится так, что такая задача может быть решена и без лобовых семафоров. Например, чем этот "участок кода" не есть отдельная задача получающая сообщения и их обрабатывающая? Это слишком расточительно, на тот же лог выделять отдельную задачу.
|
|
|
|
|
Mar 17 2016, 14:50
|

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

|
QUOTE (turnon @ Mar 17 2016, 16:36)  Это слишком расточительно, на тот же лог выделять отдельную задачу. Лог дело важное и одновременно он не должен перекашивать систему тормозя задачи, причем с перекосами приоритетов. Так что именно разработке логирования надо уделять особое внимание и не скупится. Если действительно сыпется идет обильная информция с самых разных уровней, причем не всегда, а когда, наример, отладку включили, то надо ОЧЕНЬ крепко думать, как организовать доступ к логу.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
Сообщений в этой теме
turnon Использование семафоров до старта планировщика Mar 17 2016, 08:33         turnon Цитата(zltigo @ Mar 17 2016, 18:50) Если ... Mar 17 2016, 16:33          zltigo QUOTE (turnon @ Mar 17 2016, 18:33) Не об... Mar 17 2016, 18:26           turnon Цитата(zltigo @ Mar 17 2016, 22:26) Ведь ... Mar 17 2016, 18:49            zltigo QUOTE (turnon @ Mar 17 2016, 20:49) Это э... Mar 17 2016, 19:02             turnon Цитата(zltigo @ Mar 17 2016, 23:02) Потом... Mar 17 2016, 20:35              zltigo QUOTE (turnon @ Mar 17 2016, 22:35) Мне к... Mar 17 2016, 21:05               turnon Цитата(zltigo @ Mar 18 2016, 01:05) Следу... Mar 17 2016, 21:43                zltigo QUOTE (turnon @ Mar 17 2016, 23:43) А где... Mar 17 2016, 22:02 esaulenka Да, очереди/семафоры/sleep() с остановленным шедул... Mar 17 2016, 11:17 zltigo QUOTE (esaulenka @ Mar 17 2016, 13:17) (д... Mar 17 2016, 12:20 SMaster Я вот жду релиза версии 9.0, в нем запилили возмож... Apr 8 2016, 11:23 zltigo QUOTE (SMaster @ Apr 8 2016, 14:23) Я вот... Apr 8 2016, 12:14
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|