Darti 0 22 ноября, 2015 Опубликовано 22 ноября, 2015 · Жалоба Столкнулся с интересным явлением, прикручиваю к проекту карту памяти, хочу с нее читать данные, выделяю буфер uint8_t buff[] внутри функции main, т.е. локальный, контроллер уходит hard fault. Происходит это тогда когда буфер больше ~950 байт. Камень stm32l152rc. Если выделяю буфер глобально, то все работает. Почему так происходит? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ohmjke 0 22 ноября, 2015 Опубликовано 22 ноября, 2015 · Жалоба Переполнение стека? Что там в PC, LR до прыжка по вектору обработчика HF? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Darti 0 22 ноября, 2015 Опубликовано 22 ноября, 2015 · Жалоба Переполнение стека? Что там в PC, LR до прыжка по вектору обработчика HF? LR = 0x080005EF PC = 0x080001C6 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ohmjke 0 22 ноября, 2015 Опубликовано 22 ноября, 2015 · Жалоба Эмм, это был риторический вопрос, который указывает направление для размышлений :rolleyes: Мне значения этих регистров без отладчика с вашим проектом ничего не дадут. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 35 22 ноября, 2015 Опубликовано 22 ноября, 2015 · Жалоба Распечатайте состояние при входе hard fault и смотрите в программе, что у Вас в программировании не так. Гуглоком дает первой ссылкой http://blog.frankvh.com/2011/12/07/cortex-...-fault-handler/ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Darti 0 22 ноября, 2015 Опубликовано 22 ноября, 2015 · Жалоба Эмм, это был риторический вопрос, который указывает направление для размышлений :rolleyes: Мне значения этих регистров без отладчика с вашим проектом ничего не дадут. Погуглил еще, нашел то как задается стек, в моем случае размер 1024, похоже что идет превышение больше допустимого. Тогда почему крашится с локальной переменной понятно, но тогда не понятно почему не крашится с глобальной, разве глобальные переменные располагаются не там же в стеке? Хочется почитать нормальную литературу и разобраться с этим вопросом, пните в нужном направлении. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 35 22 ноября, 2015 Опубликовано 22 ноября, 2015 · Жалоба Рискну предположить, что глобальные переменные выделяются не на стеке. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Darti 0 22 ноября, 2015 Опубликовано 22 ноября, 2015 · Жалоба Рискну предположить, что глобальные переменные выделяются не на стеке. Логично, но где об этом написано? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 35 22 ноября, 2015 Опубликовано 22 ноября, 2015 · Жалоба Надеюсь в файле map Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ohmjke 0 23 ноября, 2015 Опубликовано 23 ноября, 2015 · Жалоба Рискну предположить, что глобальные переменные выделяются не на стеке. Ничего предполагать не нужно. Для глобальных переменных, а так же для статических переменных модулей и функций память выделяется не из стека. В стеке лежат локальные переменные, аргументы функций, адрес возврата и некоторые другие регистры. По-быстрому нагуглил - http://www.intuit.ru/studies/courses/2193/...ure/1976?page=6 Изучайте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться