roboforum.ru

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

Програматоры

Re: Програматоры

loid » 05 апр 2008, 11:17

почему же не устраивает... Возможно и устроит. По функционалу сильно отличается от Codevision?

Re: Програматоры

Vooon » 05 апр 2008, 12:38

хе, cv - си компилятор
bascom - васик

всяких встроенных либ там не мало

Re: Програматоры

loid » 05 апр 2008, 13:00

Это понятно. Слышал легенду, что возможности BASICа гораздо ниже чем С, и BASIC был скорее всего для начинающих "хакеров" чем для прифессионалов. Времена конечно меняются, возможно щас на БАСИКЕ писать серьёзный софт, и чтобы не было "дифицита" по поводу каких либо возможностей?

Re: Програматоры

Aesthete Animus » 14 апр 2008, 23:28

loid писал(а):Это понятно. Слышал легенду, что возможности BASICа гораздо ниже чем С, и BASIC был скорее всего для начинающих "хакеров" чем для прифессионалов. Времена конечно меняются, возможно щас на БАСИКЕ писать серьёзный софт, и чтобы не было "дифицита" по поводу каких либо возможностей?

Честно говоря, у меня не позволяет совесть назвать басик языком программирования. Компилятор для контроллера с басика - это вершина маразма обкуренных программистов! Объясните мне, зачем это надо? Что, он принципиально чем-то проще? На мой взгляд нет, более того, на нем вы не сможите сделать именно того, чего вы хотите. На Си можно сделать практически все!

Что касается темы, то скажите, а не проще ли написать собственный программатор, обладающий именно теми функциями, которые вам нужны?

Re: Програматоры

EdGull » 15 апр 2008, 08:02

2Aesthete Animus
если вы батенька заполните свой город, непременно отвечу:
-зачем это надо?
-Что, он принципиально чем-то проще?
-не проще ли написать собственный программатор, обладающий именно теми функциями, которые вам нужны?

Re: Програматоры

Aesthete Animus » 15 апр 2008, 15:51

Заполнил - отвечайте ;)

Re: Програматоры

EdGull » 15 апр 2008, 17:02

И так,
зачем это надо?

1.1 Затем что писать на нем намного быстрей чем на Сях. Готов помериться пиписьками в скорости написания кода моргания светодиодом.
1.2 Скорость работы, длина кода при моргании светодиодом такая же как и на асме.
Теперь, он принципиально чем-то проще?

Это для начинающих и тем более чистых электронщиков просто подарок, а не язык программирования. Скорость обучения около 5 минут.
не проще ли написать собственный программатор, обладающий именно теми функциями, которые вам нужны?

1. Самый дружественный интерфейс программатора (не путаем с компилятором бейсика) STK200(300) как раз и находится в васике, больше и желать нечего. Я ваще не понимаю, о каких проблемах с фусибитами народ парится...
2. Предлагаю написать хотя бы такой же для STK500, готов за это подарить полный комплект МиниБота.

Re: Програматоры

Myp » 15 апр 2008, 17:06

EdGull писал(а):Я ваще не понимаю, о каких проблемах с фусибитами народ парится...

+1
после CVAVR с галочками и даташитом в зубах был приятно удивлен кристальной прозрачностью установок фьюзов для кварца и остальных

Re: Програматоры

Aesthete Animus » 15 апр 2008, 19:22

EdGull писал(а):И так,
зачем это надо?

1.1 Затем что писать на нем намного быстрей чем на Сях. Готов помериться пиписьками в скорости написания кода моргания светодиодом.

Намного быстрее? Очень спорное суждение... Вот моя "пиписька" для моргания светодиодом:
Функциональность: дергание ногой PB0 с частотой 1Гц
Контроллер: ATmega8
Частота тактирования: 4МГц (внутрення RC-цепочка)
Компилятор: AVR GCC 20080402
Ключ компиляции:
Код: Выделить всёРазвернуть
avr-gcc -g -Os -ffunction-sections -fdata-sections -mmcu=atmega8 -c main.c
avr-gcc -g -Wl,--gc-sections -mmcu=atmega8 -o main.elf main.o

Собственно код (файл main.c):
Код: Выделить всёРазвернуть
//---------------------------------------------------------------------------
#include <avr/io.h>
#include <avr/interrupt.h>
//---------------------------------------------------------------------------

uint8_t t = 0;
SIGNAL(SIG_OUTPUT_COMPARE2)
{
   if (++t == 125)
   {
      t = 0;
      PORTB ^= (1 << PB0);
   }
}

int main(void)
{   
   DDRB |= (1 << PB0);

   TCCR2 = (1 << WGM21)|(1 << CS22);
   SFIOR |= (1 << PSR2);
   TCNT2 = 0;
   OCR2 = 250 - 1;
   TIMSK = (1 << OCIE2);

   sei();
   
   while (1)
      ;

   return 0;
}

и листинг:
Код: Выделить всёРазвернуть
main.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         000000b2  00000000  00000000  00000074  2**1
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .bss          00000001  00800060  00800060  00000126  2**0
                  ALLOC
  2 .debug_aranges 00000028  00000000  00000000  00000126  2**0
                  CONTENTS, READONLY, DEBUGGING
  3 .debug_pubnames 00000030  00000000  00000000  0000014e  2**0
                  CONTENTS, READONLY, DEBUGGING
  4 .debug_info   000000a9  00000000  00000000  0000017e  2**0
                  CONTENTS, READONLY, DEBUGGING
  5 .debug_abbrev 00000076  00000000  00000000  00000227  2**0
                  CONTENTS, READONLY, DEBUGGING
  6 .debug_line   000000f7  00000000  00000000  0000029d  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_frame  00000030  00000000  00000000  00000394  2**2
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_str    0000007e  00000000  00000000  000003c4  2**0
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_ranges 00000020  00000000  00000000  00000442  2**0
                  CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

00000000 <__vectors>:
   0:   12 c0          rjmp   .+36        ; 0x26 <__ctors_end>
   2:   2c c0          rjmp   .+88        ; 0x5c <__bad_interrupt>
   4:   2b c0          rjmp   .+86        ; 0x5c <__bad_interrupt>
   6:   2b c0          rjmp   .+86        ; 0x5e <__vector_3>
   8:   29 c0          rjmp   .+82        ; 0x5c <__bad_interrupt>
   a:   28 c0          rjmp   .+80        ; 0x5c <__bad_interrupt>
   c:   27 c0          rjmp   .+78        ; 0x5c <__bad_interrupt>
   e:   26 c0          rjmp   .+76        ; 0x5c <__bad_interrupt>
  10:   25 c0          rjmp   .+74        ; 0x5c <__bad_interrupt>
  12:   24 c0          rjmp   .+72        ; 0x5c <__bad_interrupt>
  14:   23 c0          rjmp   .+70        ; 0x5c <__bad_interrupt>
  16:   22 c0          rjmp   .+68        ; 0x5c <__bad_interrupt>
  18:   21 c0          rjmp   .+66        ; 0x5c <__bad_interrupt>
  1a:   20 c0          rjmp   .+64        ; 0x5c <__bad_interrupt>
  1c:   1f c0          rjmp   .+62        ; 0x5c <__bad_interrupt>
  1e:   1e c0          rjmp   .+60        ; 0x5c <__bad_interrupt>
  20:   1d c0          rjmp   .+58        ; 0x5c <__bad_interrupt>
  22:   1c c0          rjmp   .+56        ; 0x5c <__bad_interrupt>
  24:   1b c0          rjmp   .+54        ; 0x5c <__bad_interrupt>

00000026 <__ctors_end>:
  26:   11 24          eor   r1, r1
  28:   1f be          out   0x3f, r1   ; 63
  2a:   cf e5          ldi   r28, 0x5F   ; 95
  2c:   d4 e0          ldi   r29, 0x04   ; 4
  2e:   de bf          out   0x3e, r29   ; 62
  30:   cd bf          out   0x3d, r28   ; 61

00000032 <__do_copy_data>:
  32:   10 e0          ldi   r17, 0x00   ; 0
  34:   a0 e6          ldi   r26, 0x60   ; 96
  36:   b0 e0          ldi   r27, 0x00   ; 0
  38:   e2 eb          ldi   r30, 0xB2   ; 178
  3a:   f0 e0          ldi   r31, 0x00   ; 0
  3c:   02 c0          rjmp   .+4         ; 0x42 <.do_copy_data_start>

0000003e <.do_copy_data_loop>:
  3e:   05 90          lpm   r0, Z+
  40:   0d 92          st   X+, r0

00000042 <.do_copy_data_start>:
  42:   a0 36          cpi   r26, 0x60   ; 96
  44:   b1 07          cpc   r27, r17
  46:   d9 f7          brne   .-10        ; 0x3e <.do_copy_data_loop>

00000048 <__do_clear_bss>:
  48:   10 e0          ldi   r17, 0x00   ; 0
  4a:   a0 e6          ldi   r26, 0x60   ; 96
  4c:   b0 e0          ldi   r27, 0x00   ; 0
  4e:   01 c0          rjmp   .+2         ; 0x52 <.do_clear_bss_start>

00000050 <.do_clear_bss_loop>:
  50:   1d 92          st   X+, r1

00000052 <.do_clear_bss_start>:
  52:   a1 36          cpi   r26, 0x61   ; 97
  54:   b1 07          cpc   r27, r17
  56:   e1 f7          brne   .-8         ; 0x50 <.do_clear_bss_loop>
  58:   1d d0          rcall   .+58        ; 0x94 <main>
  5a:   29 c0          rjmp   .+82        ; 0xae <_exit>

0000005c <__bad_interrupt>:
  5c:   d1 cf          rjmp   .-94        ; 0x0 <__vectors>

0000005e <__vector_3>:
#include <avr/interrupt.h>
//---------------------------------------------------------------------------

uint8_t t = 0;
SIGNAL(SIG_OUTPUT_COMPARE2)
{
  5e:   1f 92          push   r1
  60:   0f 92          push   r0
  62:   0f b6          in   r0, 0x3f   ; 63
  64:   0f 92          push   r0
  66:   11 24          eor   r1, r1
  68:   8f 93          push   r24
  6a:   9f 93          push   r25
   if (++t == 125)
  6c:   80 91 60 00    lds   r24, 0x0060
  70:   8f 5f          subi   r24, 0xFF   ; 255
  72:   80 93 60 00    sts   0x0060, r24
  76:   8d 37          cpi   r24, 0x7D   ; 125
  78:   31 f4          brne   .+12        ; 0x86 <__vector_3+0x28>
   {
      t = 0;
  7a:   10 92 60 00    sts   0x0060, r1
      PORTB ^= (1 << PB0);
  7e:   88 b3          in   r24, 0x18   ; 24
  80:   91 e0          ldi   r25, 0x01   ; 1
  82:   89 27          eor   r24, r25
  84:   88 bb          out   0x18, r24   ; 24
   }
}
  86:   9f 91          pop   r25
  88:   8f 91          pop   r24
  8a:   0f 90          pop   r0
  8c:   0f be          out   0x3f, r0   ; 63
  8e:   0f 90          pop   r0
  90:   1f 90          pop   r1
  92:   18 95          reti

00000094 <main>:

int main(void)
{   
  94:   b8 9a          sbi   0x17, 0   ; 23
   DDRB |= (1 << PB0);

   TCCR2 = (1 << WGM21)|(1 << CS22);
  96:   8c e0          ldi   r24, 0x0C   ; 12
  98:   85 bd          out   0x25, r24   ; 37
   SFIOR |= (1 << PSR2);
  9a:   80 b7          in   r24, 0x30   ; 48
  9c:   82 60          ori   r24, 0x02   ; 2
  9e:   80 bf          out   0x30, r24   ; 48
   TCNT2 = 0;
  a0:   14 bc          out   0x24, r1   ; 36
   OCR2 = 250 - 1;
  a2:   89 ef          ldi   r24, 0xF9   ; 249
  a4:   83 bd          out   0x23, r24   ; 35
   TIMSK = (1 << OCIE2);
  a6:   80 e8          ldi   r24, 0x80   ; 128
  a8:   89 bf          out   0x39, r24   ; 57

   sei();
  aa:   78 94          sei
  ac:   ff cf          rjmp   .-2         ; 0xac <main+0x18>

000000ae <_exit>:
  ae:   f8 94          cli

000000b0 <__stop_program>:
  b0:   ff cf          rjmp   .-2         ; 0xb0 <__stop_program>

EdGull писал(а): 1.2 Скорость работы, длина кода при моргании светодиодом такая же как и на асме.

Не поверю пока не увижу асмовые листинги! В любом случае это верно, для тривиальных задач дергания ножками. Но попробуйте на басике написать реализацию файловой системы или FFT, или любой другой нестандартный, непредусмотренный разработчиками басика алгоритм. Элементарно, сделайте хороший ПИД регулятор на басике.
EdGull писал(а):
Теперь, он принципиально чем-то проще?

Это для начинающих и тем более чистых электронщиков просто подарок, а не язык программирования. Скорость обучения около 5 минут.

Ну неужели человек, разобравшийся в электронике не в состоянии понять Си или хотябы асм?

EdGull писал(а):
не проще ли написать собственный программатор, обладающий именно теми функциями, которые вам нужны?

1. Самый дружественный интерфейс программатора (не путаем с компилятором бейсика) STK200(300) как раз и находится в васике, больше и желать нечего. Я ваще не понимаю, о каких проблемах с фусибитами народ парится...

Так я о том и говорю, не проще ли написать собсвтенный программатор с дружественным для себя интерфейсом и предсказуемым поведением?
EdGull писал(а):2. Предлагаю написать хотя бы такой же для STK500, готов за это подарить полный комплект МиниБота.

Не совсем понял, что Вы имеете ввиду: stk200/500 и прочие стуки ни разу в жизне не использовал. Поясните ТЗ - напишу.

Re: Програматоры

EdGull » 15 апр 2008, 19:35

тогда и моя пиписька
Код: Выделить всёРазвернуть
$regfile = "m8def.dat"
$crystal = 4000000

Config Pinb.0 = Output

Do
   Portb.0 = 0
   Waitms 500
   Portb.0 = 1
   Waitms 500
Loop


ну и кого быстрей проще?

Добавлено спустя 1 минуту 8 секунд:
ах да!... совсем забыл...
никто не мешает в васике делать асм-вставки... :D

Re: Програматоры

Vooon » 15 апр 2008, 19:36

а зачем SIGNALL()?
Код: Выделить всёРазвернуть
/** \def SIGNAL(vector)
    \ingroup avr_interrupts

    \code#include <avr/interrupt.h>\endcode

    Introduces an interrupt handler function that runs with global interrupts
    initially disabled.

    This is the same as the ISR macro.
    \deprecated Do not use anymore in new code.
*/


[hr][/hr]
твоя пиписька твой асм-код больше - т.к. не использует прерывания а задержку делает нопом

Re: Програматоры

EdGull » 15 апр 2008, 19:39

Так я о том и говорю, не проще ли написать собсвтенный программатор с дружественным для себя интерфейсом и предсказуемым поведением?

Вы батенька готовы взяться за такую разработку или просто так потрещать языком? :wink:

Добавлено спустя 1 минуту 23 секунды:
твоя пиписька больше - т.к. не использует прерываниях а задержку делает нопом

блин! ну напиши на прерывания! кто мешает???
смысл-то не поменяется!

Re: Програматоры

Vooon » 15 апр 2008, 19:42

EdGull писал(а):блин! ну напиши на прерывания! кто мешает???
смысл-то не поменяется!

я хотел написаь "так то!" в конце, но потом передумал.
т.к. анонимусов у нас нет и Капитану Очевидность вроде как здесь делать нечего :)

Re: Програматоры

rig » 15 апр 2008, 20:16

если деействительно пиписьками меряться то победил тот у кого длиннее.
но чтоб дергать однгой ножкой столько кода написать в АСМ , да ну его на#. я еще понимаю отдельные вставки делать но чтоб всю программу! а если торкнет МК поменять? еще немножко гимороя.
вообще я б мерился не длинной кода а своими достижениями, а на каком языке они сделаны это вторично. так что фотку!
Последний раз редактировалось rig 15 апр 2008, 20:27, всего редактировалось 1 раз.

Re: Програматоры

Aesthete Animus » 15 апр 2008, 20:23

EdGull писал(а):Добавлено спустя 1 минуту 23 секунды:
твоя пиписька больше - т.к. не использует прерываниях а задержку делает нопом

блин! ну напиши на прерывания! кто мешает???
смысл-то не поменяется!

Э-нет, батенька, не надо путать жопу с пальчиком (С). Если мы делаем дрыгания на таймере, то разгружаем контроллер для других задач, а это уже принципиально. Я рассчитывал, что Вы напишите именно аналог моего кода на Си. То что Вы написали, имеет такой аналог в Си (опять-таки AVR GCC)
Код: Выделить всёРазвернуть
//---------------------------------------------------------------------------
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
//---------------------------------------------------------------------------
int main(void)
{   
   DDRB |= (1 << PB0);

   register uint8_t cnt;
   
   while (1)
   {
      for (cnt = 10; cnt; cnt--) _delay_loop_2(50000);
      PORTB &= ~(1 << PB0);

      for (cnt = 10; cnt; cnt--) _delay_loop_2(50000);
      PORTB |= (1 << PB0);
   }      

   return 0;
}

Да код несколько длиннее. Но вот вопрос, Вы знаете, как релизуется функция Waitms в басике? Вы знаете, как компилятор рассчитывает задержку по известной частоте кварца? Вы знаете, какая в итоге получается при этом погрешность?
EdGull писал(а):
Так я о том и говорю, не проще ли написать собсвтенный программатор с дружественным для себя интерфейсом и предсказуемым поведением?

Вы батенька готовы взяться за такую разработку или просто так потрещать языком? :wink:

Сделать программку, которая дергает ногами ком порта и прошивает контроллер - довольно простая задача и это мне уже приходилось делать и для контроллера и для PC. Другое дело, какие требования Вы предъявляете к GUI? Если вы поясните, что вам надо - могу заняться.


Rambler\'s Top100 Mail.ru counter