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

 
 
 
Reply to this topicStart new topic
> Непонятное поведение стека, чайниковский вопрос
LCD
сообщение Nov 14 2008, 15:20
Сообщение #1


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

Группа: Участник
Сообщений: 92
Регистрация: 1-06-08
Пользователь №: 37 959



Есть 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>?

Сообщение отредактировал LCD - Nov 14 2008, 15:22
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
diper
сообщение Nov 14 2008, 15:29
Сообщение #2


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

Группа: Свой
Сообщений: 94
Регистрация: 12-11-05
Из: Росиия, Нижний Новгород
Пользователь №: 10 750



А у вас есть в наличии 512 байт стека для локальной переменной?
Go to the top of the page
 
+Quote Post
LCD
сообщение Nov 14 2008, 15:36
Сообщение #3


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

Группа: Участник
Сообщений: 92
Регистрация: 1-06-08
Пользователь №: 37 959



Да, я стек сделал 4 кб. Но ИАР пишет, что ему надо 170 кб!
Go to the top of the page
 
+Quote Post
LCD
сообщение Nov 14 2008, 19:40
Сообщение #4


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

Группа: Участник
Сообщений: 92
Регистрация: 1-06-08
Пользователь №: 37 959



Скриншот был сделан, когда char name[] был не 13, а 16 байт.
Go to the top of the page
 
+Quote Post
diper
сообщение Nov 14 2008, 20:54
Сообщение #5


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

Группа: Свой
Сообщений: 94
Регистрация: 12-11-05
Из: Росиия, Нижний Новгород
Пользователь №: 10 750



При заходе в функцию, когда отладчик покажет сообщение о переполнение стека посмотрите что находится в SP.
Go to the top of the page
 
+Quote Post
LCD
сообщение Nov 14 2008, 22:24
Сообщение #6


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

Группа: Участник
Сообщений: 92
Регистрация: 1-06-08
Пользователь №: 37 959



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

Сообщение отредактировал LCD - Nov 14 2008, 22:24
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 15 2008, 08:29
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(LCD @ Nov 15 2008, 00:24) *
Нет, о переполнении он не сообщает, но в окне стека показывает какой-то бред.
А вы случайно ОС не используете в своем проекте?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
diper
сообщение Nov 15 2008, 08:57
Сообщение #8


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

Группа: Свой
Сообщений: 94
Регистрация: 12-11-05
Из: Росиия, Нижний Новгород
Пользователь №: 10 750



Цитата(LCD @ Nov 15 2008, 01:24)
Нет, о переполнении он не сообщает...
Цитата(LCD @ Nov 14 2008, 18:20)
При вызове func() отладчик IAR ообщает о переполнении стека (см. аттач)
В бы уже определились...
Go to the top of the page
 
+Quote Post
LCD
сообщение Nov 15 2008, 15:22
Сообщение #9


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

Группа: Участник
Сообщений: 92
Регистрация: 1-06-08
Пользователь №: 37 959



Цитата(Сергей Борщ @ Nov 15 2008, 11:29) *
А вы случайно ОС не используете в своем проекте?

ОС - это RTOS или подобное? Нет, не использую.
Цитата(diper @ Nov 15 2008, 11:57) *
В бы уже определились...

Нет, не переполняется. Но при остановке на брейкпоинте отладчик долго "думает", наверное, считывает то, что считает содержимым стека.
Go to the top of the page
 
+Quote Post
diper
сообщение Nov 15 2008, 16:26
Сообщение #10


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

Группа: Свой
Сообщений: 94
Регистрация: 12-11-05
Из: Росиия, Нижний Новгород
Пользователь №: 10 750



Цитата(LCD @ Nov 15 2008, 18:22) *
Нет, не переполняется. Но при остановке на брейкпоинте отладчик долго "думает", наверное, считывает то, что считает содержимым стека.
Возможность просмотра стека со списком переменных появилась толко в 4.11B (в 4.10A это не работатет - просто выводится содержимое стека). Это глюк отладчика, точнее плугина "Stack".
Покуда (имхо) этой версией мало кто пользуется, то данных проблем не испытывали. Если нужно посмотреть локальные переменные пользуйтесь View/Locals.
Go to the top of the page
 
+Quote Post
LCD
сообщение Nov 18 2008, 09:42
Сообщение #11


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

Группа: Участник
Сообщений: 92
Регистрация: 1-06-08
Пользователь №: 37 959



Спасибо, но у меня остались сомнения, что это не глюк.
Go to the top of the page
 
+Quote Post
diper
сообщение Nov 18 2008, 11:24
Сообщение #12


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

Группа: Свой
Сообщений: 94
Регистрация: 12-11-05
Из: Росиия, Нижний Новгород
Пользователь №: 10 750



Цитата(LCD @ Nov 18 2008, 12:42) *
Спасибо, но у меня остались сомнения, что это не глюк.
Так расскажите...
Go to the top of the page
 
+Quote Post

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

 


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


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