|
Hard Fault при выполнении malloc, но если выполняю пошагово - все ок |
|
|
|
Dec 16 2013, 21:34
|
Местный
  
Группа: Свой
Сообщений: 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.
|
|
|
|
|
 |
Ответов
|
Dec 17 2013, 21:22
|
Местный
  
Группа: Свой
Сообщений: 454
Регистрация: 13-10-10
Из: Киев
Пользователь №: 60 135

|
Цитата(A. Fig Lee @ Dec 17 2013, 21:30)  Аддресс загружается в указатель стека: 0x04000002 всего 2 байта на стек. Да вроде бы нет, наверное все-таки со стеком все нормально. Размер стека я указываю в файле startup_LPC17xx.s, в нём сейчас указано Код Stack_Size EQU 0x00007000 Пробовал указать Код Stack_Size EQU 0x00000001 при этом вообще ни одна из функций в main'e не выполнялось, улетало в HardFault. Приложил два hex файла, соответствующих этим случаям. А возвращение динамического массива структур из функции (из-за чего и происходил HardFault) я переделал, теперь HardFault не вылетает, хотя не понятно, почему он раньше происходил. Сейчас функция возвращает просто указатель на этот массив, который внутри неё создаётся с помощью malloc. Теперь почему-то не глючит.
Прикрепленные файлы
hex.zip ( 77.76 килобайт )
Кол-во скачиваний: 5
|
|
|
|
|
Dec 17 2013, 21:52
|

Знающий
   
Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467

|
Цитата(kt368 @ Dec 17 2013, 16:22)  Да вроде бы нет, наверное все-таки со стеком все нормально. Размер стека я указываю в файле startup_LPC17xx.s, в нём сейчас указано Код Stack_Size EQU 0x00007000 Пробовал указать Код Stack_Size EQU 0x00000001 при этом вообще ни одна из функций в main'e не выполнялось, улетало в HardFault. Приложил два hex файла, соответствующих этим случаям. А возвращение динамического массива структур из функции (из-за чего и происходил HardFault) я переделал, теперь HardFault не вылетает, хотя не понятно, почему он раньше происходил. Сейчас функция возвращает просто указатель на этот массив, который внутри неё создаётся с помощью malloc. Теперь почему-то не глючит. Интересненько.. Cortex ы в первых 4х байтах имеют значение, которое надо загрузить в стэк пойнтер.. Может он потом инициализируется? Непонятно. Если RAM начинается с 0x04000000, то 0х04000002 означает, что стэк всего 2 байта. Может это не binary file был? Чего то я недопонимаю.. A! Так это же hex file. В binary должно быть как я говорил
Сообщение отредактировал A. Fig Lee - Dec 17 2013, 21:54
--------------------
Верить нельзя никому, даже себе. Мне - можно.
|
|
|
|
Сообщений в этой теме
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, 08:36 Сергей Борщ Цитата(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 Да, это были 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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|