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

 
 
> Размер __no_init секции, из IDE
xelax
сообщение Oct 3 2008, 10:49
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 370
Регистрация: 7-11-06
Пользователь №: 22 035



Коллеги,

такой вопрос:

у меня есть однобайтовая __no_init переменная, при линкове выдаётся ошибка, что разммер секции слишком маленький и туда переменная не помещается. И действительно посмотрев командную строку линкера вижу такие параметры
Код
-D_..X_SRAM_END=21FF
-Z(DATA)NEAR_N=_..X_EXT_NV_BASE:+_..X_EXT_NV_SIZE
-D_..X_EXT_NV_BASE=_..X_SRAM_END
-D_..X_EXT_NV_SIZE=0


использую мегу1281. То есть насколько я понимаю линкер пытается положить переменную по адресу
0х21FF + 0 ???? Я прав????

И такой вопрос как поменять эти дефайны для линкера из IDE??? Создавать свой скрипт для линкера не хотелось бы.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
zltigo
сообщение Oct 3 2008, 12:59
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(xelax @ Oct 3 2008, 12:49) *
Создавать свой скрипт для линкера не хотелось бы.

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
xelax
сообщение Oct 3 2008, 13:09
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 370
Регистрация: 7-11-06
Пользователь №: 22 035



Цитата(zltigo @ Oct 3 2008, 16:59) *
И совершенно зря - нормальный подход к полностью контролируемому коду и процессу работы. Использование "готовых" неведомо для чего сделанных и могущих, между прочим легко поменяться при переходе к другой версии пакета, "универсальных" решений верный путь к ненужным проблемам.
Взять "универсальный" в качестве заготовки, обдумать, понять, подправить.....


smile.gif Уже осознал это. Так в итоге и сделал.
Только вот какой момент смущает, смотрю итоговый map файл и вижу:
Код
NEAR_I      DATA      00000200 - 000003F2      1F3      Relative      0
NEAR_Z     DATA     000003F3 - 00001DF5     1A03     Relative     0
RSTACK     DATA     00001DF6 - 00001E75     80     Predefined     0
CSTACK     DATA     00001E76 - 00002075     200     Predefined     0
NEAR_N     DATA     00002076 - 00002076     1     Relative     0


что стек располагает сразу после секции глобальных переменных. Почему IAR не расположил стек в конце памяти(хотя для формирования стека был указан диапазон всей памяти)? Если разнести стек и глобальные переменные в разные концы памяти, то при переполнении стека будет некий защитный буфер адресов, гарантирующий, что глобальные переменные не затруться. Очень странно....

Буду пытаться исправить вышеописанное руками в скрипте.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 3 2008, 13:11
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(xelax @ Oct 3 2008, 15:09) *
Буду пытаться исправить вышеописанное руками в скрипте.

Легко. Есть возможнось не только указывать диапазон, но и откуда плясать при размещении.
Это ARM, но принцип тот-же
Код
//***************************************************************************
// Stack and heap segments.
//***************************************************************************
-D_CSTACK_SIZE=8         // Dummy System/User Stack Size (Not Used!)
-D_SVC_STACK_SIZE=200     // Supervisor Mode (Main Work Mode)
-D_IRQ_STACK_SIZE=200
-D_FIQ_STACK_SIZE=200            
-D_XXX_STACK_SIZE=20    // 32bytes Shared Stack for Abort/Undefined Instruction    and IAP Buffer        
-D_HEAP_RTOS_SIZE=2000  // 8Kb - Dummy minimal space for My Memory Manager

-Z(DATA)SVC_STACK+_SVC_STACK_SIZE=RAMSTART-RAMEND      // System/User
-Z(DATA)CSTACK+_CSTACK_SIZE=RAMSTART-RAMEND            // Supervisor
-Z(DATA)FIQ_STACK+_FIQ_STACK_SIZE=RAMSTART-RAMEND     // FIQ
-Z(DATA)IRQ_STACK+_IRQ_STACK_SIZE=RAMSTART-RAMEND    // IRQ
-Z(DATA)HEAP_RTOS+_HEAP_RTOS_SIZE=RAMSTART-RAMEND     // Minimal size for My memory manager
// All this space from start HEAP_RTOS to start XXX_STACK for Memory manager
-Z(DATA)XXX_STACK+_XXX_STACK_SIZE#RAMSTART-RAMEND    // Shared - Abort/Undefined and IAP buffer


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
xelax
сообщение Oct 3 2008, 13:14
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 370
Регистрация: 7-11-06
Пользователь №: 22 035



Цитата(zltigo @ Oct 3 2008, 17:11) *
Легко. Есть возможнось не только указывать диапазон, но и откуда плясать при размещении.


Был бы признателен, если бы поделились знаниями, как задать откуда плясать. wink.gif


Ооо.... немного не успел с просьбой.... Спасибо буду осознавать
Go to the top of the page
 
+Quote Post



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

 


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


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