[an error occurred while processing this directive]
Под стек ты отдаешь не все ОЗУ, а всего-навсего начинаешь свой стек с конца ОЗУ
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено =AVR= 21 октября 2006 г. 16:08
В ответ на: Огромное спасибо! + отправлено Aleksey75 21 октября 2006 г. 15:27

Опять же поручи ассемблеру располагать переменные в ОЗУ, а не выдумывай для них адреса сам. Начинай располагать переменные с самого начала ОЗУ, т.к. в конце будет стек - так вероятность налезания стека на переменные минимизируется. Если у тебя нет веских и внятных причин жестко привязывать переменные к определенным адресам, то делай так:


.nolist
.include "m8def.inc"
.list

.dseg ;Эта директива обозначает начало сегмента данных в ОЗУ (обычно с адреса 0x60)

buf1: .byte 256 ;Резервируем 256 байт под массив buf1
var1: .byte 2 ;Резервируем 2 байта под переменную var1

Ta_L: .byte 1 ;Резервируем 1 байт под переменную Ta_L
Ta_H: .byte 1 ;Резервируем 1 байт под переменную Ta_H

;----------------------------------------------------
.cseg ;Эта директива обозначает переключение на сегмент кода во Flash (с адреса 0)

;Таблица векторов прерываний
.org 0
rjmp main

.org INT0addr
rjmp INT0isr

.org INT1addr
rjmp INT1isr

.org OC2addr
rjmp OC2isr

.org OVF2addr
rjmp OVF2isr

.org SPIaddr
rjmp SPIisr

.org URXCaddr
rjmp URXCisr

.org UTXCaddr
rjmp UTXCisr

.org ADCCaddr
rjmp ADCCisr
;----------------------------------------------------

;Основной код
main:
ldi temp,low(ramend)
...
...
...

.exit
;----------------------------------------------------

Как видишь, я сам не назначал никаких численных значений, доверив это ассемблеру и штатному .inc-файлу. Меня не волновало, по каким адресам находятся вектора прерываний - для этого я пользовался их символическими значениями (XXXXaddr), расписанными в .inc-файле. В сегменте данных я не заморачивался поиском адресов для переменных, а отдал это на откуп ассемблеру, обозначив только имена переменных и их длины. Настоятельно советую тебе подробно ознакомиться с директивами и прочими возможностями ассемблера и пользовать их на всю катушку

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа
Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 
URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание