Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Массив данных большого размера
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Muxamor
МК используется STM32F103 компилятор IAR.

Задача. Накапливать за секунду массив данных размером 16 Кбайт (u8 array[16384] )затем отправлять его к другому устройству. Массив объявляется глобально.

Столкнулся с такой проблемой, что при объявлении массива размером в 16 Кбайт перестают работать прерывания, при инициализации массива меньшего размера порядка 300 Байт ( u8 array[300] ) все работает как и задумано.
При компиляции IAR никаких ошибок не выдает.

Как правильно объявлять большой массив данных?
Непомнящий Евгений
Как обычно - u8 array[16384]

Отладчик есть? Гляньте, что не работает. Вероятно при работе с большим массивом у вас проявляется какой-то косяк в вашей логике...
Muxamor
Отладчиком ничего не увидел. В main бегает по циклу опроса флагов.
Вышибает если просто в массив перезаписать один элемент в начале main и дальше этот массив нигде не трогать
тоесть:

u8 array[16384];

main{
array[0]=1;

.
.
.
.
while(1){
опрос флагов.

}


}
Непомнящий Евгений
Цитата(Muxamor @ Feb 12 2016, 10:29) *
Отладчиком ничего не увидел. В main бегает по циклу опроса флагов.


Ну а теперь смотрите регистры прерываний, которые у вас должны срабатывать, NVIC и т.п.

ЗЫ массив, надеюсь, не на стеке?

ЗЫЫ Еще гляньте в map-файл, все ли у вас там хорошо? Может быть из-за ошибок в скрипте линкера этот массив накладывается на кучу или стек?
Muxamor
Ну если я правильно понимаю если глобально то не на стеке ?
Сергей Борщ
Вероятно не хватет места на стеке. Не обязательно этому массиву самому на стек налезать, достаточно, чтобы из-за резервирования места под массив остальные переменные сдвинулись и налезли на стек.
kolobok0
Цитата(Muxamor @ Feb 12 2016, 08:53) *
...Как правильно объявлять большой массив данных?


начните с того, что уберите лишний код. и создадите болванку которую заархивировав выложить тут. Иначе это всё гадание на кофейной гуще.
Имхо - методом отсекания Вы вычислите гораздо быстрее, чем гадать на форумах.


(круглый)
zltigo
QUOTE (Сергей Борщ @ Feb 12 2016, 11:33) *
Вероятно не хватет места на стеке. Не обязательно этому массиву самому на стек налезать, достаточно, чтобы из-за резервирования места под массив остальные переменные сдвинулись и налезли на стек.

Может и вообще памяти не хватает в принципе. Линкеру-то можно указать любое количество памяти.



QUOTE (kolobok0 @ Feb 12 2016, 11:33) *
начните с того, что уберите лишний код. и создадите болванку которую заархивировав выложить тут. Иначе это всё гадание на кофейной гуще.
Имхо - методом отсекания Вы вычислите гораздо быстрее, чем гадать на форумах.
(круглый)

Начинать с рассмотрения MAP фала а не с суматошных созданий блованок и распросов на форумах
MrYuran
Это ещё повезло, что сразу все заткнулось.
У меня был случай недавно, буквально на пару байт наползало и портило одну-две переменные. Вот чудес насмотрелся!
После этого решил всегда контролировать границу стека.
(как те вороны, что решили улететь sm.gif
silverio
Здесь автор столкнулся с похожей проблемой:
http://catethysis.ru/memory_corrupting_error_finding/
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.