Почав розбирати IAR той код якої він виробляє в AVR Studio і помітив що він встановлює не те початок мені стека
ось викладка з АВР студії
код:
@ 0000007F. C_STARTUP
+0000007F: E90F LDI R16,0x9F Load immediate
+00000080: BF0D OUT 0x3D, R16 Out to I / O location
+00000081: E000 LDI R16,0x00 Load immediate
+00000082: BF0E OUT 0x3E, R16 Out to I / O location
і стек тут він починає з 0x9f а повинен з 0x45f може це десь можна виправити в Option підкажіть
Вже знайшов в в Options вікно General Options вкладка System в рядку Data Stack Size bytes потрібно проставити 0x3e0 тоді стек буде дорівнює 0x45f до цього стояло 0x20
але до цього прийшов методом розрахунку а як воно виходить що 0x20 це запис в SPL 0x9f незрозуміло
Вже знайшов в в Options вікно General Options вкладка System в рядку Data Stack Size bytes потрібно проставити 0x3e0 тоді стек буде дорівнює 0x45f до цього стояло 0x20
але до цього прийшов методом розрахунку а як воно виходить що 0x20 це запис в SPL 0x9f незрозуміло
Так просто не вийде - треба міняти і скрипт линкера. Ви ж всю пам'ять під стек повернень віддали. Як IAR глобальні змінні виділятиме? місця-то немає.
Можна і так налаштувати, тільки який в цьому сенс? Головне вибрати достатні розміри стеків, а де вони розташовані не так вже й важливо. Важко сказати що гірше - щоб стік наїжджав на "чужу" облать ОЗУ або на простір регістрів введення-виведення. І так і так глючить буде, хіба що по-різному.