|
Неожиданное обнуление семафора, Указатель семафора сам по себе становится NULL |
|
|
|
Sep 29 2015, 12:01
|
Местный
  
Группа: Свой
Сообщений: 340
Регистрация: 17-10-14
Пользователь №: 83 207

|
Использую рекурсивный семафор. Иногда (1-2 раза в неделю при работе 7*24) указатель семафора становится NULL сам по себе. Определяю это срабатыванием ассерта, FreeRTOS\Source\queue.c, line 491. FreeRTOS V8.2.2, IAR. Не пойму, что может такого происходить, что приводит к обнуления переменной ассерта? Переполнение стека? Это контролируется vApplicationStackOverflowHook и vApplicationMallocFailedHook. И от HighWaterMark до конца стека еще больше 20%. Создание семафора: _semaphore = xSemaphoreCreateRecursiveMutex(); assert(_semaphore != NULL); _semaphore объявлена volatile. Использование семафора: assert(xSemaphoreTakeRecursive(_semaphore, (portTickType)portMAX_DELAY) == pdTRUE); ... assert(xSemaphoreGiveRecursive(_semaphore) == pdTRUE); Или так: assert(xSemaphoreTakeRecursive(_semaphore, (portTickType)portMAX_DELAY) == pdTRUE); ... assert(xSemaphoreTakeRecursive(_semaphore, (portTickType)portMAX_DELAY) == pdTRUE); ... assert(xSemaphoreGiveRecursive(_semaphore) == pdTRUE); ... assert(xSemaphoreGiveRecursive(_semaphore) == pdTRUE);
|
|
|
|
|
 |
Ответов
|
Sep 29 2015, 15:16
|

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

|
QUOTE (turnon @ Sep 29 2015, 15:01)  Переполнение стека? Это контролируется vApplicationStackOverflowHook и vApplicationMallocFailedHook. И от HighWaterMark до конца стека еще больше 20%. Кроме стеков задач есть еще и другие стеки. Но поскольку Вы жалуетесть только на одну переменную, хотя рядом с ней еще и явно другие находятся, а также то, что в результате всяких Ваших отладочных действий положение этой переменной в памяти скорее всего менялось, то представляется невероятным, что каким-то невообразимым способом забивается именно эта одна переменная и именно нулем, где-бы она в памяти не находилась. Посему, хотите верьте, хотите нет, но затираете Вы явным образом сами. Ну или не совсем явным. Смотрите, например, на какой-нибудь массив расположенный рядом с этой переменной.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Sep 29 2015, 15:46
|
Местный
  
Группа: Свой
Сообщений: 340
Регистрация: 17-10-14
Пользователь №: 83 207

|
Цитата(zltigo @ Sep 29 2015, 18:16)  Посему, хотите верьте, хотите нет, но затираете Вы явным образом сами. Ну или не совсем явным. Смотрите, например, на какой-нибудь массив расположенный рядом с этой переменной. Спасибо, уже по теме. А как понять что рядом?
|
|
|
|
|
Sep 29 2015, 16:37
|
Местный
  
Группа: Свой
Сообщений: 340
Регистрация: 17-10-14
Пользователь №: 83 207

|
Цитата(zltigo @ Sep 29 2015, 18:47)  MAP файл. Уж простите за безграмотность. Что-то не нахожу в map файле полей объекта. Вот в Log есть поле _semaphore, а в map файле _semaphore не нахожу, как и остальных полей объекта.
|
|
|
|
|
Sep 29 2015, 18:08
|

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

|
QUOTE (turnon @ Sep 29 2015, 19:37)  Что-то не нахожу в map файле полей объекта. Вот в Log есть поле _semaphore, а в map файле _semaphore не нахожу, как и остальных полей объекта. Мне трудно понять то, что Вы пишите  . Я не знаю, что такое Вы назвали "Log" и "поле объекта". Если _semaphore элемент структуры, то в map будет адрес и размер структуры. Выложите map файл - посмотрю.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
Сообщений в этой теме
turnon Неожиданное обнуление семафора Sep 29 2015, 12:01 den_po Цитата(turnon @ Sep 29 2015, 16:01) Испол... Sep 29 2015, 12:14 turnon Цитата(den_po @ Sep 29 2015, 15:14) а вот... Sep 29 2015, 12:16 den_po Потому что assert это макрос, который в релизных к... Sep 29 2015, 12:26 turnon Цитата(den_po @ Sep 29 2015, 15:26) Потом... Sep 29 2015, 14:25  den_po Цитата(turnon @ Sep 29 2015, 18:25) Ну ка... Sep 30 2015, 09:46   turnon Цитата(den_po @ Sep 30 2015, 12:46) Если ... Sep 30 2015, 10:44    den_po Цитата(turnon @ Sep 30 2015, 14:44) Понял... Sep 30 2015, 11:38     turnon Цитата(den_po @ Sep 30 2015, 14:38) Во вр... Sep 30 2015, 11:50      den_po Цитата(turnon @ Sep 30 2015, 15:50) asser... Sep 30 2015, 12:21     turnon Цитата(zltigo @ Sep 29 2015, 21:08) Мне т... Sep 30 2015, 08:50      zltigo QUOTE (turnon @ Sep 30 2015, 11:50) Вот д... Sep 30 2015, 12:37       turnon Цитата(zltigo @ Sep 30 2015, 15:37) Данны... Sep 30 2015, 17:36        den_po Цитата(turnon @ Sep 30 2015, 22:36) Конеч... Sep 30 2015, 21:11         turnon Цитата(den_po @ Oct 1 2015, 00:11) Виснущ... Sep 30 2015, 21:15  megajohn Цитата(turnon @ Sep 29 2015, 18:46) Спаси... Sep 29 2015, 16:17   zltigo QUOTE (megajohn @ Sep 29 2015, 19:17) мож... Sep 29 2015, 16:24
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|