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

Hard fault

Столкнулся с интересным явлением, прикручиваю к проекту карту памяти, хочу с нее читать данные, выделяю буфер uint8_t buff[] внутри функции main, т.е. локальный, контроллер уходит hard fault. Происходит это тогда когда буфер больше ~950 байт. Камень stm32l152rc. Если выделяю буфер глобально, то все работает. Почему так происходит?

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


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

Переполнение стека? Что там в PC, LR до прыжка по вектору обработчика HF?

LR = 0x080005EF

PC = 0x080001C6

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


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

Эмм, это был риторический вопрос, который указывает направление для размышлений :rolleyes:

Мне значения этих регистров без отладчика с вашим проектом ничего не дадут.

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


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

Распечатайте состояние при входе hard fault и смотрите в программе, что у Вас в программировании не так.

Гуглоком дает первой ссылкой

http://blog.frankvh.com/2011/12/07/cortex-...-fault-handler/

 

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


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

Эмм, это был риторический вопрос, который указывает направление для размышлений :rolleyes:

Мне значения этих регистров без отладчика с вашим проектом ничего не дадут.

Погуглил еще, нашел то как задается стек, в моем случае размер 1024, похоже что идет превышение больше допустимого. Тогда почему крашится с локальной переменной понятно, но тогда не понятно почему не крашится с глобальной, разве глобальные переменные располагаются не там же в стеке? Хочется почитать нормальную литературу и разобраться с этим вопросом, пните в нужном направлении.

 

 

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


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

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

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


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

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

Логично, но где об этом написано?

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


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

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

 

Ничего предполагать не нужно.

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

В стеке лежат локальные переменные, аргументы функций, адрес возврата и некоторые другие регистры.

 

По-быстрому нагуглил - http://www.intuit.ru/studies/courses/2193/...ure/1976?page=6

Изучайте.

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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