toweroff 0 15 февраля, 2017 Опубликовано 15 февраля, 2017 · Жалоба Вот такая вот возникла потребность... для M3 есть, когда-то давно был сделан, но для M0 не подходит Хоть посмотреть, откуда вылетели... Смотрел тырнеты всякие, только что-то оформленное для того же M3 и M4 Есть что-то простое, хоть PC посмотреть Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 15 февраля, 2017 Опубликовано 15 февраля, 2017 · Жалоба Если совсем простое: void HardFault_Handler(void) { volatile int i = 0; while(!i) ; } В отладчике меняем i, выходим из обработчика в точку возникновения исключения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 0 15 февраля, 2017 Опубликовано 15 февраля, 2017 · Жалоба Если совсем простое: ого... void rt_sem_psh (P_SCB p_CB) { /* Check if task has to be waken up */ P_TCB p_TCB; if (p_CB->p_lnk != NULL) { /* A task is waiting for token */ p_TCB = rt_get_first ((P_XCB)p_CB); rt_rmv_dly (p_TCB); p_TCB->state = READY; p_TCB->ret_val = OS_R_SEM; rt_put_prio (&os_rdy, p_TCB); } else { /* Store token */ p_CB->tokens++; } } вылет тут if (p_CB->p_lnk != NULL) { и как понимать эту обработку семафора? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
firew0rker 0 16 февраля, 2017 Опубликовано 16 февраля, 2017 · Жалоба Посмотрите значение указателя p_CB. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 0 16 февраля, 2017 Опубликовано 16 февраля, 2017 · Жалоба Посмотрите значение указателя p_CB. 0x00000001 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 16 февраля, 2017 Опубликовано 16 февраля, 2017 · Жалоба 0x00000001И что вы ожидатете получить с таким указателем? Мало того, что он указывает на вектора прерываний, так еще и невыровнен (из-за этого и исключение). В общем ищите, откуда в него попадает такое дивное число. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 16 февраля, 2017 Опубликовано 16 февраля, 2017 · Жалоба ого... /*!**************************************************************************** @author ViKo @brief Simple HardFault Handler @details В пошаговом режиме переставить программный счетчик, выйти, PC будет содержать команду, следующую за вызвавшей сбой */ __asm void HardFault_Handler(void) { B . ; бесконечный цикл BX LR ; установить программный счетчик сюда } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 0 16 февраля, 2017 Опубликовано 16 февраля, 2017 · Жалоба В общем ищите, откуда в него попадает такое дивное число. Интересно, что вызов этой функции происходит один раз, но сразу в яблочко Кстати, попутно вот такой вопрос: Есть функция, через которую в юарт валится отладочная информация. Вызывать может кто угодно. Чем ее правильнее закрывать, бинарным семафором или мьютексом? По сути тоже самое Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 0 16 февраля, 2017 Опубликовано 16 февраля, 2017 · Жалоба В общем докопался. Из прерывания отправлялся сигнал задаче, ID которой был нарушен Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ohmjke 0 16 февраля, 2017 Опубликовано 16 февраля, 2017 (изменено) · Жалоба Есть функция, через которую в юарт валится отладочная информация. Вызывать может кто угодно. Чем ее правильнее закрывать, бинарным семафором или мьютексом? Для безопасного доступа к разделяемым ресурсам используются мьютексы. По сути тоже самое Не похоже - https://stackoverflow.com/questions/62814/d...phore-and-mutex Изменено 16 февраля, 2017 пользователем ohmjke Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 0 17 февраля, 2017 Опубликовано 17 февраля, 2017 · Жалоба Не похоже - https://stackoverflow.com/questions/62814/d...phore-and-mutex (A mutex is really a semaphore with value 1.) и как это противоречит моему бинарному семафору? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ohmjke 0 17 февраля, 2017 Опубликовано 17 февраля, 2017 · Жалоба Там помимо этого сообщения есть много других, где объясняется, почему это не одно и то же. Даже к этому сообщению есть комментарии: ... but this is regarding mutex vs counting semaphore. The question was asked about binary. – Roman Nikitchenko Nov 10 '09 at 7:47 14 While what is said by david is correct, but it is NOT the answer to the question asked. Mladen Jankovic answer is the answer to the question asked, where point is made to differentiate "binary-semaphore" vs "mutex". – Ajeet Ganga Aug 21 '11 at 15:45 8 Unfortunately, this incorrect answer has more votes than the best answer by @Benoit @JacobRitchie the problem is with the statement that says "A mutex is really a semaphore with value 1" but that is not the case. ThreadA and only ThreadA can increment (and hence release) the mutex that it decremented whereas ThreadB can increment the binSemaphore decremented by ThreadA, which also happens to be the answer to the question in question. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 0 17 февраля, 2017 Опубликовано 17 февраля, 2017 · Жалоба Там помимо этого сообщения есть много других, где объясняется, почему это не одно и то же. Даже к этому сообщению есть комментарии: еще раз. Семафор с числом вхождений 1. Кто схватил - тот и пользуется, пока не освободит. Кто и как его может нарушить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ohmjke 0 17 февраля, 2017 Опубликовано 17 февраля, 2017 (изменено) · Жалоба еще раз. Семафор с числом вхождений 1. Кто схватил - тот и пользуется, пока не освободит. Кто и как его может нарушить? Что же не ясно? Note that with a binary semaphore, it is OK for B to take the semaphore and A to give it. Даже в википедии написано: Мьютекс отличается от семафора тем, что только владеющий им поток может его освободить, т.е. перевести в отмеченное состояние Это если говорить о всем том, что пишут в данном случае. А вообще, у меня сложилось впечатление, что каждый разработчик ОС вкладывает свой смысл в понятие бинарного семафора. К примеру, из описания мьютексов в TNKernel (http://www.pic24.ru/doku.php/tnkernel/ref/mutex/intro): Мютекс представляет собой двоичный семафор с дополнительными свойствами (например, протоколы обхода неограниченной инверсии приоритетов). Изменено 17 февраля, 2017 пользователем ohmjke Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 0 18 февраля, 2017 Опубликовано 18 февраля, 2017 · Жалоба У меня лыжи, наверное, не едут. Если у семафора "ключей" > 1, то оно да, один поток может освободить, другой взять освободивщийся "ключ" Но когда ключ один, его освободит только тот, кто занял. И пока ключ занят, никто другой не войдет... Хотя, где-то тоже читал, что для reentrant функций правильно использовать мьютекс... Хрен поймешь их. По сути, у меня с мьютексами работает, но прояснить на будущее сей момент не помешает точно Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться