|
Стек ряпается, Проблемы со стеком |
|
|
|
May 24 2006, 13:40
|
Частый гость
 
Группа: Новичок
Сообщений: 170
Регистрация: 26-05-05
Из: Москва
Пользователь №: 5 405

|
Доброго времени суток! Не знаю, как грамотно изложить пробему, но факт в том, что при выполнении очередной итерации цикла в функции происходит изменение дерева Call Stack в окне IAR Embedded Workbench (4.31). Соответственно функция, вызванная из main(), по выполнении указанного цикла обратно больше не возвращается, и заканчивается это дело прерыванием Undefined. Бьюсь весь день, не могу понять, где собака рылась. Ясно, что много неопределённостей, но может есть у кого мысли? Железки: AT91SAM7S64, J-Link + RDI. Добавлю на всякий случай окончание map-файла: Код 01 _LitobSmall | Stack used (prev) : 00000AC8 | + function block : 00000018 <-Sub-tree of type: Function tree | Stack used : 00000AE0
**************************************** * * * SEGMENTS IN ADDRESS ORDER * * * ****************************************
SEGMENT SPACE START ADDRESS END ADDRESS SIZE TYPE ALIGN ======= ===== ============= =========== ==== ==== ===== INTVEC 00000000 - 0000003F 40 com 2 ICODE 00000040 - 00000253 214 rel 2 DIFUNCT 00000254 - 0000027B 28 rel 2 CODE 0000027C - 00006D57 6ADC rel 2 INITTAB 00006D58 - 00006D6F 18 rel 2 DATA_ID 00006D70 - 00006F3B 1CC rel 2 DATA_C 00006F3C - 00007B18 BDD rel 2 DATA_I 00200000 - 002001CB 1CC rel 2 DATA_Z 002001CC - 00200CD5 B0A rel 2 HEAP 00200CD8 - 00201CD7 1000 rel 2 CSTACK 00201CD8 - 002030D7 1400 stk 2 SVC_STACK 002030D8 - 00203117 40 stk 2 IRQ_STACK 00203118 - 00203517 400 stk 2 FIQ_STACK 00203518 - 00203557 40 stk 2
**************************************** * * * END OF CROSS REFERENCE * * * ****************************************
27 992 bytes of CODE memory 13 654 bytes of DATA memory 3 521 bytes of CONST memory
Errors: none Warnings: none
Сообщение отредактировал Master - May 24 2006, 13:43
|
|
|
|
|
 |
Ответов
|
May 24 2006, 16:30
|
Частый гость
 
Группа: Новичок
Сообщений: 170
Регистрация: 26-05-05
Из: Москва
Пользователь №: 5 405

|
Цитата Чудес не бывает. Для того, чтобы запороть стек совсем не обязательно использовать абсолютные адреса. Скорее всего, где-нибудь переполняется буфер или неправильно используется указатель. Рою, но пока безуспешно. Цитата(Alex03 @ May 24 2006, 19:21)  Иногда один стек на другой "налезает". Проверьте размеры стеков IRQ, FIQ Вот фрагмент линковочного xcl-файла: Код //************************************************************************* // Stack and heap segments. //************************************************************************* // in hexadecimal value! -D_FIQ_STACK_SIZE=(2*8*4) -D_IRQ_STACK_SIZE=(20*8*4) -D_SVC_STACK_SIZE=(2*8*4) -D_CSTACK_SIZE=(40*8*4) -D_HEAP_SIZE=1000
-Z(DATA)HEAP+_HEAP_SIZE=RAMSTART-RAMEND -Z(DATA)CSTACK+_CSTACK_SIZE=RAMSTART-RAMEND -Z(DATA)SVC_STACK+_SVC_STACK_SIZE=RAMSTART-RAMEND -Z(DATA)IRQ_STACK+_IRQ_STACK_SIZE=RAMSTART-RAMEND -Z(DATA)FIQ_STACK+_FIQ_STACK_SIZE=RAMSTART-RAMEND В этом я полагаюсь на компилятор. Если памяти не хватает, при компиляции выдаются сообщения. Пока не дошёл до того, чтобы проверять и в этом компилятор
|
|
|
|
|
May 24 2006, 16:35
|

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

|
Цитата(Master @ May 24 2006, 19:30)  В этом я полагаюсь на компилятор. Если памяти не хватает, при компиляции выдаются сообщения. Жесточайшее заблуждение по отношению к стеку. Думайте прежде всего сами о его размере, увеличивайте, измеряйте использованный. Компилятор это за Вас не сделает. Не по тому, что он 'плохой', а по тому, что невозможно. Кстати, сможете ответить на вопрос - в каком стеке Вы при этом работаете? Цитата указанного цикла обратно больше не возвращается, и заканчивается это дело прерыванием Undefined. Э... А может все с Undefined начинается. А?
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
Сообщений в этой теме
Master Стек ряпается May 24 2006, 13:40 aaarrr Что функция в цикле делает? Использует ли heap? May 24 2006, 13:50 Master Цитата(aaarrr @ May 24 2006, 17:50) Что ф... May 24 2006, 14:14 GetSmart Пардон, уже появилась процедура. May 24 2006, 14:22 Master Цитата(GetSmart @ May 24 2006, 18:22) Воо... May 24 2006, 14:30 aaarrr Чудес не бывает. Для того, чтобы запороть стек сов... May 24 2006, 14:46 aaarrr Цитата(zltigo @ May 24 2006, 20:35) Э... ... May 24 2006, 17:06 zltigo Цитата(aaarrr @ May 24 2006, 20:06) Не по... May 24 2006, 17:27  Master Цитата(zltigo @ May 24 2006, 21:27) Цитат... May 24 2006, 18:01   spf Цитата(Master @ May 25 2006, 00:01) Уважа... May 25 2006, 10:49    Master Цитата(spf @ May 25 2006, 13:49) Как то р... May 25 2006, 12:45     spf Цитата(Master @ May 25 2006, 18:45) В чём... May 26 2006, 04:05      Alex03 Цитата(spf @ May 26 2006, 10:05) Проблема... May 26 2006, 06:59 GetSmart ЦитатаP.S. Сегодня силы кончились, но я успел уста... May 24 2006, 18:30 aaarrr Ztigo, Вы меня удивляете, честное слово!
Цитат... May 24 2006, 19:33 zltigo Цитата(aaarrr @ May 24 2006, 22:33) Как п... May 24 2006, 19:45  Master ЦитатаЧерканите, когда ...
Уважаемый zltigo! В... May 24 2006, 19:51 sapID Для поиска таких ошибок удобно использовать Hardwa... May 25 2006, 04:29 Master Цитата(sapID @ May 25 2006, 07:29) Для по... May 25 2006, 09:00  sapID Цитата(Master @ May 25 2006, 15:00) Цитат... May 26 2006, 04:33
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|