Технический форум по робототехнике.
loid писал(а):Это понятно. Слышал легенду, что возможности BASICа гораздо ниже чем С, и BASIC был скорее всего для начинающих "хакеров" чем для прифессионалов. Времена конечно меняются, возможно щас на БАСИКЕ писать серьёзный софт, и чтобы не было "дифицита" по поводу каких либо возможностей?
зачем это надо?
Теперь, он принципиально чем-то проще?
не проще ли написать собственный программатор, обладающий именно теми функциями, которые вам нужны?
EdGull писал(а):Я ваще не понимаю, о каких проблемах с фусибитами народ парится...
EdGull писал(а):И так,зачем это надо?
1.1 Затем что писать на нем намного быстрей чем на Сях. Готов помериться пиписьками в скорости написания кода моргания светодиодом.
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
//---------------------------------------------------------------------------
#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 Скорость работы, длина кода при моргании светодиодом такая же как и на асме.
EdGull писал(а):Теперь, он принципиально чем-то проще?
Это для начинающих и тем более чистых электронщиков просто подарок, а не язык программирования. Скорость обучения около 5 минут.
EdGull писал(а):не проще ли написать собственный программатор, обладающий именно теми функциями, которые вам нужны?
1. Самый дружественный интерфейс программатора (не путаем с компилятором бейсика) STK200(300) как раз и находится в васике, больше и желать нечего. Я ваще не понимаю, о каких проблемах с фусибитами народ парится...
EdGull писал(а):2. Предлагаю написать хотя бы такой же для STK500, готов за это подарить полный комплект МиниБота.
$regfile = "m8def.dat"
$crystal = 4000000
Config Pinb.0 = Output
Do
Portb.0 = 0
Waitms 500
Portb.0 = 1
Waitms 500
Loop
/** \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.
*/
Так я о том и говорю, не проще ли написать собсвтенный программатор с дружественным для себя интерфейсом и предсказуемым поведением?
твоя пиписька больше - т.к. не использует прерываниях а задержку делает нопом
EdGull писал(а):блин! ну напиши на прерывания! кто мешает???
смысл-то не поменяется!
EdGull писал(а):Добавлено спустя 1 минуту 23 секунды:твоя пиписька больше - т.к. не использует прерываниях а задержку делает нопом
блин! ну напиши на прерывания! кто мешает???
смысл-то не поменяется!
//---------------------------------------------------------------------------
#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;
}
EdGull писал(а):Так я о том и говорю, не проще ли написать собсвтенный программатор с дружественным для себя интерфейсом и предсказуемым поведением?
Вы батенька готовы взяться за такую разработку или просто так потрещать языком?