roboforum.ru

Технический форум по робототехнике.

Arduino

Re: Arduino

=DeaD= » 08 янв 2009, 13:48

2Виталий: Так всё-таки какие преимущества у этого языка по сравнению с Си? Есть какая-то страница на эту тему? Что должно заставить разработчика дублировать библиотеки, изучать новый язык и т.п.?

Re: Arduino

blindman » 08 янв 2009, 13:58

Изучать ничего не нужно, пишешь практически на C/C++ (в который в итоге все и транслируется). А удобство заключается именно в наличии библиотек, которые делают программирование достаточно простым и понятным для новичка. Само собой очень неоптимальная программа получается за счет простоты. Получается что-то в стиле Bascom AVR, но на C. Причем на бэйсике даже более оптимально получается.

Re: Arduino

Виталий » 08 янв 2009, 14:18

Все правильно.

Re: Arduino

=DeaD= » 08 янв 2009, 14:26

Если на бейсике получается даже оптимальней - тогда в топку такой ардуиновый язык :) мы же на меге пишем, там и там не много мегагерц, хотя конечно уклонение от препятствий и лабиринт с 2-3 датчиками можно и нём писать.

Re: Arduino

Виталий » 08 янв 2009, 15:54

Если на бейсике получается даже оптимальней - тогда в топку такой ардуиновый язык мы же на меге пишем, там и там не много мегагерц, хотя конечно уклонение от препятствий и лабиринт с 2-3 датчиками можно и нём писать.

1. Ну про бейсик это конечно неправда.
2. Кто-то недавно порывался на С++ писать под авр.

В общем вы как хотите, а для меня адруино - отличный вариант тестового стенда на котором я могу пробовать различные алгоритмы не задумываясь над тем в какой регистр что мне нужно положить.

Re: Arduino

blindman » 08 янв 2009, 16:16

Виталий писал(а):1. Ну про бейсик это конечно неправда.

Правда. Библиотеки баскома написаны на ассемблере. А в ардуино элементарное чтение пина через digitalRead - ок. 150 байт кода, и соотв. количество тактов процессора.
Виталий писал(а):2. Кто-то недавно порывался на С++ писать под авр.

Это пр меня что ли ? :) Так я не собирался его на полную мощь использовать. Лишь то, что генерирует такой же код, как и С. В основном как syntactic sugar :)

Re: Arduino

Vooon » 14 янв 2009, 05:26

Наткнулся тут случайно: http://principialabs.com/arduino-python ... o-control/
:)

Re: Arduino

Виталий » 14 янв 2009, 11:09

А в ардуино элементарное чтение пина через digitalRead - ок. 150 байт кода, и соотв. количество тактов процессора.

Странно, а у меня занимает 8 байт.

Re: Arduino

blindman » 14 янв 2009, 12:26

Где тут 8 байт?
Код: Выделить всёРазвернуть
  reading = digitalRead(inPin);
  f2:   80 91 00 01     lds r24, 0x0100
  f6:   0e 94 dd 01     call    0x3ba <digitalRead>
  fa:   ec 01           movw    r28, r24
  fc:   90 93 0b 01     sts 0x010B, r25
100:   80 93 0a 01     sts 0x010A, r24
...............................................
int digitalRead(uint8_t pin)
{
    uint8_t timer = digitalPinToTimer(pin);
3ba:   48 2f           mov r20, r24
3bc:   55 27           eor r21, r21
3be:   ca 01           movw    r24, r20
3c0:   81 56           subi    r24, 0x61   ; 97
3c2:   9f 4f           sbci    r25, 0xFF   ; 255
3c4:   fc 01           movw    r30, r24
3c6:   24 91           lpm r18, Z
    uint8_t bit = digitalPinToBitMask(pin);
3c8:   ca 01           movw    r24, r20
3ca:   85 57           subi    r24, 0x75   ; 117
3cc:   9f 4f           sbci    r25, 0xFF   ; 255
3ce:   fc 01           movw    r30, r24
3d0:   94 91           lpm r25, Z
    uint8_t port = digitalPinToPort(pin);
3d2:   49 58           subi    r20, 0x89   ; 137
3d4:   5f 4f           sbci    r21, 0xFF   ; 255
3d6:   fa 01           movw    r30, r20
3d8:   34 91           lpm r19, Z

    if (port == NOT_A_PIN) return LOW;
3da:   33 23           and r19, r19
3dc:   19 f4           brne    .+6         ; 0x3e4 <digitalRead+0x2a>
3de:   80 e0           ldi r24, 0x00   ; 0
3e0:   90 e0           ldi r25, 0x00   ; 0
3e2:   08 95           ret

    // If the pin that support PWM output, we need to turn it off
    // before getting a digital reading.
    if (timer != NOT_ON_TIMER) turnOffPWM(timer);
3e4:   22 23           and r18, r18
3e6:   31 f1           breq    .+76        ; 0x434 <digitalRead+0x7a>
3e8:   23 30           cpi r18, 0x03   ; 3
3ea:   21 f4           brne    .+8         ; 0x3f4 <digitalRead+0x3a>
3ec:   80 91 80 00     lds r24, 0x0080
3f0:   8f 77           andi    r24, 0x7F   ; 127
3f2:   05 c0           rjmp    .+10        ; 0x3fe <digitalRead+0x44>
3f4:   24 30           cpi r18, 0x04   ; 4
3f6:   31 f4           brne    .+12        ; 0x404 <digitalRead+0x4a>
3f8:   80 91 80 00     lds r24, 0x0080
3fc:   8f 7d           andi    r24, 0xDF   ; 223
3fe:   80 93 80 00     sts 0x0080, r24
402:   18 c0           rjmp    .+48        ; 0x434 <digitalRead+0x7a>
404:   21 30           cpi r18, 0x01   ; 1
406:   19 f4           brne    .+6         ; 0x40e <digitalRead+0x54>
408:   84 b5           in  r24, 0x24   ; 36
40a:   8f 77           andi    r24, 0x7F   ; 127
40c:   04 c0           rjmp    .+8         ; 0x416 <digitalRead+0x5c>
40e:   22 30           cpi r18, 0x02   ; 2
410:   21 f4           brne    .+8         ; 0x41a <digitalRead+0x60>
412:   84 b5           in  r24, 0x24   ; 36
414:   8f 7d           andi    r24, 0xDF   ; 223
416:   84 bd           out 0x24, r24   ; 36
418:   0d c0           rjmp    .+26        ; 0x434 <digitalRead+0x7a>
41a:   26 30           cpi r18, 0x06   ; 6
41c:   21 f4           brne    .+8         ; 0x426 <digitalRead+0x6c>
41e:   80 91 b0 00     lds r24, 0x00B0
422:   8f 77           andi    r24, 0x7F   ; 127
424:   05 c0           rjmp    .+10        ; 0x430 <digitalRead+0x76>
426:   27 30           cpi r18, 0x07   ; 7
428:   29 f4           brne    .+10        ; 0x434 <digitalRead+0x7a>
42a:   80 91 b0 00     lds r24, 0x00B0
42e:   8f 7d           andi    r24, 0xDF   ; 223
430:   80 93 b0 00     sts 0x00B0, r24

    if (*portInputRegister(port) & bit) return HIGH;
434:   e3 2f           mov r30, r19
436:   ff 27           eor r31, r31
438:   ee 58           subi    r30, 0x8E   ; 142
43a:   ff 4f           sbci    r31, 0xFF   ; 255
43c:   e4 91           lpm r30, Z
43e:   ff 27           eor r31, r31
440:   80 81           ld  r24, Z
442:   20 e0           ldi r18, 0x00   ; 0
444:   30 e0           ldi r19, 0x00   ; 0
446:   89 23           and r24, r25
448:   11 f0           breq    .+4         ; 0x44e <digitalRead+0x94>
44a:   21 e0           ldi r18, 0x01   ; 1
44c:   30 e0           ldi r19, 0x00   ; 0
44e:   c9 01           movw    r24, r18
    return LOW;
}
450:   08 95           ret

Re: Arduino

Виталий » 14 янв 2009, 12:36

Я понял 150 байт - как + 150 байт к прошивке при вызове операции, а не как количество операций внутри функции.

По приведенному листингу чтение из порта - около 50 инструкций в среднем.

Re: Arduino

blindman » 14 янв 2009, 12:54

Для сравнения:

Код: Выделить всёРазвернуть
in R24, PINB
and R24, 0x80
sts somevar, R24

4 такта, 8 байт. Без всяких функций.

Re: Arduino

Виталий » 14 янв 2009, 13:21

Ну и пиши на ассемблере. :D

Добавлено спустя 7 минут 4 секунды:
Вобщем ардуино это очень удобно. У всех у кого есть необходимость в платформе для быстрой проверки идей - очень советую.
Ардуино + макетка в которую тыкать детали. Для быстрого прототипирования мне очень понравилось.

Re: Arduino

avr123.nm.ru » 14 янв 2009, 13:34

Виталий писал(а):У всех у кого есть необходимость в платформе для быстрой проверки идей - очень советую.

PROTEUS (50 Мб) или VMLAB (4 Мб) Очень быстро, Много виртуальных приборов, Море компонентов. БЕЗОПАСНО !

Re: Arduino

blindman » 14 янв 2009, 13:36

Виталий писал(а):Ну и пиши на ассемблере

А это не на ассемблере, а на С :P
Код: Выделить всёРазвернуть
somevar = PINB & 0x80;
   0:   86 b3           in      r24, 0x16       ; 22
   2:   80 78           andi    r24, 0x80       ; 128
   4:   80 93 00 00     sts     0x0000, r24
                        6: R_AVR_16     somevar

Re: Arduino

r0nin » 12 фев 2009, 17:27

FireFly писал(а):нифига это не отечественный, это амерский вариант - открытый проект как собстна и все ардуино-клоны, его все кому не лень лепят :D


имхо, американский клон производят в америке, в китае - китайский. а этот в кемерово.
главный плюс доступность и разумный ценник.
"Клон (англ. clone, от греч. κλων — «веточка») — система, сделанная по образцу другой."


cron
Rambler\'s Top100 Mail.ru counter