adnega 11 24 сентября, 2013 Опубликовано 24 сентября, 2013 (изменено) · Жалоба Попробуйте printf ("aaa\r\n"); Изменено 24 сентября, 2013 пользователем IgorKossak избыточное цитирование Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
сарматъ 0 24 сентября, 2013 Опубликовано 24 сентября, 2013 (изменено) · Жалоба о, спасибо, заработало а вы с 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); если кто уточнит как правильно надо сделать буду благодарен Изменено 24 сентября, 2013 пользователем сарматъ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 24 сентября, 2013 Опубликовано 24 сентября, 2013 · Жалоба если кто уточнит как правильно надо сделать буду благодарен Джозефа Ю читали? Недавно проскакивал тут на русском языке. Там есть кое-какие подробности. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
сарматъ 0 24 сентября, 2013 Опубликовано 24 сентября, 2013 · Жалоба да как раз оттуда эти регистры откопал Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 24 сентября, 2013 Опубликовано 24 сентября, 2013 · Жалоба да как раз оттуда эти регистры откопал Там, вроде, написано, мол, не утяжеляйте обработчик исключительной ситуации. А Вы printf... Со стеком очень аккуратно - сначала нужно убедиться, что указатель исправный. SVC нельзя использовать (или очень аккуратно). Скорее всего, блокировка по причине разрушенного стека - я бы не надеялся, что CPU выйдет из HardFault. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
сарматъ 0 25 сентября, 2013 Опубликовано 25 сентября, 2013 · Жалоба мне хотя бы место и причину найти для начала а стек изза чего разрушается обычно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 25 сентября, 2013 Опубликовано 25 сентября, 2013 · Жалоба думаю 95% случаев - переполнение. остальное это обращение в локальные переменные через указатель и вылет за пределы переменной... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
сарматъ 0 25 сентября, 2013 Опубликовано 25 сентября, 2013 (изменено) · Жалоба а ведь если стек рухнул printf работать не будет верно? выходит в обработчике голый ассемблерный код должен быть безо всяких вызовов функций?? точнее если и си то без функций? Изменено 25 сентября, 2013 пользователем сарматъ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 25 сентября, 2013 Опубликовано 25 сентября, 2013 · Жалоба принтф - это вообще жесткая функция, она же с декодировкой параметров, и прочей байдой... голый ассемблер вам конечно не нужен, его компилятор сам сделает, а вот вызов каких-то больших функций и прочее лучше избежать надо понимать что найденная ошибка стека не означает что он перестал работать физически, то есть переменные будут создаваться, и в пределах одной функции они будут работать корректно. ( ну за исключением очень редкой ситуации когда указатель стека попал точно на вашу функцию, но при работе из флэш это невозможно) для того чтобы отправить данные по УАРТу вам всего навсего надо положить их в DR регистр нужной периферии, ну так и сделайте это без принтф просто циклом ожидайте готовность регистра и пихайте данные. Пусть они идут бинарем а не текстом. char *Pointer = (char *)&RegData; UART->DR = *Pointer++; чтобы на компьютере удобно было читать используйте COMTerminal, это один файлик terminal.exe, самый удобный ком порт терминал что я встречал, показывает и текст и бинарь... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
сарматъ 0 25 сентября, 2013 Опубликовано 25 сентября, 2013 (изменено) · Жалоба да наверное переделаю на просто уарт а кстати почему джозеф пишет что в си не получить значение указателя стека и нужен ассемблер? разве этот указатель не хранится в R13? Изменено 25 сентября, 2013 пользователем сарматъ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 25 сентября, 2013 Опубликовано 25 сентября, 2013 · Жалоба разве этот указатель не хранится в R13?Как в си получить доступ к R13? И если бы это было возможно (например, регистры были бы отражены на память как в AVR), какой указатель был бы вычитан из R13 - PSP или MSP? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
сарматъ 0 25 сентября, 2013 Опубликовано 25 сентября, 2013 (изменено) · Жалоба что то мне казалось что я видел обращение к регистрам как к памяти в чьем то коде то ли в антохином то ли в вашем, сейчас найти не получается а PSP или MSP какая разница? главное чтоб из стека вытянуть адрес команды на которой произошла поломка Изменено 25 сентября, 2013 пользователем сарматъ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 25 сентября, 2013 Опубликовано 25 сентября, 2013 · Жалоба в лпц есть макросы обращения к регистрам, думаю в СТМ тоже должны быть. Вроде там ассемблер спрятанный в дефайны... ну чтобы понять на какой команде вам счетчик команд нужен, а не указатель стека тогда получается... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
сарматъ 0 25 сентября, 2013 Опубликовано 25 сентября, 2013 (изменено) · Жалоба счетчик в стеке спрятан по адресу sp-24 а лпц это кто? можете сюда эти макросы кинуть? Изменено 25 сентября, 2013 пользователем сарматъ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mdmitry 0 25 сентября, 2013 Опубликовано 25 сентября, 2013 · Жалоба а лпц это кто? LPC микроконтроллеры ARM от NXP (lpc). Golikov A., возможно, имел ввиду файл core_cmFunc.h из CMSIS от NXP. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться