|
Использование семафоров до старта планировщика |
|
|
|
 |
Ответов
|
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 я начал с ней копаться. До этого имел за плечами работу с операционными сисиемами, как с чужими, так и со своими. Удивило тогда меня, что всякие семафоры и иже с ними сделаны через макросы очередей. Призадумался я да и понял, что семафоры и иже с ними в общем-то есть ЛИШНЯЯ сущность. И с тех пор не пользую. За ненадобностью. А как вы решаете проблему с одновременной работой участка кода из нескольких задач? Конечно в случае если участок кода критичен чтобы к нему не обращались из нескольких задая одновременно.
|
|
|
|
Сообщений в этой теме
turnon Использование семафоров до старта планировщика Mar 17 2016, 08:33      zltigo QUOTE (turnon @ Mar 17 2016, 15:55) А как... Mar 17 2016, 14:13       turnon Цитата(zltigo @ Mar 17 2016, 18:13) Как о... Mar 17 2016, 14:36        zltigo QUOTE (turnon @ Mar 17 2016, 16:36) Это с... Mar 17 2016, 14:50         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
|
|
|