реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Окно компиляции CodeVision, что такое Hardware stack
AndreyVN
сообщение Nov 28 2006, 08:34
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 754
Регистрация: 29-06-06
Из: Volgograd
Пользователь №: 18 458



Всем привет!

Внизу приведен фрагмент содержимого окна, которое выдает CodeVision после компилляции программы.
Непонятна строка "Hardware Stack area" это что за стек такой???
Судя по размеру, это остаток ОЗУ, но почему его так странно назвали?

Цитата
1129 line(s) compiled
No errors
No warnings

Bit variables size: 0 byte(s)

Data Stack area: 60h to AFh
Data Stack size: 80 byte(s)
Estimated Data Stack usage: 43 byte(s)

Global variables area: B0h to 315h
Global variables size: 614 byte(s)

Hardware Stack area: 316h to 45Fh
Hardware Stack size: 330 byte(s)

EEPROM usage: 0 byte(s) (0,0% of EEPROM)
Program size: 1915 words (46,8% of FLASH)
Go to the top of the page
 
+Quote Post
viael
сообщение Nov 28 2006, 10:15
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 200
Регистрация: 10-04-06
Из: Украина,Запорожье
Пользователь №: 15 979



Цитата(AndreyVN @ Nov 28 2006, 09:34) *
Всем привет!

Внизу приведен фрагмент содержимого окна, которое выдает CodeVision после компилляции программы.
Непонятна строка "Hardware Stack area" это что за стек такой???
Судя по размеру, это остаток ОЗУ, но почему его так странно назвали?

Цитата
1129 line(s) compiled
No errors
No warnings

Bit variables size: 0 byte(s)

Data Stack area: 60h to AFh
Data Stack size: 80 byte(s)
Estimated Data Stack usage: 43 byte(s)

Global variables area: B0h to 315h
Global variables size: 614 byte(s)

Hardware Stack area: 316h to 45Fh
Hardware Stack size: 330 byte(s)

EEPROM usage: 0 byte(s) (0,0% of EEPROM)
Program size: 1915 words (46,8% of FLASH)



У АВР есть т.н. Hardware Stack в котором сохраняются адреса возвратов, и переменные помещаемые туда командой PUSH. Вершиину стека адресует SP, который необходимо проинициализировать при старте программы. Т.о. адресное пространство между верхушкой памяти(обычно CV инициализирует SP=SRAM_END) и последней глабальной переменной и есть Hardware Stack area.
А вобще в хелпе CV данный момент подробно расписан-SRAM Memory Organization.

The Data Stack area is used to dynamically store local variables, passing function parameters and saving registers R0, R1, R15, R22, R23, R24, R25, R26, R27, R30, R31 and SREG during interrupt routine servicing.
The Data Stack Pointer is implemented using the Y register.

The Hardware Stack area is used for storing the functions return addresses.
The SP register is used as a stack pointer and is initialized at start-up with value of of the _HEAP_START_ -1 address.
During the program execution the Hardware Stack grows downwards to the Global Variables area.
Go to the top of the page
 
+Quote Post
AndreyVN
сообщение Nov 28 2006, 14:09
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 754
Регистрация: 29-06-06
Из: Volgograd
Пользователь №: 18 458



Цитата
The Data Stack area is used to dynamically store local variables, passing function parameters and saving registers R0, R1, R15, R22, R23, R24, R25, R26, R27, R30, R31 and SREG during interrupt routine servicing.
The Data Stack Pointer is implemented using the Y register.

The Hardware Stack area is used for storing the functions return addresses.
The SP register is used as a stack pointer and is initialized at start-up with value of of the _HEAP_START_ -1 address.
During the program execution the Hardware Stack grows downwards to the Global Variables area.


Ну накрутили... Это что-ж получается, два стек-пойнтера надо? Один для Data stck, другой для Hardware stack? И два типа "Пушов" и "Попов" тоже. Короче, пошел читать Manual внимательнее, издеваются над программерами blink.gif .
Go to the top of the page
 
+Quote Post
_Bill
сообщение Nov 28 2006, 14:42
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Цитата(AndreyVN @ Nov 28 2006, 14:09) *
Ну накрутили... Это что-ж получается, два стек-пойнтера надо? Один для Data stck, другой для Hardware stack? И два типа "Пушов" и "Попов" тоже. Короче, пошел читать Manual внимательнее, издеваются над программерами blink.gif .

Вся проблема в том, что у AVR нет стековой адресации и, стало быть, доступ к данным в стеке затруднен. Использование Y-регистра (не X или Z, заметьте) выглядит очень логично. Опять же разделение стековой памяти на стек возвратов и стек данных дает определенную свободу программисту и облегчает выяснение причин неккоректности работы программ, особенно в тех случаях, когда стековая память используется интенсивно.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 14:22
Рейтинг@Mail.ru


Страница сгенерированна за 0.01345 секунд с 7
ELECTRONIX ©2004-2016