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

 
 
> Как задать размер CSTACK?, IAR for ARM
Dmitro25
сообщение Aug 15 2013, 12:33
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 60
Регистрация: 4-04-07
Пользователь №: 26 770



Здравствуйте.
Начал осваивать ARM, использую для компиляции и отладки IAR.
Столкнулся с проблемой некорректно работающей функции printf, причина проблемы оказалась в недостаточном размере стека (CSTACK). Что меня неприятно поразило - так это то, что в настройках линкера размер стека задан достаточно большим для моего проекта (0x400). Однако, когда я стал запускать проект в эмуляторе, оказалось, что указатель стека (R13) принимает при старте программы не указанное мной значение, а значительно меньшее.
Увеличить начальное значение указателя стека удалось изменением следующей строчки в strtup-файле:
Код
static unsigned long pulStack[64] @ ".noinit";

Размер массива был увеличен с 64 до 256.
Далее pulStack фигурирует в таблице векторов прерываний:
Код
__root const uVectorEntry __vector_table[] @ ".intvec" =
{
    { .ulPtr = (unsigned long)pulStack + sizeof(pulStack) },
...

Я так понял, что в качестве первого вектора в таблице прерываний указывается начальный размер стека. Но тогда почему при инициализации вектора не используются константы, связанные с задаваемым размером CSTACK?
В результате получается, что заданный для линкера размер CSTACK нигде в программе не фигурирует?
Возможно, я взял "неправильный" startup-файл или упускаю какую-то другую важную деталь?

PS: контроллер ARM Stellaris Cortex M3 LM3S9971; компилятор IAR for ARM v6.50

Сообщение отредактировал Dmitro25 - Aug 16 2013, 04:54
Go to the top of the page
 
+Quote Post



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

 


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


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