реклама на сайте
подробности

 
 
> HardFault handler M0
toweroff
сообщение Feb 15 2017, 20:08
Сообщение #1


Гуру
******

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



Вот такая вот возникла потребность...
для M3 есть, когда-то давно был сделан, но для M0 не подходит
Хоть посмотреть, откуда вылетели...
Смотрел тырнеты всякие, только что-то оформленное для того же M3 и M4

Есть что-то простое, хоть PC посмотреть
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
firew0rker
сообщение Feb 16 2017, 01:47
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 206
Регистрация: 11-07-12
Из: Новосибирск
Пользователь №: 72 716



Посмотрите значение указателя p_CB.
Go to the top of the page
 
+Quote Post
toweroff
сообщение Feb 16 2017, 06:34
Сообщение #3


Гуру
******

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



Цитата(firew0rker @ Feb 16 2017, 04:47) *
Посмотрите значение указателя p_CB.

0x00000001
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 16 2017, 07:55
Сообщение #4


Гуру
******

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



QUOTE (toweroff @ Feb 16 2017, 08:34) *
0x00000001
И что вы ожидатете получить с таким указателем? Мало того, что он указывает на вектора прерываний, так еще и невыровнен (из-за этого и исключение). В общем ищите, откуда в него попадает такое дивное число.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
toweroff
сообщение Feb 16 2017, 09:21
Сообщение #5


Гуру
******

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



Цитата(Сергей Борщ @ Feb 16 2017, 10:55) *
В общем ищите, откуда в него попадает такое дивное число.

Интересно, что вызов этой функции происходит один раз, но сразу в яблочко

Кстати, попутно вот такой вопрос:
Есть функция, через которую в юарт валится отладочная информация. Вызывать может кто угодно. Чем ее правильнее закрывать, бинарным семафором или мьютексом? По сути тоже самое
Go to the top of the page
 
+Quote Post
MoskWin32
сообщение Mar 2 2017, 15:19
Сообщение #6





Группа: Участник
Сообщений: 8
Регистрация: 13-12-12
Пользователь №: 74 834



Цитата(toweroff @ Feb 16 2017, 12:21) *
Чем ее правильнее закрывать, бинарным семафором или мьютексом?


Как альтернатива для функции потокобезопасного вывода - блокировка планировщика(на примере FreeRTOS):
Код
void vPrintString( const char *pcString )
{
    /* Print the string, suspending the scheduler as method of mutual
    exclusion. */
    vTaskSuspendAll();
    {
        sprintf( cBuffer, "%s", pcString );
        consoleprint( cBuffer );
    }
    xTaskResumeAll();
}
Go to the top of the page
 
+Quote Post
jcxz
сообщение Mar 2 2017, 16:55
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(MoskWin32 @ Mar 2 2017, 17:19) *
Как альтернатива для функции потокобезопасного вывода - блокировка планировщика(на примере FreeRTOS):
...
consoleprint( cBuffer );

...и убивается весь смысл многозадачности. Выполнение превращается в суперцикл.
Это даже уже не говоря о том что лесом идут все приоритеты задач.
Если так пишете - значит Вы не поняли зачем вообще нужна многозадачная ОС.
Go to the top of the page
 
+Quote Post
MoskWin32
сообщение Mar 2 2017, 17:35
Сообщение #8





Группа: Участник
Сообщений: 8
Регистрация: 13-12-12
Пользователь №: 74 834



Цитата(jcxz @ Mar 2 2017, 19:55) *
...и убивается весь смысл многозадачности. Выполнение превращается в суперцикл.


Я понимаю, конечно на время вывода сообщения система "стопорится". Я использую это только для отладки чего-либо, в местах под макросом #ifdef _DEBUG_ANYTHING.
В рабочем приложении такого конечно нет.
Функция взята из учебника "FreeRTOS на Cortex-M3". Не такой уж и бред, если понимать, в каком контексте её можно использовать.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Mar 3 2017, 14:17
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(MoskWin32 @ Mar 2 2017, 19:35) *
Я понимаю, конечно на время вывода сообщения система "стопорится". Я использую это только для отладки чего-либо, в местах под макросом #ifdef _DEBUG_ANYTHING.
В рабочем приложении такого конечно нет.
Функция взята из учебника "FreeRTOS на Cortex-M3". Не такой уж и бред, если понимать, в каком контексте её можно использовать.

Один из главных плюсов использования ОС это: полезное использование времени процессора во время выполнения операций ввода/вывода.
Т.е. - например когда одна задача, как у вас, ждёт готовности FIFO UART-а принять очередной передаваемый байт, другая в этой время получает время CPU и выполняет полезную работу.
В суперцикле это невозможно, аналогично как и в приведённом Вами куске кода.
Плюс также - время реакции критичных по времени сервисов существенно меньше суперцикла. А у Вас, при выводе чего-то существенного в порт таким способом, все такие сервисы будут в пролёте.
Использовать такое для отладки тоже не имеет смысла, так как, при включении такой отладки, поведение программы сильно меняется (работа перестаёт быть многозадачной) и соответственно результаты отладки бессмысленны (отлаживается совсем не то ПО, которое нужно).
Если нужно корректное разделение ресурса (буфера вывода UART), то самое правильное - использовать семафор.
Можно использовать и запрет прерываний или запрет шедулера, но только на время вывода в программный буфер UART, а не на время вывода в IO-порт UART.
Go to the top of the page
 
+Quote Post
MoskWin32
сообщение Mar 3 2017, 15:48
Сообщение #10





Группа: Участник
Сообщений: 8
Регистрация: 13-12-12
Пользователь №: 74 834



jcxz, спасибо за разъяснение. Я все это понимаю, и полностью согласен.
Но если 1 тик шедулера = 1 мс, то на 115200бод/с можно успеть передать 11 символов. Если это будут сообщения типа "PING:ok" или "timeout", то ничего ведь страшного не случится?
Т.е. 1-2 тика не такой уж и криминал в этом случае? Все зависит от требований к времени реакции, конечно.
К тому же прерывания не запрещаются при блокировке шедулера и в некотором смысле многозадачность сохраняется.
По поводу защиты буфера - тогда нужно гарантировать, что все операции через UART для всех задач будут организованы только через него.
Ладно, это всё - скорее мои нелепые попытки оправдаться, знаю laughing.gif

Сообщение отредактировал MoskWin32 - Mar 3 2017, 17:10
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 3 2017, 17:19
Сообщение #11


Гуру
******

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



Цитата(MoskWin32 @ Mar 3 2017, 17:48) *
Но если 1 тик шедулера = 1 мс, то на 115200бод/с можно успеть передать 11 символов.

Много больше, если для передачи используется буфер, то сброс вывода в буфер просходит на порядки быстрее, чем вывод в нефифофированный порт.
Ну а за такой вывод через промежуточный буфер:
Код
sprintf( cBuffer, "%s", pcString );
        consoleprint( cBuffer );

Надо лишать права писать учебники пожизненно.



--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- toweroff   HardFault handler M0   Feb 15 2017, 20:08
- - Сергей Борщ   Если совсем простое: CODEvoid HardFault_Handler...   Feb 15 2017, 20:24
|- - toweroff   Цитата(Сергей Борщ @ Feb 15 2017, 23:24) ...   Feb 15 2017, 20:59
|- - ViKo   Цитата(toweroff @ Feb 15 2017, 23:59) ого...   Feb 16 2017, 08:57
|- - ohmjke   Цитата(toweroff @ Feb 16 2017, 12:21) Ест...   Feb 16 2017, 16:15
||- - toweroff   Цитата(ohmjke @ Feb 16 2017, 19:15) Не по...   Feb 17 2017, 15:32
- - toweroff   В общем докопался. Из прерывания отправлялся сигна...   Feb 16 2017, 12:52
- - ohmjke   Там помимо этого сообщения есть много других, где ...   Feb 17 2017, 18:49
|- - toweroff   Цитата(ohmjke @ Feb 17 2017, 21:49) Там п...   Feb 17 2017, 20:11
|- - ohmjke   Цитата(toweroff @ Feb 17 2017, 23:11) еще...   Feb 17 2017, 21:19
- - toweroff   У меня лыжи, наверное, не едут. Если у семафора ...   Feb 18 2017, 19:18


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th August 2025 - 18:04
Рейтинг@Mail.ru


Страница сгенерированна за 0.01474 секунд с 7
ELECTRONIX ©2004-2016