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 и прочие
стуки ни разу в жизне не использовал. Поясните
ТЗ - напишу.