Например TDA7294

Форум РадиоКот • Просмотр темы - Asm [AVR Studio] математические операции в процессе компила
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пт фев 27, 2026 14:42:09

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 17 ] 
Автор Сообщение
 Заголовок сообщения: Asm [AVR Studio] математические операции в процессе компила
СообщениеДобавлено: Вт авг 07, 2012 11:35:01 
Опытный кот

Зарегистрирован: Вт апр 26, 2011 18:37:06
Сообщений: 782
Рейтинг сообщения: 0
Задаю выражение:
Код:
.equ K_div = 10^6/(880*2^(27/12))

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

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

_________________
На практике можно не успеть сделать того, что можно хорошо обосновать в теории. Но без практики теория может отдаляться от нее, и когда они встретятся снова - не узнает даже неприкосновенное шампанское профессора в лаборатории. Моя практика: robofeya.ru


Вернуться наверх
 
 Заголовок сообщения: Re: Asm [AVR Studio] математические операции в процессе комп
СообщениеДобавлено: Вт авг 07, 2012 12:34:41 
Опытный кот

Зарегистрирован: Вт апр 26, 2011 18:37:06
Сообщений: 782
Рейтинг сообщения: 0
Кстати, понял, какие правила, вроде там и нету возведения в степень, хотя если есть - поделитесь секретом. А вот я не понимаю, как создать массив:(

_________________
На практике можно не успеть сделать того, что можно хорошо обосновать в теории. Но без практики теория может отдаляться от нее, и когда они встретятся снова - не узнает даже неприкосновенное шампанское профессора в лаборатории. Моя практика: robofeya.ru


Вернуться наверх
 
 Заголовок сообщения: Re: Asm [AVR Studio] математические операции в процессе комп
СообщениеДобавлено: Вт авг 07, 2012 12:40:05 
Потрогал лапой паяльник
Аватар пользователя

Карма: 2
Рейтинг сообщений: 13
Зарегистрирован: Чт июн 23, 2011 07:55:51
Сообщений: 330
Рейтинг сообщения: 0
Его не мк генерирует а компилятор (выполняет матиматические вычисления и результат присваивает константе K_div).


Вернуться наверх
 
 Заголовок сообщения: Re: Asm [AVR Studio] математические операции в процессе комп
СообщениеДобавлено: Вт авг 07, 2012 13:54:18 
Опытный кот

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

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

_________________
На практике можно не успеть сделать того, что можно хорошо обосновать в теории. Но без практики теория может отдаляться от нее, и когда они встретятся снова - не узнает даже неприкосновенное шампанское профессора в лаборатории. Моя практика: robofeya.ru


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
 Заголовок сообщения: Re: Asm [AVR Studio] математические операции в процессе комп
СообщениеДобавлено: Вт авг 07, 2012 14:28:54 
Друг Кота

Карма: 67
Рейтинг сообщений: 1031
Зарегистрирован: Пт мар 07, 2008 06:54:43
Сообщений: 4402
Откуда: Ижевск
Рейтинг сообщения: 0
Плохо понимаю в этих "кыржиках",
Код:
subi ZH, Low(-(key1<<1))
sbci ZL, High(-(key1<<1))
но ZH и ZL поменял бы местами


Вернуться наверх
 
 Заголовок сообщения: Re: Asm [AVR Studio] математические операции в процессе комп
СообщениеДобавлено: Вт авг 07, 2012 15:06:35 
Опытный кот

Зарегистрирован: Вт апр 26, 2011 18:37:06
Сообщений: 782
Рейтинг сообщения: 0
поменял, но 1 в старшем регистре, а не 0, сейчас еще подумаю, почему. А самую простую программу написал! То есть теперь эта проблема. А как можно еще в AVR Studio задавать значения сигналов, идущих на входы PORTB?

_________________
На практике можно не успеть сделать того, что можно хорошо обосновать в теории. Но без практики теория может отдаляться от нее, и когда они встретятся снова - не узнает даже неприкосновенное шампанское профессора в лаборатории. Моя практика: robofeya.ru


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

Карма: 67
Рейтинг сообщений: 1031
Зарегистрирован: Пт мар 07, 2008 06:54:43
Сообщений: 4402
Откуда: Ижевск
Рейтинг сообщения: 0
Знающий объяснил мне назначение этих "кыржиков". Я бы сделал, примерно, так
Код:
 .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


Вернуться наверх
 
 Заголовок сообщения: Re: Asm [AVR Studio] математические операции в процессе комп
СообщениеДобавлено: Чт авг 09, 2012 13:03:56 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1505
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15486
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
обращение к памяти программ пословное...
вот простейший пример массива:
Вложение:
znak7.txt [2.12 KiB]
Скачиваний: 272

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


Вернуться наверх
 
 Заголовок сообщения: Re: Asm [AVR Studio] математические операции в процессе комп
СообщениеДобавлено: Чт авг 09, 2012 16:41:25 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 12
Рейтинг сообщений: 67
Зарегистрирован: Пт авг 27, 2010 05:57:06
Сообщений: 2482
Откуда: Тюмень
Рейтинг сообщения: 0
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))

_________________
В поисках истины человек развивается.


Вернуться наверх
 
 Заголовок сообщения: Re: Asm [AVR Studio] математические операции в процессе комп
СообщениеДобавлено: Чт авг 09, 2012 17:44:01 
Мудрый кот
Аватар пользователя

Карма: 24
Рейтинг сообщений: 286
Зарегистрирован: Чт июн 10, 2010 08:55:35
Сообщений: 1810
Откуда: Сибирские Афины
Рейтинг сообщения: 0
kras писал(а):
Задаю выражение:
Код:
.equ K_div = 10^6/(880*2^(27/12))
Если не ошибаюсь, то 4я студия не понимает дробные степени в режиме ассемблера.

_________________
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)


Вернуться наверх
 
 Заголовок сообщения: Re: Asm [AVR Studio] математические операции в процессе комп
СообщениеДобавлено: Чт авг 09, 2012 20:11:54 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1505
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15486
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
не стоит забывать, что все вычислительные заморочки в исходнике считает компилятор при трансляции а вот чего будет делать устройство при исполнении программы... :cry:


Вернуться наверх
 
 Заголовок сообщения: Re: Asm [AVR Studio] математические операции в процессе комп
СообщениеДобавлено: Чт авг 09, 2012 21:07:21 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 12
Рейтинг сообщений: 67
Зарегистрирован: Пт авг 27, 2010 05:57:06
Сообщений: 2482
Откуда: Тюмень
Рейтинг сообщения: 0
Точно точно, нужно результат привести еще к нужному виду, если это целое, то в целое превратить наверное,( правда как это на асме делается не представляю.)
А то получится дробь, а вы то не будете в программе своей учитывать и голову будете ломать в чем же дело.

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

_________________
В поисках истины человек развивается.


Вернуться наверх
 
 Заголовок сообщения: Re: Asm [AVR Studio] математические операции в процессе комп
СообщениеДобавлено: Чт авг 09, 2012 21:40:48 
Друг Кота
Аватар пользователя

Карма: 62
Рейтинг сообщений: 889
Зарегистрирован: Вт апр 24, 2007 07:45:40
Сообщений: 6285
Откуда: Minsk
Рейтинг сообщения: 0
vitalik_1984 писал(а):
Вообще есть в асме такая фича как 8000UL или тому подобное?


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


Вернуться наверх
 
 Заголовок сообщения: Re: Asm [AVR Studio] математические операции в процессе комп
СообщениеДобавлено: Чт авг 09, 2012 22:00:46 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1505
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15486
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
это про такое что-ли?

"Функции

Определены следующие функции:
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.

:)


Вернуться наверх
 
 Заголовок сообщения: Re: Asm [AVR Studio] математические операции в процессе комп
СообщениеДобавлено: Пт авг 10, 2012 05:44:50 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 12
Рейтинг сообщений: 67
Зарегистрирован: Пт авг 27, 2010 05:57:06
Сообщений: 2482
Откуда: Тюмень
Рейтинг сообщения: 0
Jack_A писал(а):
Переведи ! 8000 Вольт ?

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

_________________
В поисках истины человек развивается.


Вернуться наверх
 
 Заголовок сообщения: Re: Asm [AVR Studio] математические операции в процессе комп
СообщениеДобавлено: Пт авг 10, 2012 08:40:12 
Опытный кот
Аватар пользователя

Карма: 7
Рейтинг сообщений: 52
Зарегистрирован: Чт дек 31, 2009 19:27:45
Сообщений: 842
Откуда: Бровари, Україна
Рейтинг сообщения: 0
А никак.
Промежуточные вычсиления асм-компилятор делает в фиксированной разрядности (нужно смотреть документацию, в данном случае, я думаю, 32 бита).
И все константы автоматически в этой разрядности без необходимости указывать суффиксом.

_________________
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.


Вернуться наверх
 
 Заголовок сообщения: Re: Asm [AVR Studio] математические операции в процессе комп
СообщениеДобавлено: Пт авг 10, 2012 09:56:29 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1505
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15486
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
:)))
константу создаем мы сами, а остальное лишь для того, чтоб компилятор знал как чего обозвать и куда сунуть...
либо так:
.equ name = 0x55aa55
.set name2 = 0x70ff
либо так:
.cseg
signedw: .dw 0xf243
longconst: .dw 0x5589, 0x6699
а как воспринимать данные под меткой - выбирай сам - компилятор или выполнит то, что ему укажут или выдаст ошибку переполнения, если превышены возможности его вычислительных способностей по крайней мере, 4-х байтовые слова он понимает :)


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 17 ] 

Часовой пояс: UTC + 3 часа


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y