реклама на сайте
подробности

 
 
> Hard Fault при выполнении malloc, но если выполняю пошагово - все ок
kt368
сообщение Dec 16 2013, 21:34
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 454
Регистрация: 13-10-10
Из: Киев
Пользователь №: 60 135



Здравствуйте!
Есть функция, которой передаётся указатель на указатель на структуру (**pIndZwithZ). В самой функции указателю на структуру присваивается выделяемое malloc'ом пространство для некоторого количества таких структур. В итоге мне нужно чтоб функция с помощью указателя возвращала массив структур, их количество рассчитывается в самой функции. Так вот, в функции есть код:
Код
*pIndZwithZ = malloc(CalData_str.nZ * (sizeof(float) + sizeof(uint8_t)));
Если я ставлю breackpoint на следующую за ним строку, то при её выполнении происходит Hard Fault, причиной которого, как я понял, является "data bus error". Это видно из того, что SCB.CFSR становится равным 0x400. А если я точку останова ставлю на этом злополучной malloc'е, и далее выполняю пошагово, то никаких проблем не возникает. Heap'a точно хватает, пробовал увеличить - не помогло.
Посоветуйте, как можно пытаться бороться с проблемой?

P.S. LPC1758, Keil.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
kt368
сообщение Dec 17 2013, 08:36
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 454
Регистрация: 13-10-10
Из: Киев
Пользователь №: 60 135



Я считал что аппаратный стек - это способность микроконтроллера при вызове одной функции из другой (или при выполнении прерывания) автоматически сохранять значения некоторых регистров, чтоб при возврате из функции или прерывания продолжилась нормальная работа программы. Например в PIC контроллерах он, кажется, использовался для сохранения адреса команды, следующей за вызовом данной функции или той комманды, которую необходимо выполнить после выхода из прерывания. В PIC-ах он был, кажется, имел 8 уровней.
А программный стек - это действия компилятора по сохранению этих же данных програмно, это требует дополнительное время, в отличие от аппаратного стека, но зато практически снимаются ограничения на размер стека. Хоть 100 уровней. Мне кажется логичным чтоб компилятор начинал использовать программный стек при переполнении аппаратного, хотя не уверен, может ли компилятор такое отследить.
Запутался, в общем, я со стеками.

Поместил вызов этой функции в самом начале main'a - поведение то же самое. Пошагово всё выполняется, а не пошагово - вылетает в Hard Fault.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- kt368   Hard Fault при выполнении malloc   Dec 16 2013, 21:34
- - A. Fig Lee   Цитата(kt368 @ Dec 16 2013, 16:34) Здравс...   Dec 16 2013, 23:57
- - andrewlekar   Возможно дело в невыровненном доступе к памяти. По...   Dec 17 2013, 04:49
- - kt368   А как проверить хватает ли стека? Вот, что вижу в ...   Dec 17 2013, 06:03
|- - Сергей Борщ   Цитата(kt368 @ Dec 17 2013, 08:03) Как уз...   Dec 17 2013, 06:42
|- - Сергей Борщ   Цитата(kt368 @ Dec 17 2013, 10:36) Наприм...   Dec 17 2013, 10:31
|- - A. Fig Lee   Цитата(kt368 @ Dec 17 2013, 03:36) Я счит...   Dec 17 2013, 12:37
- - kt368   Цитата(Сергей Борщ @ Dec 17 2013, 12:31) ...   Dec 17 2013, 18:45
|- - A. Fig Lee   Цитата(kt368 @ Dec 17 2013, 13:45) Подска...   Dec 17 2013, 19:30
|- - Сергей Борщ   Цитата(kt368 @ Dec 17 2013, 20:45) Эта ко...   Dec 17 2013, 21:58
- - kt368   Цитата(A. Fig Lee @ Dec 17 2013, 21:30) А...   Dec 17 2013, 21:22
|- - A. Fig Lee   Цитата(kt368 @ Dec 17 2013, 16:22) Да вро...   Dec 17 2013, 21:52
- - kt368   Да, это были hex файлы. Для создания bin воспользо...   Dec 18 2013, 11:03
- - A. Fig Lee   Странное, непонятное мне распределение IRAM на кар...   Dec 18 2013, 13:54
- - kt368   Почему ж странное, вот скрин юзер мануала, у меня ...   Dec 18 2013, 14:07
- - toweroff   По-любому в 0 записывать нельзя, если не было рема...   Dec 18 2013, 14:24
- - kt368   Цитата(toweroff @ Dec 18 2013, 16:24) По-...   Dec 18 2013, 14:25
|- - A. Fig Lee   Цитата(kt368 @ Dec 18 2013, 09:25) Это по...   Dec 18 2013, 15:06
|- - toweroff   Цитата(kt368 @ Dec 18 2013, 18:25) Это по...   Dec 18 2013, 15:08
- - kt368   Я уже немного переделал СИ-шные файлы, и глюки пер...   Dec 18 2013, 19:24
|- - toweroff   Цитата(kt368 @ Dec 18 2013, 23:24) Я уже ...   Dec 18 2013, 20:37
|- - Сергей Борщ   Цитата(kt368 @ Dec 18 2013, 21:24) Подска...   Dec 19 2013, 08:41
- - kt368   С размещением в памяти уже вроде-бы разобрался (ис...   Dec 19 2013, 11:11


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th August 2025 - 03:41
Рейтинг@Mail.ru


Страница сгенерированна за 0.01365 секунд с 7
ELECTRONIX ©2004-2016