|
HardFault handler M0 |
|
|
|
Feb 15 2017, 20:24
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Если совсем простое: CODE void HardFault_Handler(void) { volatile int i = 0; while(!i) ; } В отладчике меняем i, выходим из обработчика в точку возникновения исключения.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Feb 15 2017, 20:59
|

Гуру
     
Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514

|
Цитата(Сергей Борщ @ Feb 15 2017, 23:24)  Если совсем простое: ого... Код 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) { и как понимать эту обработку семафора?
|
|
|
|
|
Feb 16 2017, 16:15
|

Частый гость
 
Группа: Участник
Сообщений: 116
Регистрация: 27-01-10
Из: СПб
Пользователь №: 55 094

|
Цитата(toweroff @ Feb 16 2017, 12:21)  Есть функция, через которую в юарт валится отладочная информация. Вызывать может кто угодно. Чем ее правильнее закрывать, бинарным семафором или мьютексом? Для безопасного доступа к разделяемым ресурсам используются мьютексы. Цитата(toweroff @ Feb 16 2017, 12:21)  По сути тоже самое Не похоже - https://stackoverflow.com/questions/62814/d...phore-and-mutex
Сообщение отредактировал ohmjke - Feb 16 2017, 16:17
|
|
|
|
|
Feb 17 2017, 18:49
|

Частый гость
 
Группа: Участник
Сообщений: 116
Регистрация: 27-01-10
Из: СПб
Пользователь №: 55 094

|
Там помимо этого сообщения есть много других, где объясняется, почему это не одно и то же. Даже к этому сообщению есть комментарии: Цитата ... 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.
|
|
|
|
|
Feb 17 2017, 21:19
|

Частый гость
 
Группа: Участник
Сообщений: 116
Регистрация: 27-01-10
Из: СПб
Пользователь №: 55 094

|
Цитата(toweroff @ Feb 17 2017, 23:11)  еще раз. Семафор с числом вхождений 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): Цитата Мютекс представляет собой двоичный семафор с дополнительными свойствами (например, протоколы обхода неограниченной инверсии приоритетов).
Сообщение отредактировал ohmjke - Feb 17 2017, 21:30
|
|
|
|
|
Feb 18 2017, 19:18
|

Гуру
     
Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514

|
У меня лыжи, наверное, не едут. Если у семафора "ключей" > 1, то оно да, один поток может освободить, другой взять освободивщийся "ключ" Но когда ключ один, его освободит только тот, кто занял. И пока ключ занят, никто другой не войдет... Хотя, где-то тоже читал, что для reentrant функций правильно использовать мьютекс... Хрен поймешь их. По сути, у меня с мьютексами работает, но прояснить на будущее сей момент не помешает точно
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|