Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
23.07.2009, 15:50
|
|
Прописка
Регистрация: 13.02.2005
Сообщений: 250
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
переменную в стек на AVR
Как можно сохранить и потом использовать переменную помещенную в стек?
т.е. как записать в определенную ячейку стека и потом считать оттуда данные?
__________________
Що згорить - то не зігниє!
(c)ChiP
|
|
|
|
23.07.2009, 15:58
|
|
Супер-модератор
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,378
Сказал спасибо: 1,955
Сказали Спасибо 1,328 раз(а) в 578 сообщении(ях)
|
Re: переменную в стек на AVR
Сообщение от chipic128
|
Как можно сохранить и потом использовать переменную помещенную в стек?
т.е. как записать в определенную ячейку стека и потом считать оттуда данные?
|
О каком языке программирования идет речь? Если Си - то никак (ну если только программный свой стек сделать).
Если асм - то все зависит от системы команд процессора. В АВРках - только через РОН.
Определенной ячейки стека не бывает. В стек можно что-то поместить, и можно вынуть в обратном порядке. Стек - это обойма с патронами, если образно.
|
|
|
|
23.07.2009, 16:04
|
|
Гражданин KAZUS.RU
Регистрация: 30.04.2006
Сообщений: 984
Сказал спасибо: 5
Сказали Спасибо 18 раз(а) в 14 сообщении(ях)
|
Re: переменную в стек на AVR
Сообщение от chipic128
|
Как можно сохранить и потом использовать переменную помещенную в стек?
т.е. как записать в определенную ячейку стека и потом считать оттуда данные?
|
А смысл?
|
|
|
|
23.07.2009, 17:04
|
|
Прописка
Регистрация: 13.02.2005
Сообщений: 250
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
т.е. поместить туда и потом если надо забрать невозможно, Речь идет о ASM
а смысл в том что нужно хранить переменную, которая очень редко используется, а РОН маловато, жаль их тартить на пустяки...
я думал что можно записать как в память данных (сначала пишу адрес в XYZ а потом операция записи, чтения...) ну нет так нет... жаль, но все же придется тратить драгоценные РОН
__________________
Що згорить - то не зігниє!
(c)ChiP
|
|
|
|
23.07.2009, 17:10
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.06.2005
Сообщений: 1,389
Сказал спасибо: 19
Сказали Спасибо 210 раз(а) в 156 сообщении(ях)
|
А зачем в стек? Выделить просто адрес в памяти для хранения переменной. На асм без проблем.
|
|
|
|
23.07.2009, 18:49
|
|
Супер-модератор
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,378
Сказал спасибо: 1,955
Сказали Спасибо 1,328 раз(а) в 578 сообщении(ях)
|
Сообщение от chipic128
|
я думал что можно записать как в память данных (сначала пишу адрес в XYZ а потом операция записи, чтения...)
|
Именно так и надо делать. Стек - совсем для других целей.
так,
Код:
|
st Z,R16 - запишет R16 в память, адресуемую Z парой
ld R16,Y+ - прочтет в R16 -только по Y паре указателей и после чтения эту пару указателей инкрементирует
st R16,addr - прямое чтение. Занимает больше памяти программ |
Короче, читайте систему команд. В РОН производится обработка, ну и хранятся наиболее часто используемые переменные, если РОН хватает.
|
|
|
|
23.07.2009, 22:44
|
|
Прописка
Регистрация: 13.02.2005
Сообщений: 250
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Код:
|
st Z,R16 - запишет R16 в память, адресуемую Z парой
ld R16,Y+ - прочтет в R16 -только по Y паре указателей и после чтения эту пару указателей инкрементирует
st R16,addr - прямое чтение. Занимает больше памяти программ |
в память, но пространство етой памяти пересекается с пространством стека???
ОЗУ - ето та память о которой идет речь? стек тоже вроде в озу? правильно ли я понял
__________________
Що згорить - то не зігниє!
(c)ChiP
|
|
|
|
23.07.2009, 23:04
|
|
Супер-модератор
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,378
Сказал спасибо: 1,955
Сказали Спасибо 1,328 раз(а) в 578 сообщении(ях)
|
Сообщение от chipic128
|
в память, но пространство етой памяти пересекается с пространством стека???
ОЗУ - ето та память о которой идет речь? стек тоже вроде в озу? правильно ли я понял
|
А на то и программист, чтобы не пересекались. Обычно при старте программы указатель стека на конец ОЗУ е (она же память данных). А переменные в начале.
Стек, ессно, в ОЗУ. Он используется для хранения адресов возврата (подпрограммы, прерывания). Ну и если осторожно - можно там ВРЕМЕННО сохранять что требуется. Но это надо делать предельно аккуратно, достаточно что-то сунуть в стек и вовремя не вытащить - программа рухнет.
|
|
|
|
24.07.2009, 22:03
|
|
Прописка
Регистрация: 13.02.2005
Сообщений: 250
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Тогда если я обявил вершыну стека RAMEND, то сфои данные можно закидать в RAMEND-1... или сначала блока памяти?, т.е. стек пишется сначала или с конца?
__________________
Що згорить - то не зігниє!
(c)ChiP
|
|
|
|
24.07.2009, 23:36
|
|
Почётный гражданин KAZUS.RU
Регистрация: 22.06.2004
Адрес: Харьков
Сообщений: 1,488
Сказал спасибо: 3,207
Сказали Спасибо 3,010 раз(а) в 686 сообщении(ях)
|
RAMEND для различных МК имеет разное значение.
Для Attiny2313 имеем 32 регистра, 64 адреса пространства ВВ и еще 128 байт ОЗУ (см. рис. из даташита).
Обычно стек начинается с адреса 0xDF (RAMEND).
Если в стек положить 2 байта, адрес вершины стека станет 0xDD и т.д.
Свои переменные лучше размещать с адреса 0x60 и дальше 0x61, 0x62....
-- Прилагается рисунок: --
![](https://kazus.ru/nuke/users_images/24072009/3575025.gif)
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 21:40.
|
|