Например TDA7294

Форум РадиоКот :: Просмотр темы - Asm [AVR Studio] математические операции в процессе компила
Форум РадиоКот
https://radiokot.ru/forum/

Asm [AVR Studio] математические операции в процессе компила
https://radiokot.ru/forum/viewtopic.php?f=57&t=76463
Страница 1 из 1

Автор:  kras [ Вт авг 07, 2012 11:35:01 ]
Заголовок сообщения:  Asm [AVR Studio] математические операции в процессе компила

Задаю выражение:
Код:
.equ K_div = 10^6/(880*2^(27/12))

Правила другие какие-то. Подскажите, как сделать умножение, а может еще что поменять? Где почитать об этом? Как видно, это MATLAB'овский синтаксис.

2. Как сделать массив таких значений? То есть можно ли скомпилить один раз массив, и больше не генерировать его мк?

Автор:  kras [ Вт авг 07, 2012 12:34:41 ]
Заголовок сообщения:  Re: Asm [AVR Studio] математические операции в процессе комп

Кстати, понял, какие правила, вроде там и нету возведения в степень, хотя если есть - поделитесь секретом. А вот я не понимаю, как создать массив:(

Автор:  korsaj [ Вт авг 07, 2012 12:40:05 ]
Заголовок сообщения:  Re: Asm [AVR Studio] математические операции в процессе комп

Его не мк генерирует а компилятор (выполняет матиматические вычисления и результат присваивает константе K_div).

Автор:  kras [ Вт авг 07, 2012 13:54:18 ]
Заголовок сообщения:  Re: Asm [AVR Studio] математические операции в процессе комп

А мне так и надо. Ну пока начал делать по-другому, и пока понравилось так. Все числа на MATLAB посчитал, ок, в конце программы создал массив. Команда lmp позволяет обратиться к элементам этого массива, теперь следующий вопрос: как вычислить адрес некоторой метки? Мне из массива нужен ненулевой элемент. Моя попытка:
Код:
; выше в Z хранится смещение, но в итоге сейчас я решил сделать для простоты Z = 0000h
subi ZH, Low(-(key1<<1))
sbci ZL, High(-(key1<<1))

Не то выдает. key1 - метка начала байтового массива.

Автор:  akl [ Вт авг 07, 2012 14:28:54 ]
Заголовок сообщения:  Re: Asm [AVR Studio] математические операции в процессе комп

Плохо понимаю в этих "кыржиках",
Код:
subi ZH, Low(-(key1<<1))
sbci ZL, High(-(key1<<1))
но ZH и ZL поменял бы местами

Автор:  kras [ Вт авг 07, 2012 15:06:35 ]
Заголовок сообщения:  Re: Asm [AVR Studio] математические операции в процессе комп

поменял, но 1 в старшем регистре, а не 0, сейчас еще подумаю, почему. А самую простую программу написал! То есть теперь эта проблема. А как можно еще в AVR Studio задавать значения сигналов, идущих на входы PORTB?

Автор:  akl [ Вт авг 07, 2012 16:58:25 ]
Заголовок сообщения:  Re: Asm [AVR Studio] математические операции в процессе комп

Знающий объяснил мне назначение этих "кыржиков". Я бы сделал, примерно, так
Код:
 .include "m8adef.inc"
.device ATmega8a
   ;.equ key1 = 0
   .def key1_H=R22
   .def key1_L=R23
Reset:
   LDI   ZH,HIGH(TAB*2)
   LDI   ZL,LOW(TAB*2)

;   SUBI ZL, Low(-key1) ; такая конструкция, в принципе, бесполезна,
;   SBCI ZH, High(-key1); т.к. эти команды работают с константами
   ADD   ZL,key1_L
   ADC   ZH,key1_H
   LPM
; в R0 считывается значение массива    
   RJMP   RESET

;   subi ZL, Low(-(key1<<1)) ;???????????? Тогда уж проще    LDI   ZH,HIGH(key1*2)
;   sbci ZH, High(-(key1<<1)) ;??????????                      LDI   ZL,LOW(key1*2)
   .ORG   $300
TAB:
   .DB   $77,$66,$55,$44

Автор:  BOB51 [ Чт авг 09, 2012 13:03:56 ]
Заголовок сообщения:  Re: Asm [AVR Studio] математические операции в процессе комп

обращение к памяти программ пословное...
вот простейший пример массива:
Вложение:
znak7.txt [2.12 KiB]
Скачиваний: 274

может чего пряснится :tea:

Автор:  vitalik_1984 [ Чт авг 09, 2012 16:41:25 ]
Заголовок сообщения:  Re: Asm [AVR Studio] математические операции в процессе комп

kras писал(а):
Задаю выражение:
Код:
.equ K_div = 10^6/(880*2^(27/12))


Смысл делать такое выражение, если можно тупо на калькуляторе посчитать?
В этом случае все равно придется всю формулу заново лопатить.
Вот если пару чисел на Дефайненые константы заменить - то совсем другое дело.Типа этого:
Код:
.equ X = 880
.equ Y = 6
.equ K_div = 10^Y/(X*2^(27/12))

Автор:  Kavka [ Чт авг 09, 2012 17:44:01 ]
Заголовок сообщения:  Re: Asm [AVR Studio] математические операции в процессе комп

kras писал(а):
Задаю выражение:
Код:
.equ K_div = 10^6/(880*2^(27/12))
Если не ошибаюсь, то 4я студия не понимает дробные степени в режиме ассемблера.

Автор:  BOB51 [ Чт авг 09, 2012 20:11:54 ]
Заголовок сообщения:  Re: Asm [AVR Studio] математические операции в процессе комп

не стоит забывать, что все вычислительные заморочки в исходнике считает компилятор при трансляции а вот чего будет делать устройство при исполнении программы... :cry:

Автор:  vitalik_1984 [ Чт авг 09, 2012 21:07:21 ]
Заголовок сообщения:  Re: Asm [AVR Studio] математические операции в процессе комп

Точно точно, нужно результат привести еще к нужному виду, если это целое, то в целое превратить наверное,( правда как это на асме делается не представляю.)
А то получится дробь, а вы то не будете в программе своей учитывать и голову будете ломать в чем же дело.

Вообще есть в асме такая фича как 8000UL или тому подобное?

Автор:  Jack_A [ Чт авг 09, 2012 21:40:48 ]
Заголовок сообщения:  Re: Asm [AVR Studio] математические операции в процессе комп

vitalik_1984 писал(а):
Вообще есть в асме такая фича как 8000UL или тому подобное?


Переведи ! 8000 Вольт ?

Автор:  BOB51 [ Чт авг 09, 2012 22:00:46 ]
Заголовок сообщения:  Re: Asm [AVR Studio] математические операции в процессе комп

это про такое что-ли?

"Функции

Определены следующие функции:
LOW(выражение) возвращает младший байт выражения
HIGH(выражение) возвращает второй байт выражения
BYTE2(выражение) то же что и функция HIGH
BYTE3(выражение) возвращает третий байт выражения
BYTE4(выражение) возвращает четвёртый байт выражения
LWRD(выражение) возвращает биты 0-15 выражения
HWRD(выражение) возвращает биты 16-31 выражения
PAGE(выражение) возвращает биты 16-21 выражения
EXP2(выражение) возвращает 2 в степени (выражение)
LOG2(выражение) возвращает целую часть log2(выражение)"
или в оригинальном helpе:
Functions
The following functions are defined:
LOW(expression) returns the low byte of an expression
HIGH(expression) returns the second byte of an expression
BYTE2(expression) is the same function as HIGH
BYTE3(expression) returns the third byte of an expression
BYTE4(expression) returns the fourth byte of an expression
LWRD(expression) returns bits 0-15 of an expression
HWRD(expression) returns bits 16-31 of an expression
PAGE(expression) returns bits 16-21 of an expression
EXP2(expression) returns 2 to the power of expression
LOG2(expression) returns the integer part of log2(expression)
The following functions are only defined in AVRASM2:
INT(expression) Truncates a floating point expression to integer (ie discards fractional part)
FRAC(expression) Extracts fractional part of a floating point expression (ie discards integer part).
Q7(expression) Converts a fractional floating point expression to a form suitable for the FMUL/FMULS/FMULSU instructions. (sign + 7-bit fraction)
Q15(expression) Converts a fractional floating point expression to a form suitable for the FMUL/FMULS/FMULSU instructions. (sign +15-bit fraction)
ABS() Returns the absolute value of a constant expression.
DEFINED(symbol) Returns true if symbol is previously defined using .equ/.set/.def directives. Normally used in conjunction with .if directives (.if defined(foo)), but may be used in any context. It differs from other functions in that parentheses around its argument are not required, and that it only makes sense to use a single symbol as argument.
STRLEN(string) returns the length of a string c+onstant, in bytes.

:)

Автор:  vitalik_1984 [ Пт авг 10, 2012 05:44:50 ]
Заголовок сообщения:  Re: Asm [AVR Studio] математические операции в процессе комп

Jack_A писал(а):
Переведи ! 8000 Вольт ?

каких вольт то? мы про компилятор говорим.
unsigned long
BOB51 , почти, только как сказать компилятору на сколько байт константу создавать?

Автор:  avreal [ Пт авг 10, 2012 08:40:12 ]
Заголовок сообщения:  Re: Asm [AVR Studio] математические операции в процессе комп

А никак.
Промежуточные вычсиления асм-компилятор делает в фиксированной разрядности (нужно смотреть документацию, в данном случае, я думаю, 32 бита).
И все константы автоматически в этой разрядности без необходимости указывать суффиксом.

Автор:  BOB51 [ Пт авг 10, 2012 09:56:29 ]
Заголовок сообщения:  Re: Asm [AVR Studio] математические операции в процессе комп

:)))
константу создаем мы сами, а остальное лишь для того, чтоб компилятор знал как чего обозвать и куда сунуть...
либо так:
.equ name = 0x55aa55
.set name2 = 0x70ff
либо так:
.cseg
signedw: .dw 0xf243
longconst: .dw 0x5589, 0x6699
а как воспринимать данные под меткой - выбирай сам - компилятор или выполнит то, что ему укажут или выдаст ошибку переполнения, если превышены возможности его вычислительных способностей по крайней мере, 4-х байтовые слова он понимает :)

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/