Обьясните дураку про Hardware Stack size

Обсуждаем контроллеры компании Atmel.
Ответить
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Вс мар 08, 2015 11:29:17

Сообщение qwerty13 »

Почему codevision avr выдает вот такую строчку при компиляции:

Hardware Stack area: 0x3E5 to 0x8FF
Hardware Stack size: 1307 byte(s)

Если в AVR нету аппаратного стека? (чип mega328). Спасибо.

И в чем вообще разница между Hardware Stack и Data Stack? еще раз спасибо.


Build: 128
0 line(s) compiled
No errors
No warnings

Bit variables size: 0 byte(s)

Data Stack area: 0x100 to 0x2FF
Data Stack size: 512 byte(s)
Estimated Data Stack usage: 4 byte(s)

RAM Global variables area: 0x300 to 0x3E4
RAM Global variables size: 229 byte(s)

Hardware Stack area: 0x3E5 to 0x8FF
Hardware Stack size: 1307 byte(s)

Heap size: 0 byte(s)

EEPROM usage: 0 byte(s), 0,0% of EEPROM
Program size: 1134 words (2268 bytes), 6,9% of FLASH
Реклама
Потрогал лапой паяльник
Сообщения: 312
Зарегистрирован: Вс июл 29, 2012 16:25:39

Сообщение mas123 »

qwerty13 писал(а):Если в AVR нету аппаратного стека? (чип mega328)
Здра-а-астье, приехали.
А как тогда происходит вызов подпрограмм, обработка прерываний? И что тогда в AVR делает регистр SP?
Есть там стек.
qwerty13 писал(а):И в чем вообще разница между Hardware Stack и Data Stack?
Аппаратный используется так сказать "аппаратурой".
Вызываешь подпрограмму - на [SP] забрасывается адрес возврата. А помимо "ручного" вызова подпрограмм есть ещё и обработка прерываний. И значения регистров можно там сохранять.

А стек данных - он уже программный. Что и как в нём хранить - решают авторы компилятора.
Реклама
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Сообщение COKPOWEHEU »

Не путайте. Аппаратный стек реализован в младших тиньках, в которых нет ОЗУ. Доступ к нему иначе чем через push-pop невозможен. Во всех остальных стек - часть ОЗУ (обычно он растет от RAMEND вниз).
На счет cvavr - где-то читал, что в cvavr и IAR реализовано два стека - один нормальный, для прерываний и подпрограмм, а второй - для данных, чисто программный, не факт что его вообще можно считать стеком, но наверное разработчикам виднее. Вроде бы они пытались так ускорить работу, но могут возникнуть проблемы с определением размера этих стеков.
Потрогал лапой паяльник
Сообщения: 312
Зарегистрирован: Вс июл 29, 2012 16:25:39

Сообщение mas123 »

COKPOWEHEU писал(а):Не путайте. Аппаратный стек реализован в младших тиньках, в которых нет ОЗУ
А, ну да - про эти камушки я совсем забыл. Точнее никогда не применял. :facepalm:
COKPOWEHEU писал(а):в cvavr и IAR реализовано два стека - один нормальный, для прерываний и подпрограмм, а второй - для данных, чисто программный,
Да, так и есть. Внутри функций сохранение регистров идет регистровую пару Y.
Кстати, в IAR "нормальный" обозван как "Return address stack (RSTACK)"
COKPOWEHEU писал(а):не факт что его вообще можно считать стеком
А почему? Стек как стек, LIFO режим...
Реклама
Эиком - электронные компоненты и радиодетали
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Сообщение COKPOWEHEU »

А почему? Стек как стек, LIFO режим...
В некоторых случаях было бы удобнее обращаться к ячейке по смещению относительно вершины стека либо двигать эту вершину, не меняя содержимое. Как это сделано на самом деле не знаю, никогда этими компиляторами не пользовался, так что просто предполагаю, что разработчики не стали себя искусственно ограничивать.
Реклама
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Вс мар 08, 2015 11:29:17

Сообщение qwerty13 »

Спасибо, хоть примерно понял в чем белеберда-то творится. А то я думаю что за аппаратный стек...
Реклама
Ответить

Вернуться в «AVR»