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

 
 
> EW430-4.21 Утекает стек
Галстук
сообщение Oct 26 2009, 14:39
Сообщение #1


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

Группа: Свой
Сообщений: 112
Регистрация: 5-12-05
Из: Москва, Россия
Пользователь №: 11 818



Всем доброго времени суток!

Просветите, пожалуйста.

Есть такая функция, которая чинно-благородно вызывает другую функцию, а та еще одну, а та еще одну - и рисует буковку.

CODE
void RenderStringDisplay(const char *pString, const CharInfo *pFont,
uint16 row, uint16 column, uint16 spacing,
uint16 address)
{
uint16 x, y, initColumn;
const CharInfo *pCharInfo;

initColumn = column;

// Loop through characters until NULL (0) found.
while (*pString)
{
if (*pString == '\n') // Newline character?
{
column = initColumn;
row += spacing;
}
else // Not new line.
{
// Compute pointer to font information for current character.
pCharInfo = &pFont[(unsigned char)*pString];

// Compute origin of character bounding box.
x = column + pCharInfo->offsetX;
y = row - pCharInfo->offsetY - pCharInfo->height + 1;

// Display the character
DrawDisplayCharacter(pCharInfo, y, x, address);

// Advance along line by appropriate horizontal spacing.
column += pCharInfo->dwidth;
}

// Advance to next character.
pString++;
}
}


Все это прекрасно работает в отладчике, однако при возврате указатель стека уменьшается на 4. После нескольких вызовов уже начинает ругаться отладчик на переполнение стека. Впрочем, программа никуда не улетает и продолжает работать. Все прерывания запрещены.
Если выбрать опцию reduce stack usage, то это дело прекращается, SP при возврате возвращается точно назад. Что бы это значило?
При этом более простенькии функции с меньшей иерархией вложений стек отдают.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 05:55
Рейтинг@Mail.ru


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