maik-vs (14.02.2017 13:31, просмотров: 204) ответил maleon на Знатоки Atmel-AVR-ассемблера, подскажите! Как правильно описывать (если это вообще возможно) структуры данных, чтобы потом обращаться к их полям при помощи имён (возможно из этих структур будут сформированы массивы)? А также как правильно
Я так делаю
.dseg
//; CMD structure структура, описывающая команду и служебные поля
.equ CMDFLAG = 0
.equ CMDANSWTOUT = 1
.equ CMDLEN = 2
.equ CMDMASK = 5
.equ CMDVALUE = 6
// таблица структур
.equ CMDITEMLENGTH = 9
.equ CMDTABLELENGTH = 5*CMDITEMLENGTH + 1 ; 5 commands by 9 bytes + FF EOTable
CmdTable: .byte CMDTABLELENGTH
CmdPtr: .byte 2 ; pointer to last sended cmd
.equ CMDX = CmdTable+CMDITEMLENGTH*0
.equ CMDLEFT = CmdTable+CMDITEMLENGTH*1
.equ CMDRIGHT = CmdTable+CMDITEMLENGTH*2
.equ CMDPOW = CmdTable+CMDITEMLENGTH*3
.equ CMDSYN = CmdTable+CMDITEMLENGTH*4
.equ CMDEOT = CmdTable+CMDITEMLENGTH*5
// заготовка таблицы команд для инициализации
.cseg
C_CmdTable: .Db 0,$ff, 6,'S','V', 00,00,00,00,\
0,$ff, 6,'B','L', 00,00,00,00,\
0,$ff, 6,'B','R', 00,00,00,00,\
0,$ff, 6,'B','W', 00,00,00,00,\
0,$ff, 4,'C','I',$A5,00,00,00,\
$FF
// обращение к полю в команде
LDADDR Y,CMDLEFT
std Y+CMDVALUE,r15 ; запись в CMDLEFT.CMDVALUE
adiw Y,CMDITEMLENGTH ; переход к следующей команде
.MACRO LDADDR /// LDADDR Y,k
ldi @0h,high(@1)
ldi @0l,low(@1)
.ENDMACRO