|
asm на AVR, оптимальные конструкции |
|
|
|
Jan 28 2012, 15:48
|
Местный
  
Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710

|
Пишу третий в жизни проект, на AVR, на asm. До того было 2 успешных - на asm и на C. Писать надо именно на asm - по разным причинам. Я понимаю что можно написать на С и посмотреть что там сделает компилятор с оптимизатором, но пока хочется поковыряться самому  Общую логику и алгоритм работы уже составил, осталось красиво реализовать это на asm - оптимально не по размеру кода а по скорости при любых ветках ветвлений - то есть, если кусок кода будет делаться 50 тактов в 99 случаях и 1000 тактов в 1, то пусть лучше он каждый раз делается гарантированно по 500 тактов  Возникают в изобилии коротенькие логически законченные куски для перевода в 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 написать... Если есть что сказать - почитаю  За возможные синтаксические ошибки не пинайте - думаю, смысл понятен и так.
Сообщение отредактировал _Ivana - Jan 28 2012, 15:54
|
|
|
|
|
 |
Ответов
|
Jan 30 2012, 23:03
|
Местный
  
Группа: Свой
Сообщений: 352
Регистрация: 13-08-11
Из: Воронеж
Пользователь №: 66 710

|
Цитата вычисления полинома 3 порядка в плавучке отнимают не более 1000 тактов, и это на Си это, если я не ошибаюсь, и если "в лоб" и все параметры в плавучке - 6 умножений и 3 сложения, не считая перемещений-копирований аргументов и записи промежуточных результатов в ОЗУ. Сильно сомневаюсь что это влезет в 1000 тактов... Может вычисление не "в лоб" а хитрыми итерационными методами?... А насчет упрощений - вы правы. Например, если частоту расчета взять кратной степени 2, то умножение на dt сведется к делению на 2^N, что проще и быстрее и в плавучке (я ж функцию дописал  ) и тем более в фиксе - просто сдвиг вправо... Сейчас частота = 8кГц, удастся ли привести её к 8192 - не знаю, врядли. А чем грозит "допущение", что умножение на dt при 8кГц я буду делать через сдвиг на 13 бит вправо - пока не понимаю  А еще, если убедить заказчика не менять ускорение в процессе движения, то элементарные приращения скорости будут постоянны и предполагаемый тормозной путь я смогу получить накопительно с начала движения а не рассчитывать его каждую итерацию, боясь что изменилось ускорение и теперь он другой... Но согласится ли заказчик на это?... И конечно же "консерватория". Пытаюсь выжимать требуемую логику за меньше asm команд, собственно про это и тема, в первом посте 2 Си-шных примера, которые хотел перевести максимально компактно на asm - пока не получается красиво. ЗЫ ступил - через пару минут понял, что полином 3 порядка это 5 умножений и 3 сложения
Сообщение отредактировал _Ivana - Jan 30 2012, 23:08
|
|
|
|
Сообщений в этой теме
_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 _Ivana Пообщался с умными людьми, они мне вправили мозги ... Jan 29 2012, 09:41 _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 _Pasha Цитата(_Ivana @ Jan 31 2012, 03:03) Сильн... Jan 31 2012, 04:27 _Pasha Цитата(_Ivana @ Jan 31 2012, 03:03) Сильн... Jan 31 2012, 04: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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|