Jump to content

    

Непонятное поведение стека

Есть IAR 4.11 for MSP430, вот наиболее важный код программы:

//files.h:
...
typedef struct _DIRCACHE
{
  unsigned short filenumber;
  char name[13];
}DIRCACHE;
...

//files.cpp:
#include "files.h"
...
void func()
{
...
  DIRCACHE dircache[32];
...
}

 

 

При вызове func() отладчик IAR сообщает о переполнении стека (см. аттач), но программа продолжает нормально работать. Из-за чего это происходит и как это устранить? И что такое <pad>?

post-37959-1226676002_thumb.jpg

Edited by LCD

Share this post


Link to post
Share on other sites

А у вас есть в наличии 512 байт стека для локальной переменной?

Share this post


Link to post
Share on other sites

Да, я стек сделал 4 кб. Но ИАР пишет, что ему надо 170 кб!

Share this post


Link to post
Share on other sites

Скриншот был сделан, когда char name[] был не 13, а 16 байт.

Share this post


Link to post
Share on other sites

При заходе в функцию, когда отладчик покажет сообщение о переполнение стека посмотрите что находится в SP.

Share this post


Link to post
Share on other sites

Нет, о переполнении он не сообщает, но в окне стека показывает какой-то бред.

Edited by LCD

Share this post


Link to post
Share on other sites
Нет, о переполнении он не сообщает, но в окне стека показывает какой-то бред.
А вы случайно ОС не используете в своем проекте?

Share this post


Link to post
Share on other sites
Нет, о переполнении он не сообщает...
При вызове func() отладчик IAR ообщает о переполнении стека (см. аттач)
В бы уже определились...

Share this post


Link to post
Share on other sites
А вы случайно ОС не используете в своем проекте?

ОС - это RTOS или подобное? Нет, не использую.

В бы уже определились...

Нет, не переполняется. Но при остановке на брейкпоинте отладчик долго "думает", наверное, считывает то, что считает содержимым стека.

Share this post


Link to post
Share on other sites
Нет, не переполняется. Но при остановке на брейкпоинте отладчик долго "думает", наверное, считывает то, что считает содержимым стека.
Возможность просмотра стека со списком переменных появилась толко в 4.11B (в 4.10A это не работатет - просто выводится содержимое стека). Это глюк отладчика, точнее плугина "Stack".

Покуда (имхо) этой версией мало кто пользуется, то данных проблем не испытывали. Если нужно посмотреть локальные переменные пользуйтесь View/Locals.

Share this post


Link to post
Share on other sites

Спасибо, но у меня остались сомнения, что это не глюк.

Share this post


Link to post
Share on other sites
Спасибо, но у меня остались сомнения, что это не глюк.
Так расскажите...

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this