|
itoa на asm, из темы "51 vs AVR"... |
|
|
Guest_=AVR=_*
|
Nov 16 2007, 05:56
|
Guests

|
Внесу ясность. Как я уже отметил выше, мой код был НАПИСАН лишь для демонстрации альтернативного метода преобразования систем счисления, а именно связки int2fix+fix2a. Код был написан мной для dsPIC/PIC24, а в AVR ASM был просто тупо переведен в лоб безо всякой оптимизации. mse ПРИВЕЛ пример этого кода как существенно более быстрого, нежели itoa с вычитаниями степеней десятки и уж тем более чем алгоритм Горнера (сдвиг-коррекция). То, что вы наоптимизировали посредством комбинирования методов, есть гуд, но не есть повод подкалывать mse - "он просто разместил объяву"(с)
|
|
|
|
|
Nov 16 2007, 07:30
|
Знающий
   
Группа: Свой
Сообщений: 709
Регистрация: 3-05-05
Пользователь №: 4 693

|
Цитата(=GM= @ Nov 16 2007, 02:39)  Чёта =mse= примолк, мы тут трудимся, как пчёлки...
mse, время исполнения исходного кода =АВР= улучшено на 17+2=19 тактов, или на 26%. Я, когда писал, по содержимому исходной ветки, имел в виду - перейти от безпонтового трёпа к конкретным вещам. Чтобы процесс членомерства был более предметен. ;О) Бо там началось тупое перехождение на личности, плюс бессмертное "ЦвсАСМ". В переводе на общеупотребительный, мой пост можно перевести так: "Кто хочет замерять свой инструмент относительно других, плеазе: вот вам =AVR=, вот вам АСМ." ;О) А уж потом этот кусок выстригли из контекста и оформили как самостоятельное...И то, всё свелось к тупому вылизыванию предложенного алгоритма. Скушно.
|
|
|
|
|
Nov 16 2007, 11:13
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(mse @ Nov 16 2007, 07:30)  И то, всё свелось к тупому вылизыванию предложенного алгоритма. Скушно To mseДа ладно, никто ничего не вылизывал, просто летучий обмен опытом, показали друг другу фрагментики, как кто пишет, вот и всё. А вот интересно, вы не делали ЧМ детектор на АВР? Я тут ради спортивного интереса написал программку частотного дискриминатора для атмеловского МК (тактовая частота проца 20 МГц, 12-разрядные АЦП и ЦАП, 24-битная арифметика), уложился в 20 мкс, т.е. частота выборок - 50 кГц. To singlskv Вот ещё свёрнутый фрагмент кода. По-своему тоже красиво. Код binasc: ldi temp,0x2F ; binas1: inc temp ;10000 stage subi res0,0x10 ; sbci res1,0x27 ; brsh binas1 ; subi res0,0xF0 ; sbci res1,0xD8 ; st x+,temp ; Иногда места в программе мало, а времени вагон. Стоит в 8-ногом чипе, преобразовывает 24-битные числа от цифровых штангенциркулей.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Nov 16 2007, 12:20
|
Знающий
   
Группа: Свой
Сообщений: 709
Регистрация: 3-05-05
Пользователь №: 4 693

|
Цитата(=GM= @ Nov 16 2007, 14:13)  To mse Да ладно, никто ничего не вылизывал, просто летучий обмен опытом, показали друг другу фрагментики, как кто пишет, вот и всё. Да я не о том. Вылизывание само по себе полезно, но алгоритм то тот-же. Тут скучно. В смысле, самостоятельной темы недостойно. Бо пост оказался выдернут из контекста - материнской ветки про другое. Там он смотрелся логичнее. Цитата А вот интересно, вы не делали ЧМ детектор на АВР? Не, щас на м48 выделяю(вернее, уже выделил) из шума 50кГц. 4 точки на период. ;О) Хотел уже с ДСПик связаться, но посчитал - должон поместиться и, таки, поместился. Щас анальноговую часть причешу ешо... Время разработки съэкономил. Хотя на ДСПик смотрю пристально. ;О) Нехорошо так смотрю... А детектор такой можно на Хмеге спокойно реализовывать. Там встроенные ЦАП/АЦП будут. Стерео. ;О)
|
|
|
|
|
Nov 16 2007, 17:20
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(mse @ Nov 16 2007, 12:20)  Не, щас на м48 выделяю(вернее, уже выделил) из шума 50кГц. 4 точки на период. ;О) Хотел уже с ДСПик связаться, но посчитал - должон поместиться и, таки, поместился. Щас анальноговую часть причешу ешо... Время разработки съэкономил. Хотя на ДСПик смотрю пристально. ;О) Нехорошо так смотрю... А детектор такой можно на Хмеге спокойно реализовывать. Там встроенные ЦАП/АЦП будут. Стерео. ;О) Не надо на него смотреть, тем более пристально - глаза заслезятся(:-). Это ж печка! Посмотрите в сторону TMS320F2801, нормальная машинка, 100 мипс, 12-битный ацп, 16 каналов, можно оцифрять два канала одновременно, 3,75Мвыборок/с Кстати в ЧМ дискриминаторе есть деление 24/24=24, выполняется за 270 тактов.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Nov 16 2007, 18:09
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(=GM= @ Nov 16 2007, 02:39)  mse, время исполнения исходного кода =АВР= улучшено на 17+2=19 тактов, или на 26%. =GM= , здесь Вы слегка поспешили, в коде =AVR=, промежуточный результат получается как значение 0-9999 нормализованное до 0-0xFFFF, и после этого можно выполнять домножение на 10 и на каждом шаге получать новый разряд. Для того чтобы нормализовать диапозон 0-9999 в 0-0xFFFF нужно 10-13тактов, так что реальная экономия всего 6-8 тактов, те ~10%. Цитата(=GM= @ Nov 16 2007, 14:13)  To singlskv Вот ещё свёрнутый фрагмент кода. По-своему тоже красиво. Код binasc: ldi temp,0x2F ; binas1: inc temp ;10000 stage subi res0,0x10 ; sbci res1,0x27 ; brsh binas1 ; subi res0,0xF0 ; sbci res1,0xD8 ; st x+,temp ; У меня так: Код binasc: ldi temp,0x36 subi res0,0x60 sbci res1,0xEA brsh binasc2 binasc1: dec temp subi res0,0xF0 sbci res1,0xD8 brlo binasc2 binasc2: st x+,temp все по тем же причинам...
|
|
|
|
|
Nov 17 2007, 01:57
|
Участник
  
Группа: Свой
Сообщений: 462
Регистрация: 2-04-07
Из: Иркутск
Пользователь №: 26 695

|
Цитата(singlskv @ Nov 17 2007, 03:09)  ... У меня так: Код binasc: ldi temp,0x36 subi res0,0x60 sbci res1,0xEA brsh binasc2 binasc1: dec temp subi res0,0xF0 sbci res1,0xD8 brlo binasc2 binasc2: st x+,temp все по тем же причинам... Опечатка, "brlo binasc 2" Ещё вопрос по оформлению: subi res0,0x60 sbci res1,0xEA Неужели вы не напрягаясь, устно перевели десятичное 60000 в 0xEA60 ? Наверняка пользовались какой-нибудь программой, тем же калькулятором, для перевода в hex. Почему не поручить эту работу компилятору? ldi temp,'6' subi res0,low(60000) sbci res1,high(60000) имхо и листинг будет более читаемым.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|