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

 
 
 
Reply to this topicStart new topic
> Iar объявление динамического массива, при компиляции выскакивает ошибка линковщика
memory
сообщение Apr 23 2012, 17:13
Сообщение #1





Группа: Участник
Сообщений: 13
Регистрация: 2-07-09
Пользователь №: 50 863



Iar объявление динамического массива
Привет всем участникам форума, проблема в следующем - есть глобальный массив unsigned char DATA[32][16], при компиляции выскакивает ошибка линковщика
Error[e16]: Segment CSTACK (size: 0x100 align: 0) is too long for segment definition.
At least 0xb more bytes needed.
The problem occurred while processing the segment placement command
"-Z(DATA)CSTACK+_..X_CSTACK_SIZE=_..X_SRAM_BASE-_..X_SRAM_END", where at the moment of placement the available memory ranges were "DATA:40b-4ff" Reserved ranges relevant to this placement: DATA:100-304 NEAR_I
DATA:305-3ca NEAR_Z
DATA:3cb-40a RSTACK
DATA:40b-4ff CSTACK
Насколько я понял этот массив передается через стек и не вмещается в нем, как объявить его динамически, то-есть привязать конкретной области памяти флеша.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Apr 23 2012, 19:34
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



const unsigned char __flash DATA[32][16];

... или вопрос был о другом?
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Apr 23 2012, 20:38
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(memory @ Apr 23 2012, 20:13) *
Насколько я понял этот массив передается через стек и не вмещается в нем, как объявить его динамически, то-есть привязать конкретной области памяти флеша.

Поняли Вы неправильно. У Вас объем используемой памяти в ОЗУ не оставляет места для стека.
Передача через стек ни при чем.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
memory
сообщение Apr 24 2012, 04:21
Сообщение #4





Группа: Участник
Сообщений: 13
Регистрация: 2-07-09
Пользователь №: 50 863



Спасибо всем откликнувшимся, директива __flash решила проблему на 99% , уже и массив в ОЗУ не располагается, и место на стек хватает. Как сделать так, чтобы массив располагался в конце кода программы, например его первый элемент должен находится в ячейке 500hex. Этот массив будут редактировать люди, не имеющие отношение к программированию, надо сделать так чтобы дамп программы а именно массив хорошо читался в блокноте.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Apr 24 2012, 05:12
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(memory @ Apr 24 2012, 08:21) *
Как сделать так, чтобы массив располагался в конце кода программы, например его первый элемент должен находится в ячейке 500hex.

См.: IAR C/C++ Compiler Reference Guide -> Part 1. Using the compiler -> Efficient coding for embedded applications -> Controlling data and function placement in memory
Go to the top of the page
 
+Quote Post
memory
сообщение Apr 24 2012, 08:17
Сообщение #6





Группа: Участник
Сообщений: 13
Регистрация: 2-07-09
Пользователь №: 50 863



В принципе все работает , только без __flash компилятор не инициализирует значения массива а так всё нормально

#pragma location=0x1000
__flash const unsigned char DATA[32][16]={//0x00 Ford_Fokus_2
0x00,0x00,0x04,0x20,0x08,0x59,0xEF,0x00,0x5E,0x42,0x10,0x03,0x32,0x00,0x96,0xFF,
//0x01 Ford_Fokus_3
0x00,0x00,0x02,0x18,0x08,0x99,0x22,0x8F,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0xFF,
//0x02 Ford_Mondeo
Go to the top of the page
 
+Quote Post

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

 


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


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