Vicont писал(а):что будет, если при использовании команды rcall не провести инициализацию стека?
тогда при выполнении подпрограммы адрес команды в ОЗУ может затереться другой информацией и программа уже не сможет к нему вернуться? верно?
Да.
Vicont писал(а):что будет, если при использовании команды rcall не провести инициализацию стека?
тогда при выполнении подпрограммы адрес команды в ОЗУ может затереться другой информацией и программа уже не сможет к нему вернуться? верно?
Vicont писал(а):Можно ли так делать в реале?
Gudd-Head писал(а):Значит, при вызове подпрограммы первый байт адреса сохранится в R0 (ОЗУ с адресом 0000), а второй скорее всего пропадёт, т.к. я не припомню АВР с 64к ОЗУ (адрес FFFF). Возможно такое прокатит с МК, у которых однобайтный указатель стека и 256 байт ОЗУ.
Vicont писал(а):Как адрес команды может сохраняться в разных регистрах ОЗУ?
ploop писал(а):2 байта, кстати, независимо от размера ОЗУ.
Извиняюсь, я Вас не правильно понял, Вы говорили о байтах а я подумал, что о битах...Gudd-Head писал(а):Вот так. Он занимает 2 соседних байта...
Получается, если старшего байта в нем вообще нет, то и потеряться ведь он не может...В целях унификации кода для всех контроллеров, в 2313 у SPL оставили на конце букву L, хотя никакого SPH в данном контроллере нет и быть не может.
Таки оно должно зависеть от резмера флэша (который у всех АВРок >= 512 байт), а не ОЗУ. Не?
Vicont писал(а):Очевидно под двумя соседними байтами Вы имеете в виду SPH и SPL?
Gudd-Head писал(а):Видимо, вы путаете указатель стека и сам стек...
Разве AT90s2313 и ATTiny2313 нельзя отнести к их числу? В ведь по даташиту у них 128 байт SRAM + 32 РОН...Gudd-Head писал(а):Возможно такое прокатит с МК, у которых однобайтный указатель стека и ровно 256 байт ОЗУ (включая РОН и РВВ).
Vicont писал(а):Разве AT90s2313 и ATTiny2313 нельзя отнести к их числу? В ведь по даташиту у них 128 байт SRAM + 32 РОН...
Вобще-то у 2313 весь диапазон ОЗУ 0x00…0xDF (224 байта)...Gudd-Head писал(а):У 2313 ОЗУ заканчивается адресом 0хЕ0
Вы имеете в виду, что МК то запихнуть пробовать будет, а адрес 0хFF не входит в диапазон ОЗУ и он его запихнет неизвестно куда?МК будет пробовать запихнуть второй байт по адресу 0хFF.
Vicont писал(а):весь диапазон ОЗУ 0x00…0xDF (224 байта)...
МК то запихнуть пробовать будет, а адрес 0хFF не входит в диапазон ОЗУ и он его запихнет неизвестно куда?
Gudd-Head писал(а):Мдя. Значит, в ДШ ATtiny2313A/4313 ошибка — написано что 128 байт SRAM имеют адреса 0x060 – 0x0E0![]()
Но адреса 0x0E0 там нет...Итак, мы имеем 128 байт оперативной памяти (ОЗУ).
Смотрим рисунок из даташита:
На нем изображена вся оперативная память, имеющаяся в контроллере. Она занимает диапазон значений $00…$DF , то есть – 224 байта.