-
- Меньше морочил бы мозги, если бы у тебя обработчик "HardFault" расчепятывал регистры в UART. Из чего ты бы сразу сделал глубокомысленный вывод -- "улетело не по тому адресу отсюда-вот (см. регистр LR)", дальше всё очевидно. - fk0(30.06.2014 13:59)
- Я в таймерном прерывании по Compare вызываю разные функции по указателям из массива. Hard Fault не ловлю. STM32F205. VAI(68 знак., 29.06.2014 11:29)
- volatile, не? - АПМ(28.06.2014 17:09)
- По функциям не знаю, но если по аналогии с обычными переменными, то: symbions(324 знак., 27.06.2014 23:13)
- Молодец! Пункт 2 - оно самое, я не заметил. Пункты 1 и 3 - фигня. Но по хорошему должно было быть предупреждение о несоответствии типов. Подозреваю, что аффтар тупо забил на него. - SciFi(28.06.2014 01:09)
- Вечер, уже ничего не соображаю, но у меня вот так Vladimir Ljaschko(229 знак., 28.06.2014 01:33)
- Такой вариант у меня работает, но НЕ в прерывании. Если сделать вызов из прерывания то hard fault - antm(28.06.2014 09:29)
- У меня и в прерывании работает, правда не в ARM, а в R8L. Может потому что там нет hard fault :) - Vladimir Ljaschko(28.06.2014 10:14)
- Такой вариант у меня работает, но НЕ в прерывании. Если сделать вызов из прерывания то hard fault - antm(28.06.2014 09:29)
- Вечер, уже ничего не соображаю, но у меня вот так Vladimir Ljaschko(229 знак., 28.06.2014 01:33)
- Нет там аналогии. скобки влияют, круглые также, как квадратные. - Vladimir Ljaschko(28.06.2014 01:04)
- Молодец! Пункт 2 - оно самое, я не заметил. Пункты 1 и 3 - фигня. Но по хорошему должно было быть предупреждение о несоответствии типов. Подозреваю, что аффтар тупо забил на него. - SciFi(28.06.2014 01:09)
- Тупой вопрос - а прерывание не происходит раньше инициализации указателя? - Vladimir Ljaschko(27.06.2014 19:13)
- Нет, прерывания разрешаются после инициализации указателя. - antm(28.06.2014 09:33)
- Из листинга это не очевидно. Если процедура Init_MCU_Periph() разрешает внешние прерывания, то вполне возможно, что флаг соотв. прерывания к этому моменту уже установлен и вызывается функция по неинициализированному указателю. Может имеет nanorobot(64 знак., 29.06.2014 12:32)
- Это пример программы, я в спешке забыл явно указать что разрешение прерываний происходит после инициализации указателя. antm(75 знак., 30.06.2014 11:13)
- Прерывания после сброса вроде как разрешены? Или нет? - Apтём(30.06.2014 11:30)
- Всем большое Спасибо! Заработало. antm(111 знак., 30.06.2014 11:53)
- Прерывания после сброса вроде как разрешены? Или нет? - Apтём(30.06.2014 11:30)
- Это пример программы, я в спешке забыл явно указать что разрешение прерываний происходит после инициализации указателя. antm(75 знак., 30.06.2014 11:13)
- Из листинга это не очевидно. Если процедура Init_MCU_Periph() разрешает внешние прерывания, то вполне возможно, что флаг соотв. прерывания к этому моменту уже установлен и вызывается функция по неинициализированному указателю. Может имеет nanorobot(64 знак., 29.06.2014 12:32)
- Нет, прерывания разрешаются после инициализации указателя. - antm(28.06.2014 09:33)
- Попробуйте сделать extern таким же, как при объявлении указателя, и вызывайте с помощью конструкции (*mode_func)(); - Олдфаг(27.06.2014 18:57, )
- Спасибо! Видимо у меня действительно неправильный вызов функции. antm(35 знак., 28.06.2014 09:23)
- Фигня. При вызове функции "fptr()" и "(*fptr)()" - это одно и то же. А вот при объявлении (extern void ...) разница есть, и она принципиальная. - SciFi(28.06.2014 09:29)
- Давайте уж до конца разберем в чем разница. Чтоб доходчиво. Олдфаг(51 знак., 28.06.2014 09:55, )
- Вот нашел интересный документ по работе с указателями на функцию. antm(94 знак., 28.06.2014 12:18, ссылка)
- Давайте уж до конца разберем в чем разница. Чтоб доходчиво. Олдфаг(51 знак., 28.06.2014 09:55, )
- Фигня. При вызове функции "fptr()" и "(*fptr)()" - это одно и то же. А вот при объявлении (extern void ...) разница есть, и она принципиальная. - SciFi(28.06.2014 09:29)
- Спасибо! Видимо у меня действительно неправильный вызов функции. antm(35 знак., 28.06.2014 09:23)
- Отлаживать надо. Посмотреть на регистры и стек, чтобы увидеть, на какой именно инструкции процессор споткнулся. Для этого есть уже готовые обработчики Hard Fault Exception, поищите. - SciFi(27.06.2014 17:25)