Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32F4, Объявление массива байт
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
BlackOps
Мне нужен например массив ис 65 536 байт, когда я объявляю массив из более чем 256 байт, при его инициализации байты которые идут после 256-го равны нулю.
Переполнен я так понял стэк. В линкер скрипте пробовал увеличить размер стека (кстати там размер не 256 был), не помогло.

Пробовал объявить как:
static uint8_t iobuf[65536];

вне функции main(), тоже не помогло.

подскажите как правильнее поступить?

кстати, прикрепил линкер скрипт который использую если что.
jcxz
А сколько ОЗУ в вашем контроллере?
Сергей Борщ
QUOTE (BlackOps @ Jul 29 2013, 09:16) *
Мне нужен например массив ис 65 536 байт, когда я объявляю массив из более чем 256 байт, при его инициализации байты которые идут после 256-го равны нулю.
Покажите инициализацию.
QUOTE (BlackOps @ Jul 29 2013, 09:16) *
Переполнен я так понял стэк. В линкер скрипте пробовал увеличить размер стека (кстати там размер не 256 был), не помогло.
По каким признакам вы так поняли? Я предпочитаю стек размещать в конце ОЗУ чтобы стек можг расти до тех пор, пока не займет все свободное ОЗУ.
QUOTE (BlackOps @ Jul 29 2013, 09:16) *
кстати, прикрепил линкер скрипт который использую если что.

Конструкция "} > ram AT > ram" бессмысленна. Типа "масло масляное", "эпопическая эпопея", "сенсорный датчик" и т.п. Достаточно просто "} > ram", но причина явно не здесь, а в инициализации.
BlackOps
устройство: stm32f407vgt6

Цитата(Сергей Борщ @ Jul 29 2013, 13:56) *
Покажите инициализацию.


Код
for(j=0;j<=255;j++)
{
    iobuf[j]=0xcc;
}


только вместо 255 если например другое число побольше то все элементы заполняются только до индекса 255, остальные элементы массива 0.


Цитата(Сергей Борщ @ Jul 29 2013, 13:56) *
По каким признакам вы так поняли? Я предпочитаю стек размещать в конце ОЗУ чтобы стек можг расти до тех пор, пока не займет все свободное ОЗУ.

а не могли бы подсказать где найти нормальный стандартный линкер скрипт? Или если можно поделится?
=F8=
Цитата(BlackOps @ Jul 29 2013, 12:02) *
Код
for(j=0;j<=255;j++)
{
    iobuf[j]=0xcc;
}

А тип j у вас случаем не восьмибитный? sm.gif
BlackOps
Цитата(=F8= @ Jul 29 2013, 14:12) *
А тип j у вас случаем не восьмибитный? sm.gif

uint32_t j = 0;

KSN
Из приведенного кода следует, что элементам с 0 по 255 присваивается значение 0xCC, а элементам выше 255 (256, 257....) будет присвоено 0x00, т.к. у автора с большой долей вероятности массив объявлен без спецификатора __no_init, он не размещен в области памяти, которую НЕ надо инициализировать.
Flexz
А как вы определяете, что не весь массив заполнен? Если через отладтчик, то может это косяк отладчика?
Сергей Борщ
QUOTE (BlackOps @ Jul 29 2013, 11:02) *
только вместо 255 если например другое число побольше то все элементы заполняются только до индекса 255, остальные элементы массива 0.
Но чудес ведь не бывает? Выкидывайте из проекта все лишенее вплоть до одного этого цикла инициализации и выложите .lss и .map
QUOTE (BlackOps @ Jul 29 2013, 11:02) *
а не могли бы подсказать где найти нормальный стандартный линкер скрипт? Или если можно поделится?
Да его каждый пишет исходя из своих вкусов и задачи. Мой в целом похож на ваш, разве что стек размещается в конце ОЗУ:
CODE
/* higher address of the user mode stack */
PROVIDE ( _estack = ALIGN(ORIGIN(RAM) + LENGTH(RAM) - 8 ,8) );

PROVIDE( _heap = _ebss );
PROVIDE ( _eheap = ALIGN(_estack - _Minimum_Stack_Size - 8 ,8) );



QUOTE (Flexz @ Jul 29 2013, 12:04) *
Если через отладтчик, то может это косяк отладчика?
Кстати, да. Попробуйте прочитать отладчиком дамп области памяти по адресам этого массива.
=F8=
Попробуйте инициализировать через memset, оно конечно разницы не должно быть никакой но если будет...
BlackOps
сделал вобщем отдельный проект там все заработало. затем очистил и поновому слепил предыдущий проект. вроде как работает, не увидел причины, но начал все с нуля и все нормально теперь.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.