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

 
 
> Стек ряпается, Проблемы со стеком
Master
сообщение May 24 2006, 13:40
Сообщение #1


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

Группа: Новичок
Сообщений: 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
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
aaarrr
сообщение May 24 2006, 17:06
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(zltigo @ May 24 2006, 20:35) *
Э... А может все с Undefined начинается. А?

Не похоже: левый адрес возврата на стеке -> undefined.

Скорее глючит какая-нибудь из многочисленных вызываемых подпрограмм.
Я бы закомментил все, а затем подлючал по одной...
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 24 2006, 17:27
Сообщение #3


Гуру
******

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



Цитата(aaarrr @ May 24 2006, 20:06) *
Не похоже: левый адрес возврата на стеке -> undefined.

??? По каким признакам сделан вывод?

Или стек переключился. Причем для Undefined он не инициализирован в принципе.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Master
сообщение May 24 2006, 18:01
Сообщение #4


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

Группа: Новичок
Сообщений: 170
Регистрация: 26-05-05
Из: Москва
Пользователь №: 5 405



Цитата(zltigo @ May 24 2006, 21:27) *
Цитата(aaarrr @ May 24 2006, 20:06) *

Не похоже: левый адрес возврата на стеке -> undefined.

??? По каким признакам сделан вывод?

Или стек переключился. Причем для Undefined он не инициализирован в принципе.

Уважаемый zltigo! Прежде всего я благодарю Вас за участие и внимание к моей проблеме. Но вынужден заметить, что по-моему дело не в размере/расположении/названии стека - всё это я разумеется могу выдать (кстати по поводу оценки размера стека можно почитать здесь, где Andy Mozzhevilov также озадачивался данной проблемой).
Со своей стороны надеюсь, что Вы, давая совет считать размер стека, сами выполняли данную процедуру и готовы поделиться своими успехами.
Я вероятно не уточнил, каким образом меняется дерево Call Stack: адрес начала стека ведёт себя подобающим образом (тобишь при заходе в функцию уменьшается, при выходе - увеличивается), но вот содержимое стека после выполнения одной из итераций цикла частично меняется. По каким причинам это происходит, для меня - загадка.

P.S. Сегодня силы кончились, но я успел установить с помощью окна дизассемблера, что стек портится на операции POP {R4,R5,R6,R7}...
Go to the top of the page
 
+Quote Post
spf
сообщение May 25 2006, 10:49
Сообщение #5


Странник
****

Группа: Свой
Сообщений: 766
Регистрация: 29-08-05
Из: Екатеринбург
Пользователь №: 8 051



Цитата(Master @ May 25 2006, 00:01) *
Уважаемый zltigo! Прежде всего я благодарю Вас за участие и внимание к моей проблеме. Но вынужден заметить, что по-моему дело не в размере/расположении/названии стека - всё это я разумеется могу выдать (кстати по поводу оценки размера стека можно почитать здесь, где Andy Mozzhevilov также озадачивался данной проблемой).
Со своей стороны надеюсь, что Вы, давая совет считать размер стека, сами выполняли данную процедуру и готовы поделиться своими успехами.

Как то раз были у нас в конторе заскоки со стеком у MB90, долго маялись, в конце концов написал калькулятор стека (кстати, глядя на который Andy Mozzhevilov и затевал разговор) - calc_stk, но и это не помогло, дальнейший тЩательный разбор полетов выявил наезд стека на переменную, теперь все гуд.

Это к тому что не стоит отбрасывать ни одну версию до последнего ... и проверять все очень тщательно и свежей/трезвой головой.


--------------------
"Как много есть на свете вещей, которые мне не нужны!" Сократ
Go to the top of the page
 
+Quote Post
Master
сообщение May 25 2006, 12:45
Сообщение #6


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

Группа: Новичок
Сообщений: 170
Регистрация: 26-05-05
Из: Москва
Пользователь №: 5 405



Цитата(spf @ May 25 2006, 13:49) *
Как то раз были у нас в конторе заскоки со стеком у MB90, долго маялись, в конце концов написал калькулятор стека (кстати, глядя на который Andy Mozzhevilov и затевал разговор) - calc_stk, но и это не помогло, дальнейший тЩательный разбор полетов выявил наезд стека на переменную, теперь все гуд.

В чём оказалась проблема? Если можно, расскажите поподробнее. У меня, чувствуется, похожая ситуация.
Причём отследить мне так и не удалось, на какой операции программа вылетает в exception, т.к. происходит это в разных местах. Поставлю бряк в одном месте, она вылетает в другом. В общем, мистика да и только.


Цитата(Master @ May 25 2006, 15:36) *
В чём оказалась проблема? Если можно, расскажите поподробнее. У меня, чувствуется, похожая ситуация.

Получил подтверждение тому, что что-то лезет на стек: вставил задержку перед выводом в DebugUnit, и стек слетать перестал. Посему очень интересен Ваш способ выхода из данной ситуации.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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
- - Alex03   Иногда один стек на другой "налезает". П...   May 24 2006, 15:21
|- - Master   ЦитатаЧудес не бывает. Для того, чтобы запороть ст...   May 24 2006, 16:30
|- - zltigo   Цитата(Master @ May 24 2006, 19:30) В это...   May 24 2006, 16:35
|- - 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


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

 


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


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