реклама на сайте
подробности

 
 
> asm на AVR, оптимальные конструкции
_Ivana
сообщение Jan 28 2012, 15:48
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710



Пишу третий в жизни проект, на AVR, на asm. До того было 2 успешных - на asm и на C. Писать надо именно на asm - по разным причинам. Я понимаю что можно написать на С и посмотреть что там сделает компилятор с оптимизатором, но пока хочется поковыряться самому sm.gif Общую логику и алгоритм работы уже составил, осталось красиво реализовать это на asm - оптимально не по размеру кода а по скорости при любых ветках ветвлений - то есть, если кусок кода будет делаться 50 тактов в 99 случаях и 1000 тактов в 1, то пусть лучше он каждый раз делается гарантированно по 500 тактов sm.gif
Возникают в изобилии коротенькие логически законченные куски для перевода в asm. Например
Код
signed long int S = 0;
float s = 0, ds = 0;
signed char P = 0;
......
s = s + ds;
if (s < 0) {
    s = 1 - s;
    S = S - 1;
    P = P - 1;
    if (P < 0) {P = 3}
    }
elseif (s >= 1) {
    s = s - 1;
    S = S + 1;
    P = P + 1;
    if (P > 3) {P = 0}
    }

В asm s и ds будут в формате с плавающей запятой. Думаю что буду использовать sbrc/sbrs их старшего бита - знака мантиссы. Позже напишу код который придумаю - покритикуете помидорами. А вот насчет
Код
    P = P - 1;
    if (P < 0) {P = 3}
..........
    P = P + 1;
    if (P > 3) {P = 0}
    }

придумал - я просто делаю inc/dec rP а потом мне надо найти красивую команду чтобы просто занулить его старшие 6 разрядов - пока точно не знаю какую - and или lsl rP, 6 + lsr rP, 6

Или еще пример
Код
float s, ds;
unsigned char m;
......
if (ds < 1/128) m = 128
elseif (ds < 1/64) m = 64
elseif (ds < 1/32) m = 32
elseif (ds < 1/16) m = 16
elseif (ds < 1/8) m = 8
elseif (ds < 1/4) m = 4
elseif (ds < 1/2) m = 2
else m = 1

Написано коряво, только суть. Теперь буду думать как это красиво на asm написать...

Если есть что сказать - почитаю sm.gif За возможные синтаксические ошибки не пинайте - думаю, смысл понятен и так.

Сообщение отредактировал _Ivana - Jan 28 2012, 15:54
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
_Ivana
сообщение Jan 29 2012, 09:41
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710



Пообщался с умными людьми, они мне вправили мозги насчет стандарта IEEE - что там 23 бита мантиссы sm.gif и младший бит порядка лежит в старшем байте мантиссы. А я как наивный читал комментарии к библиотеке и верил им, не взирая даже на орфографические ошибки
Код
;*******************************************************************************
*************
;* Полная компактная и скоростная библиотека арифметических процедур для работы с числом
;* в 32-х разрядном формате стандарта IEEE с плавающей точкой.
;* Автор: 1998,1999 by Jack Tidwell.
;* Исправление ошибок и переработка с целью уменьшения размера кода: Зубовым Сергеем, 2008 г.
;* Размер кода: 208 words (410 bytes)
;* Число с плавающей точкой хранится в четырёх байтах:
;* 1-й - байт порядка (expon1, expon2)
;* cостоит из бит: 7 - знак числа (1 - отрицательное число)
;*                 6 - знак порядка (1 - положительный порядок)
;*                 NEG( 0x40 - 0x0[0..5] ) - значение порядка
;* 2-й - старший байт мантиссы (mant1h, mant2h)
;* 3-й - средний байт мантиссы (mant1m, mant2m)
;* 4-й - младший байт мантиссы (mant1, mant2)
;* Процедуры:
;* FADD - сложение
;* FSUB - вычетание
;* F_MUL - умножение
;* FDIV - длеление
;* FLTNEG - инвертирование знака первого аргумента
;* MINRES - обнуление первого аргумента
;* SWAPACC - обмен содержимым между первым и вторым аргументами
;* ITOF - преобразование формата числа из целого знакового в формат с плвающей точкой
;* FTOI - преобразование формата числа из формата с плвающей точкой в целый знаковый
;*******************************************************************************
**************

Сейчас попробую и думаю все получится. И допишу в библиотеку функцию умножения на степень 2. А может и ещё какие.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- _Ivana   asm на AVR   Jan 28 2012, 15:48
- - SasaVitebsk   Написано сумбурно и ничего не понятно. Но если у в...   Jan 28 2012, 17:27
- - _Ivana   Продолжая сумбурные имхоизлияния: Действительно, К...   Jan 28 2012, 21:13
|- - =GM=   Цитата(_Ivana @ Jan 28 2012, 21:13) Продо...   Feb 3 2012, 07:48
|- - demiurg_spb   Цитата(=GM= @ Feb 3 2012, 10:48) зависит ...   Feb 3 2012, 08:09
|- - =GM=   У товарища автора 13 идентичных каналов. Так что, ...   Feb 3 2012, 08:24
- - _Pasha   Ы! avr-libc Берем , курим папочку /libm/fplib/...   Jan 29 2012, 11:31
- - zombi   Не буду утверждать на 100% что это правильно, но у...   Jan 29 2012, 11:49
|- - _Pasha   Цитата(zombi @ Jan 29 2012, 14:49) Нифига...   Jan 29 2012, 12:07
- - _Ivana   _Pasha спасибо, покурю. Но одно из требований зака...   Jan 29 2012, 12:02
- - sigmaN   Если честно, то я не понимаю зачем плавучка на AVR...   Jan 30 2012, 01:14
|- - _Артём_   Цитата(sigmaN @ Jan 30 2012, 03:14) Если ...   Jan 30 2012, 04:23
|- - maksimp   Цитата(sigmaN @ Jan 30 2012, 04:14) Мне к...   Jan 30 2012, 05:53
|- - _Pasha   Цитата(sigmaN @ Jan 30 2012, 05:14) Если ...   Jan 30 2012, 07:20
- - Xenia   Те, кто согласны AVR32 тоже считать AVR-кой , могу...   Jan 30 2012, 07:44
- - _Ivana   Спасибо всем отписавшимся, а sigmaN - отдельное С...   Jan 30 2012, 15:48
- - _Pasha   Насколько я помню, вычисления полинома 3 порядка в...   Jan 30 2012, 21:32
- - _Ivana   Цитатавычисления полинома 3 порядка в плавучке отн...   Jan 30 2012, 23:03
|- - _Pasha   Цитата(_Ivana @ Jan 31 2012, 03:03) Сильн...   Jan 31 2012, 04:27
|- - _Pasha   Цитата(_Ivana @ Jan 31 2012, 03:03) Сильн...   Jan 31 2012, 04:27
|- - MaslovVG   Цитата(_Ivana @ Jan 31 2012, 03:03) ЗЫ ст...   Feb 3 2012, 08:27
|- - =GM=   Ещё вот подумал об использовании фиксированной точ...   Feb 3 2012, 08:53
|- - maksimp   Цитата(=GM= @ Feb 3 2012, 11:53) Ещё вот ...   Feb 5 2012, 18:34
|- - =GM=   Цитата(maksimp @ Feb 5 2012, 18:34) В пла...   Feb 7 2012, 14:37
- - sigmaN   ЦитатаА куда девать численные методы, которые не о...   Jan 31 2012, 21:00
- - _Ivana   _Pasha, спасибо за ссылку, сейчас нет возможности ...   Jan 31 2012, 21:30
- - sigmaN   Ну удачи Ваи. Надеюсь оно того стоит... Думаю зак...   Feb 1 2012, 00:50
- - WHALE   Может вам стоит подумать об оверклокинге? Если не...   Feb 1 2012, 05:19
- - _Pasha   Если товарисч заказчег не понимает, я бы ограничил...   Feb 1 2012, 05:51
- - _Ivana   =GM= P в моем случае - это фаза (четверть) периода...   Feb 3 2012, 17:19
- - sigmaN   В плавучке...Ойй не нравится мне ваш заказчик... )...   Feb 4 2012, 01:49
- - _Ivana   ЦитатаВыглядит сомнительно. Плавучка не теряет точ...   Feb 5 2012, 19:53
- - sigmaN   Программная память = flash в данном случае. И её д...   Feb 5 2012, 23:39
- - _Ivana   Верно - я прокололся Просто чаще встречался с огр...   Feb 6 2012, 10:54
- - _Ivana   Возможно вас это позабавит, но я написал на 1С сим...   Feb 11 2012, 09:15
- - sigmaN   1С? Нда.. Месье однако знает толк в извращениях и ...   Feb 11 2012, 22:33
- - _Ivana   Про Протеус и Маткад слышал, но ни разу не видел и...   Feb 11 2012, 23:49
- - ReAl   Оффтоп — просто вспомнилось. Где-то когда-то в эха...   Feb 12 2012, 12:01
|- - Ruslan1   Маленькое замечание. В старозатертые времена у Май...   Feb 12 2012, 20:24
|- - demiurg_spb   Цитата(Ruslan1 @ Feb 12 2012, 23:24) Може...   Feb 13 2012, 05:22
|- - Ruslan1   Цитата(demiurg_spb @ Feb 13 2012, 07:22) ...   Feb 13 2012, 16:01
|- - _Pasha   Цитата(Ruslan1 @ Feb 13 2012, 20:01) Хм. ...   Feb 13 2012, 16:52
- - _Ivana   С наличием плавучей библиотеки то как раз проблем ...   Feb 13 2012, 16:32


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 15:11
Рейтинг@Mail.ru


Страница сгенерированна за 0.01397 секунд с 7
ELECTRONIX ©2004-2016