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

 
 
> проблема со стеком в IAR
Sarez
сообщение Apr 23 2007, 14:41
Сообщение #1


Частый гость
**

Группа: Новичок
Сообщений: 75
Регистрация: 17-08-06
Из: Минск
Пользователь №: 19 630



Доброго всем дня ! Подскажите пожалуйста, что делаю не так. Имеется IAR 4.40A. На вкладке Options/
Linker/Config указываю в качестве Linker Command File свой файл, в котором инициализирую стек следующим образом :

//*************************************************************************
// Stack and heap segments.
//*************************************************************************

-D_CSTACK_SIZE=2000
// -D_SVC_STACK_SIZE=10
-D_IRQ_STACK_SIZE=100
-D_HEAP_SIZE=2000

-Z(DATA)CSTACK+_CSTACK_SIZE=RAMSTART-RAMEND
// -Z(DATA)SVC_STACK+_SVC_STACK_SIZE=RAMSTART-RAMEND
-Z(DATA)IRQ_STACK+_IRQ_STACK_SIZE,HEAP+_HEAP_SIZE=RAMSTART-RAMEND

При отладке с самых первых шагов выскакивает предупреждение:

Mon Apr 23 14:16:34 2007: The stack 'CSTACK' is
filled to 97% (7964 bytes used out of 8192). The
warning threshold is set to 90%.

Откуда на 'CSTACK' берется 8192 байта, если в файле указано 2000? И почему так быстро забивается стек? Возможно я чего-то не понимаю.
Обьясните пожалуйста идиоту.....

Стал копаться в опция линкера, и на той же вкладке нашел Comand file configuration tools. В выскочившем окошке в качестве адресного диапазона INTERNAL ROM указан диапазон 8000-FFFFF, а в качестве диапазона INTERNAL RAM -100000-7FFFFF - это при том, что используется МК LPC2214 ( ROM - 00000000 - 0003FFFF, RAM - 3FFFFFFF-40003FFF ), хотя в качестве таблицы векторов указаны адреса 0x0 - 0x3f, что соответствует действительности... . На следующей вкладке этого окна в качестве HEEP SIZE указан объем 8000,а не 2000 , как в вышеупомянутом файле....

Возможно вопросы глупые, но все же обьясните пожалуйста, что используется для распределения памяти, и почему в Comand file configuration tools такое распределение адресов?
Спасибо...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
scifi
сообщение Apr 24 2007, 06:51
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Действительно, линкер вомпринимает числа в опциях как шестнадцатеричные. К ним можно приписывать 0x как напоминание.
В опциях линекера Command Line Configuration Tool работает как-то непонятно. Откуда берёт входные данные - неясно. Ясно, что результат пишет в файл. Я бы лучше этот файл руками правил.
Посмотрите в .MAP файл, чтобы проверить, какого размера и где линкер разместил стек. Потом пройдите отладчиком по инициализации стека в cstartup и убедитесь, что инициализация правильная.
При предупреждении проверьте самостоятельно занятость стека. Может быть, отладчик неправильно воспринимает размер стека? Если стек действительно занят, можно при помощи JTAG и WATCHPOINT установить, какой код туда пишет.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


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

 


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


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