|
|
  |
проблема со стеком в IAR |
|
|
|
Apr 23 2007, 14:41
|
Частый гость
 
Группа: Новичок
Сообщений: 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 такое распределение адресов? Спасибо...
|
|
|
|
|
Apr 24 2007, 09:49
|
Знающий
   
Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847

|
А еще, на сколько я помню, 0x2000 + 0x2000 равно объему RAM (16К) для LPC2214. Может это не проблема стека, а проблема нехватки RAM?
--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть. © Lewis Carroll. Alice's adventures in wonderland.
|
|
|
|
|
Apr 24 2007, 10:10
|
Частый гость
 
Группа: Свой
Сообщений: 82
Регистрация: 14-03-06
Из: Санкт-Петербург
Пользователь №: 15 227

|
Цитата(amw @ Apr 24 2007, 10:49)  Может это не проблема стека, а проблема нехватки RAM? Сталкивался с подобным на RM9200, тот же IAR. Область стека специально проверял - забито не более чем несколькими вложенными вызовами. Одна из фич, которые к такому приводили - размещение локальных буферов в main (их размер + вложенные вызовы много меньше размера выделенного стека). После перенесения их за пределы main - подобное предупреждение исчезло. Фича или глюк - но имело место быть.
|
|
|
|
|
Aug 24 2007, 14:16
|
Местный
  
Группа: Свой
Сообщений: 335
Регистрация: 17-06-04
Из: Москва
Пользователь №: 35

|
Цитата(IgorKossak @ Apr 24 2007, 14:15)  Возможно также, что в функции main или какой-то другой обьявлен большой локальный массив. И что в этом случае надо делать?
--------------------
Всегда не хватает времени, чтобы выполнить работу как надо, но на то, чтобы ее переделать, время находится. (Закон Мескимена.)
|
|
|
|
|
Aug 26 2007, 16:23
|
Местный
  
Группа: Участник*
Сообщений: 418
Регистрация: 20-08-07
Пользователь №: 29 930

|
Цитата(Sarez @ Apr 24 2007, 15:47)  to cf7k и IgorKossak : Да, действительно, Вы оказались правы. В main были размещены локальные буфера - работали на прием данных из стека Wiznet...
Большое всем спасибо! Добавлю свои три копейки: Для анализа размеров получившегося бинарника - вообще-то можно после линковки посмотреть в файл *.map - мне что-то подсказывает, что IAR его тоже делает... Наверное интуиция...
Сообщение отредактировал Николай Z - Aug 26 2007, 17:02
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|