Перейти к содержанию
    

stm32f4discovery виснет раз в неделю

Попробуйте printf ("aaa\r\n");

Изменено пользователем IgorKossak
избыточное цитирование

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

о, спасибо, заработало

а вы с xFSR не сталкивались?

 

пока поставил в обработчик исключения

printf ("AFSR %u CFSR %u DFSR %u HFSR %u MMFAR %u BFAR %u\r\n",SCB->AFSR,SCB->CFSR,SCB->DFSR,SCB->HFSR,SCB->MMFAR,SCB->BFAR);

 

если кто уточнит как правильно надо сделать буду благодарен

Изменено пользователем сарматъ

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

если кто уточнит как правильно надо сделать буду благодарен

Джозефа Ю читали?

Недавно проскакивал тут на русском языке. Там есть кое-какие подробности.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

да как раз оттуда эти регистры откопал

Там, вроде, написано, мол, не утяжеляйте обработчик исключительной ситуации.

А Вы printf...

Со стеком очень аккуратно - сначала нужно убедиться, что указатель исправный.

SVC нельзя использовать (или очень аккуратно).

Скорее всего, блокировка по причине разрушенного стека - я бы не надеялся, что CPU выйдет из HardFault.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

мне хотя бы место и причину найти для начала

 

а стек изза чего разрушается обычно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

думаю 95% случаев - переполнение.

остальное это обращение в локальные переменные через указатель и вылет за пределы переменной...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а ведь если стек рухнул printf работать не будет верно?

выходит в обработчике голый ассемблерный код должен быть безо всяких вызовов функций??

точнее если и си то без функций?

Изменено пользователем сарматъ

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

принтф - это вообще жесткая функция, она же с декодировкой параметров, и прочей байдой...

 

голый ассемблер вам конечно не нужен, его компилятор сам сделает, а вот вызов каких-то больших функций и прочее лучше избежать

 

надо понимать что найденная ошибка стека не означает что он перестал работать физически, то есть переменные будут создаваться, и в пределах одной функции они будут работать корректно. ( ну за исключением очень редкой ситуации когда указатель стека попал точно на вашу функцию, но при работе из флэш это невозможно)

 

для того чтобы отправить данные по УАРТу вам всего навсего надо положить их в DR регистр нужной периферии, ну так и сделайте это без принтф

просто циклом ожидайте готовность регистра и пихайте данные. Пусть они идут бинарем а не текстом.

 

char *Pointer = (char *)&RegData;

UART->DR = *Pointer++;

 

чтобы на компьютере удобно было читать используйте COMTerminal, это один файлик terminal.exe, самый удобный ком порт терминал что я встречал, показывает и текст и бинарь...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

да наверное переделаю на просто уарт

а кстати почему джозеф пишет что в си не получить значение указателя стека и нужен ассемблер?

разве этот указатель не хранится в R13?

 

Изменено пользователем сарматъ

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

разве этот указатель не хранится в R13?
Как в си получить доступ к R13? И если бы это было возможно (например, регистры были бы отражены на память как в AVR), какой указатель был бы вычитан из R13 - PSP или MSP?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

что то мне казалось что я видел обращение к регистрам как к памяти в чьем то коде то ли в антохином то ли в вашем, сейчас найти не получается

 

а PSP или MSP какая разница? главное чтоб из стека вытянуть адрес команды на которой произошла поломка

Изменено пользователем сарматъ

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в лпц есть макросы обращения к регистрам, думаю в СТМ тоже должны быть. Вроде там ассемблер спрятанный в дефайны...

 

ну чтобы понять на какой команде вам счетчик команд нужен, а не указатель стека тогда получается...

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

счетчик в стеке спрятан по адресу sp-24

а лпц это кто?

можете сюда эти макросы кинуть?

Изменено пользователем сарматъ

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а лпц это кто?

LPC микроконтроллеры ARM от NXP (lpc). Golikov A., возможно, имел ввиду файл core_cmFunc.h из CMSIS от NXP.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...