Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: стек ADuC812
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > MCS51
iskrovec
Всем доброго дня!
Подскажите плз как в ADuC812 указать начальный адрес и размер стека?
На С.
DPL
Смотря о каком стеке речь. Если об аппаратном, то как и в любом MCS51 - записать в SP адрес начала стека, уменьшеный на 1.
На С:
SP = 0x20;
Размер аппаратного стека в ADuC812, насколько я помню, задать нельзя (в обычном 51 точно нельзя).
Только вот обычно инициализация указателя стека выполняется в стартапе, который написан на языке ассемблера. Там то же самое будет выглядеть примерно так: MOV SP,#20h. Правда, нужно заметить, что за исключением каких-то специфических случаев, размещение аппаратного стека можно смело доверить компоновщику.
Если же речь идет о стеке для хранения локальных переменных, то для MCS51 он при необходимости обычно эмулируется программно. В Кейле его параметры задаются в том же стартапе (STARTUP.A51), в других средах разработки - не знаю, но, видимо, аналогично.
lks
Цитата(iskrovec @ Jun 24 2006, 14:47) *
Всем доброго дня!
Подскажите плз как в ADuC812 указать начальный адрес и размер стека?
На С.


Приходилось программировать ADuC - но не 812. На Си эти параметры задаются в настройках компилятора. Компиляторы все очень разные.
iskrovec
Работаю в Кейле. В зависимости от используемой памяти начальный указатель стека тоже будет плавать. Если я напишу SP = 0x20 он будет 100% там, или на усмотрение компилятора?
iskrovec
Проверил - работает! smile.gif
DPL
Да, так он будет 100% с адреса 21h. Но в этом случае за правильным размещением стека в памяти придется следить самостоятельно (нужно будет обеспечить, чтобы в этих адресах не располагались какие-либо другие данные). Если SP не трогать, то эту работу автоматически выполнит компоновщик (под стек будет отведена вся свободная память IDATA, оставшаяся после размещения других сегментов: с конца последнего сегмента и до адреса 0FFh)
iskrovec
Цитата(DPL @ Jun 28 2006, 16:17) *
Да, так он будет 100% с адреса 21h. Но в этом случае за правильным размещением стека в памяти придется следить самостоятельно (нужно будет обеспечить, чтобы в этих адресах не располагались какие-либо другие данные). Если SP не трогать, то эту работу автоматически выполнит компоновщик (под стек будет отведена вся свободная память IDATA, оставшаяся после размещения других сегментов: с конца последнего сегмента и до адреса 0FFh)


Это я просто накосячил с размером массива, и у меня стек перетирался, вот и решил ему тупо указать что и где. smile.gif думал совсем не рулит кейл, а оказалось - я smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.