roboforum.ru

Технический форум по робототехнике.
Текущее время: 27 ноя 2024, 04:28

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




Начать новую тему Ответить на тему  [ Сообщений: 139 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7 ... 10  След.
Автор Сообщение
 Заголовок сообщения: Re: Переход с АVR на PIC, перешедший в холивар AVR vs PIC =)
СообщениеДобавлено: 28 июн 2011, 09:34 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
Нам бы на авр-ах хоть одно увидеть...

__Dmitry, взял огонь на себя, выходи из боя! Повторяю, выходи из боя!

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переход с АVR на PIC, перешедший в холивар AVR vs PIC =)
СообщениеДобавлено: 28 июн 2011, 09:51 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
Кого вам бы увидеть? :)

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переход с АVR на PIC, перешедший в холивар AVR vs PIC =)
СообщениеДобавлено: 28 июн 2011, 10:06 
Не в сети
Аватара пользователя

Зарегистрирован: 19 янв 2010, 14:51
Сообщения: 979
Откуда: Петрозаводск
прог. языки: C, FBD, Wiring-Processimg,,,LD, SFC, ST...
ФИО: Вадим
А что такое - PIC? :) :lol:

_________________
Роботы, уже среди нас...
Прошу прощения за аватар, никак схему динамической индикации не могу настроить :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переход с АVR на PIC, перешедший в холивар AVR vs PIC =)
СообщениеДобавлено: 28 июн 2011, 12:05 
Не в сети
Аватара пользователя

Зарегистрирован: 16 май 2009, 12:50
Сообщения: 1530
Откуда: Россия
прог. языки: Java, C
В РФ снова леса горят чтоли? :D

_________________
"There is nothing better than sliding down snow and flying through the air" (с) Shane McConkey.
Lieber ein Brett am Fuß als eins vorm Kopf, aber lieber ein Brett vorm Kopf als zwei am Fuß.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переход с АVR на PIC, перешедший в холивар AVR vs PIC =)
СообщениеДобавлено: 30 июн 2011, 10:41 
Не в сети
Аватара пользователя

Зарегистрирован: 20 сен 2007, 11:44
Сообщения: 491
Откуда: Харьков
Skype: Victorovych_FF
прог. языки: ASM
ФИО: Иван ВикторОвич
Поля :ROFL:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переход с АVR на PIC, перешедший в холивар AVR vs PIC =)
СообщениеДобавлено: 30 июн 2011, 11:04 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
Торф! :crazy:

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переход с АVR на PIC, перешедший в холивар AVR vs PIC =)
СообщениеДобавлено: 30 июн 2011, 12:49 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
ты это написал, чтоб потом: "почистил флуд" ? :D
вечером поиграюсь с тестом:
http://mcu.caxapa.ru/benchmarks/
http://mcu.caxapa.ru/src/9

проверю на ATmega,PIC18,BLACKFIN
на си и асме, все могу проверить в железе

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переход с АVR на PIC, перешедший в холивар AVR vs PIC =)
СообщениеДобавлено: 01 июл 2011, 00:30 
Не в сети
Site Admin
Аватара пользователя

Зарегистрирован: 04 окт 2004, 12:58
Сообщения: 10989
Откуда: St.Petersburg
Skype: taranenko.sergey
ФИО: Сергей Тараненко
если время позволит, потестируй плиз, будет познавательно


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переход с АVR на PIC, перешедший в холивар AVR vs PIC =)
СообщениеДобавлено: 01 июл 2011, 18:31 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
тест:
http://mcu.caxapa.ru/benchmarks/
http://mcu.caxapa.ru/src/9
Код:
/****************************************
source file containing three math functions. One function performs
addition of two 8-bit numbers, one performs multiplication, and one performs division. The
“main()” function calls each of these functions.
Purpose : Benchmark 8-bit math functions.
****************************************/
typedef unsigned char UInt8;
UInt8 add(UInt8 a, UInt8 b)
{return (a + b);}
UInt8 mul(UInt8 a, UInt8 b)
{return (a * b);}
UInt8 div(UInt8 a, UInt8 b)
{return (a / b);}
void main(void)
{
volatile UInt8 result[4];
result[0] = 12;
result[1] = 3;
result[2] = add(result[0], result[1]);
result[1] = mul(result[0], result[2]);
result[3] = div(result[1], result[2]);
return;
}
AVR Studio 4.18.716 скомпилил код - чистый асм :shock:
всего один глюк - двойной вызов подпрограммы
на add и mul сэкономил на call
Код:
;main
;result[0] = 12;
   ldi   r24, 0x0C
   std   Y+1, r24
;result[1] = 3;
   ldi   r24, 0x03
   std   Y+2, r24
;result[2] = add(result[0], result[1]);
   ldd   r25, Y+1
   ldd   r24, Y+2
;return (a + b);
   add   r24, r25
;result[2] = add(result[0], result[1]);
   std   Y+3, r24
;result[1] = mul(result[0], result[2]);
   ldd   r24, Y+1
   ldd   r25, Y+3
;return (a * b);
   mul   r25, r24
   mov   r24, r0
   eor   r1, r1      ;CLR       R1
;result[1] = mul(result[0], result[2]);
   std   Y+2, r24   ;Store indirect with displacement
;result[3] = div(result[1], result[2]);
   ldd   r24, Y+2
   ldd   r22, Y+3
   rcall   div
   std   Y+4, r24
;end

div:   rcall   div_2
   ret
div_2:
   sub   r25, r25
   ldi   r23, 0x09
   rjmp   a1
   rol   r25      ;Rotate Left Through Carry
   cp   r25,r22      ;Compare
   brcs   pc+0x02      ;Branch if carry set
   sub   r25,r22      ;Subtract without carry
a1:   rol   r24      ;Rotate Left Through Carry
   dec   r23      ;Decrement
   brne   pc-0x06      ;Branch if not equal
   com   r24
   ret         ;Subroutine return

MPLAB IDE v8.70 :%)
весь текст показывать смысла нет, привожу только функцию
;result[2] = add(result[0], result[1]);
в авр это 4 асмовские команды :)
Код:
   movlw   0x1   
   movff   PLUSW2, POSTINC1
   movff   INDF2, POSTINC1
   rcall   add   
   movf   POSTDEC1, F, ACCESS
   movf   POSTDEC1, F, ACCESS
   movwf   INDF1, ACCESS
   movlw   0x2   
   movff   INDF1, PLUSW2

add   movff   FSR2L, POSTINC1
   movff   FSR1L, FSR2L
   movlw   0xfd   
   movff   PLUSW2, POSTINC1
   movlw   0xfe   
   movf   PLUSW2, W, ACCESS
   movf   POSTDEC1, F, ACCESS
   addwf   INDF1, W, ACCESS
   movf   POSTDEC1, F, ACCESS
   movff   INDF1, FSR2L
   return

компилятор честно пытался сохранить все возможности сишной функции
дальше сравнивать компиляторы смысла нет :)
теперь сравниваем камни, т.е. асм
причесанный код авр:
Код:
;110 тактов
;21 такт до деления
;main
   ldi   R28,0xff
   ldi   R29,0x00
;result[0] = 12;
   ldi   r24, 0x0C
   std   Y+1, r24
;result[1] = 3;
   ldi   r24, 0x03
   std   Y+2, r24
;result[2] = add(result[0], result[1]);
   ldd   r25, Y+1
   ldd   r24, Y+2
;return (a + b);
   add   r24, r25
;result[2] = add(result[0], result[1]);
   std   Y+3, r24
;result[1] = mul(result[0], result[2]);
   ldd   r24, Y+1
   ldd   r25, Y+3
;return (a * b);
   mul   r25, r24
   mov   r24, r0
   eor   r1, r1      ;CLR       R1
;result[1] = mul(result[0], result[2]);
   std   Y+2, r24   ;Store indirect with displacement
;result[3] = div(result[1], result[2]);
   ldd   r24, Y+2
   ldd   r22, Y+3
   rcall   div
   std   Y+4, r24
   rjmp   pc+0
;end

div:   sub   r25, r25
   ldi   r23, 0x09
   rjmp   a1
   rol   r25      ;Rotate Left Through Carry
   cp   r25,r22      ;Compare
   brcs   pc+0x02      ;Branch if carry set
   sub   r25,r22      ;Subtract without carry
a1:   rol   r24      ;Rotate Left Through Carry
   dec   r23      ;Decrement
   brne   pc-0x06      ;Branch if not equal
   com   r24
   ret         ;Subroutine return

аналог кода для pic18:
Код:
;94 такта с div2 (авр библиотека)
;98 тактов с div (микрочип библиотека)
;12 тактов до деления

;result_0 0x0C
;result_1 0xB4
;result_2 0x0F
;result_3 0x0C

   LIST   P=PIC18F242
   INCLUDE P18F242.INC
cblock 8
   result_0
   result_1
   result_2
   result_3
   LoopCount
   REMB0
   AARGB0
   BARGB0
endc
   org   0
   bra   main   
div
;***********************************
; 8 bit unsigned fixed point remainder in REMB0
; Result: AARG, REM <-- AARG / BARG
FXD0808U
   clrf   REMB0
   movlw   0x8
   movwf   LoopCount
Fxd_1   rlcf   AARGB0,F
   rlcf   REMB0,F
   movf   BARGB0,W
   subwf   REMB0,W
   bnc   Fxd_0   
   movwf   REMB0
   incf   AARGB0,F
Fxd_0   decfsz   LoopCount, F
   bra   Fxd_1   
   return   
;***********************************
div2   clrf   REMB0
   movlw   0x9
   movwf   LoopCount
   bra   div2_0
div2_1   rlcf   REMB0,f
   movf   BARGB0,W
   cpfslt   REMB0      ;Compare f with WREG, skip <
   subwf   REMB0,f
div2_0   rlcf   AARGB0,f
   decfsz   LoopCount, F
   bra   div2_1
   return
;***********************************

main
;result[0] = 12;
   movlw   0xc   
   movwf   result_0
;result[1] = 3;
   movlw   0x3   
   movwf   result_1
;result[2] = add(result[0], result[1]);
   movf   result_0,w   
   addwf   result_1,w
   movwf   result_2
;result[1] = mul(result[0], result[2]);
   movf   result_0,w
   mulwf   result_2
   movff   PRODL,result_1
;result[3] = div(result[1], result[2]);
   movff   result_1,AARGB0
   movff   result_2,BARGB0
   rcall   div2   
   movff   AARGB0,result_3
   bra   $
end

результат:
до деления, пик добрался за 12 тактов, авр за 21 :)
на делении авр сократил отставание, пик 94, авр 110 :pardon:
ну, и на сладкое, пик24 за 70 рублей (36мипс) 48 тактов :beer:
Код:
;48 тактов
   .equ __24F04KA201, 1
   .include "p24F04KA201.inc"
   .global      __reset         ;The label for the first line of code

   .bss
result_0:   .space 8

   .text
__reset:
;------------------------------------------------------------------------------
;Initialize stack pointer and limit register
   mov   #__SP_init, W15      ;Initalize the Stack Pointer register
   mov   #__SPLIM_init, W0   ;Get address at the end of stack space
   mov   W0, SPLIM      ;Load the Stack Pointer Limit register
   nop            ;Add NOP to follow SPLIM initialization
;------------------------------------------------------------------------------
   mov   #result_0,w14
;result[0] = 12;
   mov.b   #0xc,w0
   mov.b   w0,[w14]
;result[1] = 3;
   mov.b #0x3,w0
   mov.b w0,[w14+1]
;result[2] = add(result[0], result[1]);
   mov.b [w14+1],w1
   add.b w0,[w14],w0   
   mov.b w0,[w14+2]
;result[1] = mul(result[0], result[2]);
   mov.b [w14+2],w1
   mov.b [w14],w0
   mul.ss w1,w0,w0
;   ze w0,w0
   mov.b w0,[w14+1]
;result[3] = div(result[1], result[2]);
   mov.b [w14+1],w1
   mov.b [w14+2],w2
   rcall div
   mov.b w0,[w14+3]

   bra   $

div:   ze w1,w1
   ze w2,w2
   repeat #17
   div.uw w1,w2
   ze w0,w0
   return

   .end


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переход с АVR на PIC, перешедший в холивар AVR vs PIC =)
СообщениеДобавлено: 01 июл 2011, 18:35 
Не в сети
Аватара пользователя

Зарегистрирован: 23 апр 2009, 17:03
Сообщения: 2639
Откуда: Москва, Самара
прог. языки: C#
То есть пики лучше? ... Я так и знал :roll:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переход с АVR на PIC, перешедший в холивар AVR vs PIC =)
СообщениеДобавлено: 01 июл 2011, 18:51 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
Что быстрее то в итоге в абсолютных цифрах и при каких условиях? Такты какие-то... у них частоты одинаковые или нет?

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переход с АVR на PIC, перешедший в холивар AVR vs PIC =)
СообщениеДобавлено: 01 июл 2011, 19:19 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
1 / мипсы * такты = мкс. :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переход с АVR на PIC, перешедший в холивар AVR vs PIC =)
СообщениеДобавлено: 01 июл 2011, 19:35 
Не в сети
Аватара пользователя

Зарегистрирован: 07 окт 2009, 00:29
Сообщения: 6028
Откуда: СПб
Этот тест написанный на асме считаю некорректным, так как совершенно непонятно, что именно нужно проверять, какими должны быть критерии корректного результата.

Вероятно нужно было бы сначала поставить формальную задачу, а потом ее запрограммировать. Задача поставлена НЕ БЫЛА.

Напротив, тест компиляторов считаю показательными, так как компиляторы поставлены как раз в одинаковые условия - скомпилировать один и тот же код.

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

Например, непонятно, с какого перепуга в AVR на асме используются одни и те же регистры для аргументов-результатов, которые зачем-то загружаются-выгружаются из памяти в память - туда-сюда. В АВР-ке много аккумуляторов и совершенно нет необходимости использовать только один из них, как это принято в ПИКе.

Непонятно также зачем вообще на такой задаче использовать ОЗУ. Это ПИК без ОЗУ работать на практике не может. АВР-ки в отличии от пика на мелких задачках без ОЗУ прекрасно обходятся (серия Тини, например, широко применяется в реальной жизни).

Впрочем, даже этот , по-моему некорректный, тест показал, что ПИК18 на 40 мегагерцах работает примерно вдвое медленнее, чем AVR на двадцати.

Добавлено спустя 2 минуты 37 секунд:
Dmitry__ писал(а):
на делении авр сократил отставание, пик 94, авр 110

Это в микросекундах сколько?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переход с АVR на PIC, перешедший в холивар AVR vs PIC =)
СообщениеДобавлено: 01 июл 2011, 20:02 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
я же говорю, что ты трольщик, за тебя не грех и бан получить, иди плакаться админу :)
сам думай зачем авр туда сюда память выгружает :lol:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переход с АVR на PIC, перешедший в холивар AVR vs PIC =)
СообщениеДобавлено: 01 июл 2011, 20:04 
Не в сети
Аватара пользователя

Зарегистрирован: 07 окт 2009, 00:29
Сообщения: 6028
Откуда: СПб
Не надо личных оценок и демагогии.
Дайте конкретный ответ на конкретные вопросы:

=DeaD= писал(а):
Что быстрее то в итоге в абсолютных цифрах и при каких условиях?

Michael_K писал(а):
Это в микросекундах сколько?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 139 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7 ... 10  След.

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


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8


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

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO