Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
drokhorm
0 / 0 / 0
Регистрация: 19.07.2011
Сообщений: 5
1

AVR Assembler. Метки и macro expansion

23.07.2011, 14:20. Просмотров 2966. Ответов 4
Метки нет (Все метки)

Пытаюсь написать ряд макросов для работы с циклическими буферами и запнулся об macro expansion. При разворачивании вот такого макроса (для определения буфера):
Код
   .macro BUFFER
.equ @0_MAX = @1
@0_BUF:
.db @0_MAX
@0_PTR_S:
.db 1
@0_PTR_E:
.db 1
@0_FULL:
.db 1
.endmacro
хитрый ассемблер добавляет к моим меткам свой постфикс. Ниже кусок map файла:
Код
DSEG UIN_BUF@BUFFER@895 00000060
DSEG UIN_PTR_S@BUFFER@895 00000061
DSEG UIN_PTR_E@BUFFER@895 00000062
DSEG UIN_FULL@BUFFER@895 00000063
Можно как-то это забороть ? Ну или посоветуйте какой-то другой путь ?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.07.2011, 14:20
Ответы с готовыми решениями:

IAR Assembler MACRO definition
Определяем макрос неважно как во включаемом файле, либо в теле самого модуля, нарываемся на ошибку...

AVR assembler
Добрый день. Нужна помощь. Есть задачка - /**Calculating absolute values Write a program that...

Avr assembler
Добрый день, есть задача: Вывести на светодиоде заранее заданные слова в виде азбуки морзе....

Assembler AVR RISC
Друзья привет! Друг столкнулся с проблемой, в ВУЗЕ просят написать программу на языке Assembler,...

AVR Studio 4 assembler
1) M0125 = M0123 – S | RN (0x125 i 0x123 адреса ячеек памяти) RN = 0x18, M0123 = 0xaf, S=5 ldi...

4
S_Otix
0 / 0 / 0
Регистрация: 28.01.2010
Сообщений: 537
24.07.2011, 00:25 2
.db работает только во FLASH.
0
drokhorm
0 / 0 / 0
Регистрация: 19.07.2011
Сообщений: 5
24.07.2011, 12:00 3
Спасибо. Но это не отвечает на основной вопрос. Пришлось обойтись без такой схемы.
0
Bottti
0 / 0 / 0
Регистрация: 12.06.2011
Сообщений: 74
24.07.2011, 14:17 4
так после директивы .db идет не количество зарезервированных байтов, а сами байты.
то есть
IN_BUF: .db IN_MAX - запишет по адресу IN_BUF байт IN_MAX, а не выделит IN_MAX байтов под буфер. Я так понял предполагалось именно выделение I_MAX байтов.
0
S_Otix
0 / 0 / 0
Регистрация: 28.01.2010
Сообщений: 537
24.07.2011, 17:17 5
Тут объявим переменные и структуру буфера.
Код
.dseg
vQueue_WrRd:   .byte   1   ;CNT_WR:CNT_RD
vUART_Queue:
.byte   4*8 ; 4 байта длина записи(типа структура). 8 кол-во записей.
;struct   QueueRecord
.equ   QueueRecord   =   0
.equ   slpBufL   =   0
.equ   slpBufH   =   1
.equ   sCnt   =   2
.equ   sFlag   =   3
;ends   QueueRecord
Примерный код как это всё может работать.

Код
.cseg
;################################## FUNCTION ###################################
;Name of function:
; fToQueue
;Input:
; Y - addr of buffer (string)
; AL - Length of buffer
; t - flag; t = "1" Buffer in Ftosh; t = "0" Buffer in ROM
;Return:
; ZF = 1 Overflow
;Dessription:
;
;Example
; LDW   Y,(test19<<1)   ;addr of string
; ldi      AL,   9   ;Length
; set               ;from Ftosh
; rcall   fToQueue
;

PROC fToQueue
push   AL
;overflow test
lds      AL,   vQueue_WrRd
subi   AL,   -0x10
omdi   AL,   0b01111111
mov      AH,   AL
swap   AH
eor      AH,   AL
brne   fToQueue_NoOverflow
pop      AL
;Overflow
sez   ;z = 1 Overflow
ret
fToQueue_NoOverflow:
sts      vQueue_WrRd,   AL
swap   AL
movw   ZH:ZL,      YH:YL
rcall   fGetlpQueue
std      y+slpBufL,   ZL
std      y+slpBufH,   ZH
pop      AL
std      y+sCnt,      AL
clr      AL
bld      AL,      0
std      y+sFlag,   AL
clz
ret
ENDP fToQueue
0
24.07.2011, 17:17
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.07.2011, 17:17

Программа для ATmega16 (AVR Assembler)
Пожалуйста, помогите написать программу! Вычислить K=A+B-C, где A, B и C – любые 8-битные целые...

LPM не работает в AVR Studio 4.19 (Assembler 2)
Собственно вчера работала, сегодня нет. Код 100% рабочий зашил в МК, все ок. Причем не...

AVR Assembler. Найти маску N в массиве тетрад
Добрый день. Было бы здорово, если вы поможете разобраться. Задание: Найти маску N в массиве...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.