Dimmy, ты ещё здесь сидишь?
Понедельник Июль 03 2006 09:17, Dimmy Timchenko wrote to George Shepelev:
DT>>> Для 51-х будет другое жонглирование: со стеком, с "внешним" ОЗУ. GS>> Далеко не факт. В командах 51-го семейства нормально адресуются GS>> 128 регистров и 128 портов, а не те жалкие крохи, которые GS>> обеспечивает AVR... DT> Ты неаккуратен с терминологией. 128 ячеек ОЗУ и 128 SFR-ов.
Что _значительно_ больше, чем доступно у AVR-ок.
DT> А у AVR-ок нормально адресуется всё ОЗУ,
Щазззззз!
пространство байт циклов адресации (РОH+портов) 51-е семейство:
ADD A,reg 8 1 1 ADD A,direct 256 2 1 ADD A,@reg 256 1 1
CLR bit 32 2 1
DEC reg 8 1 1 DEC direct 256 2 1 DEC @reg 256 1 1
XRL direct,A 256 2 1 XRL direct,data 256 3 2
AVR-ки:
ADD reg,reg 32/32 2 1
CBR reg,bit 16 2 1
DEC reg 32 2 1
EOR reg,reg 32/32 2 1 опаньки!
Анализируя отличия - арифметические и логические команды 51-го семейства напрямую работают с существенно большей областью регистров (и что не менее важно - с пространством портов в/в), при этом как правило занимая меньше места в памяти программ. AVR обеспечивают большую гибкость в выборе регистров назначения, но их очень мало, а доступ к портам в/в существенно ограничен...
Конкретный пример. Пусть в определённом месте программы нужно одновременно менять состояния двух ножек порта (например формировать противофазные сигналы на драйвер двигателя или динамик).
Код для 51-го семейства:
XRL P1,11000000b Одна атомарная команда. 3 байта, 2 цикла.
Код для AVR-ок:
LDI R16,11000000b ; эта позорная команда работает только с 16 регистрами, ; кто там говорил про "нормальную" адресацию ОЗУ? IN R17,PORTB ; жонглирование данными туды EOR R17,R16 ; с константами работать не умеем OUT PORTB,R17 ; жонглирование данными сюды
4 команды, если требуется атомарность - придётся ещё и прерывания выключать/включать, что дополнительно раздует код и замедлит реакцию контроллера. 8 байт, 4 цикла.
По поводу "наглядности" AVR-овских мнемоник лучше всего подходит высказывание "повбывавбы!"...
DT>>> Опять рекомендую глянуть на старшие MSP. :) GS>> Кто-то говорил, что AVR лучше? Мы вообще-то восьмибитки GS>> сравнивали... DT> Так и в самом деле "лучше".
Hе лучше. См. пример выше.
DT> В смысле при сравнимой цене и периферии на порядок быстрее и DT> значительно пригоднее для программирования на Си.
Ещё раз повторюсь, ядро 51-х встраивают в устройства со значительно более серьёзной периферией, чем у AVR-ок. А программировать 51-е на ассемблере ничуть не сложнее, чем ваять программу на сях. Так что сомнительные преимущества только у любителей "высокоуровневости", которым во многих реальнрых проектах всё равно придётся делать часть программы на ассемблере, матерясь на AVR'овские архитектуру и систему команд...
Георгий
P.S. Кстати, процессоры 51-го семейства без малейших проблем адресуют _всё_ доступное пространство внешнего ОЗУ (65536 байт), да, используя специальные команды MOVX. У AVR такой номер не проходит, т.к. адресное пространство внешнего ОЗУ накладывается на адресное пространство внутренней памяти процессора. В юзерском мануале любителей AVR-ок успокаивают, мол, если адресовать только половину внешней памяти, конфликтов адресации не возникает ;-)