ATMEGA 8 и ATMEGA168 совместимость?
- Just_Fluffy
- Вымогатель припоя
- Сообщения: 532
- Зарегистрирован: Ср июн 29, 2022 16:25:45
Re: ATMEGA 8 и ATMEGA168 совместимость?
COKPOWEHEU, терминология понятна вполне. Это было так, к слову. Что у АВРок адресация через отображение на память универсальна для всего регистрового файла.
Белая и Пушистая
- COKPOWEHEU
- Говорящий с текстолитом
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Re: ATMEGA 8 и ATMEGA168 совместимость?
Да, насколько я помню, там даже РОНы можно адресовать через оперативку.
Я-то к тому говорил, что в MMIO (за пределы in/out) они вылезли не от хорошей жизни. И не самым удобным способом.
Я-то к тому говорил, что в MMIO (за пределы in/out) они вылезли не от хорошей жизни. И не самым удобным способом.
- Just_Fluffy
- Вымогатель припоя
- Сообщения: 532
- Зарегистрирован: Ср июн 29, 2022 16:25:45
Re: ATMEGA 8 и ATMEGA168 совместимость?
COKPOWEHEU, просто в системе команд для адресации IO атмелы отвели 6 бит всего.... Тем самым себя ограничив... "64 регистра хватит всем"
А для части команд вообще 5 бит адресация IO
А для части команд вообще 5 бит адресация IO
Белая и Пушистая
- COKPOWEHEU
- Говорящий с текстолитом
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Re: ATMEGA 8 и ATMEGA168 совместимость?
Потому что всего 16 бит на команду. Да еще хвастались развесистым ассемблером, более сотни инструкций. Впрочем, в 32-битках тоже адрес периферии в команде не кодируют.
- Just_Fluffy
- Вымогатель припоя
- Сообщения: 532
- Зарегистрирован: Ср июн 29, 2022 16:25:45
Re: ATMEGA 8 и ATMEGA168 совместимость?
COKPOWEHEU, и что, разве мало? Вон некоторые на "современном ассемблере" мегапрограммы пишут с собственным отладчиком... И программы, во много раз более компактные, нежели на ЯВУ. Значит хороший ассемблер, надо брать. Просто на этапе разработки системы команд не получилось, видимо, выделить больше 6 бит на адрес периферии. Зато он внутри команды, а не идет отдельным операндом, занимая еще одну ячейку флеша.
Добавлено after 5 minutes 35 seconds:
А "развесистость" меня тоже посмешила. BRBC/BRBS раздуть до 18 ассемблерных мнемоник. То же самое про BSET/BCLR...
Добавлено after 5 minutes 35 seconds:
А "развесистость" меня тоже посмешила. BRBC/BRBS раздуть до 18 ассемблерных мнемоник. То же самое про BSET/BCLR...
Белая и Пушистая
Re: ATMEGA 8 и ATMEGA168 совместимость?
[uquote="Just_Fluffy",url="/forum/viewtopic.php?p=4676455#p4676455"]Просто на этапе разработки системы команд не получилось, видимо, выделить больше 6 бит на адрес периферии.[/uquote]
25 лет назад 6 бит могло казаться не так и мало, у первого AVR из периферии самый минимум был, ни UART/SPI, ни даже ОЗУ )
25 лет назад 6 бит могло казаться не так и мало, у первого AVR из периферии самый минимум был, ни UART/SPI, ни даже ОЗУ )
Re: ATMEGA 8 и ATMEGA168 совместимость?
Ну да) просто чипы эволюционировали с развитием условий. Ну и ставили заплатки где можно. Как то выбирались из ситуации)
Добавлено after 1 minute 49 seconds:
..стараясь сохранить приемственность)
Добавлено after 1 minute 49 seconds:
..стараясь сохранить приемственность)
- Starichok51
- Модератор
- Сообщения: 19045
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: ATMEGA 8 и ATMEGA168 совместимость?
там есть условия, которые определяются комбинацией битов в SREG. так что, не всегда достаточно проверить только один бит.Just_Fluffy писал(а):BRBC/BRBS раздуть до 18 ассемблерных мнемоник.
а большое количество мнемоник из-за того, что есть дублирующие мнемоники, имеющие один и тот же код.
например, BRCS и BRLO имеют одинаковый код. но вторая (если меньше) логически более удобна, чем просто "если перенос установлен".
Добавлено after 15 minutes 22 seconds:
и еще.
в этом большом количестве мнемоник есть огромное удобство - мне не нужно помнить номера каждого бита в регистре.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
- COKPOWEHEU
- Говорящий с текстолитом
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Re: ATMEGA 8 и ATMEGA168 совместимость?
[uquote="Just_Fluffy",url="/forum/viewtopic.php?p=4676455#p4676455"]COKPOWEHEU, и что, разве мало? Вон некоторые на "современном ассемблере" мегапрограммы пишут с собственным отладчиком... И программы, во много раз более компактные, нежели на ЯВУ. Значит хороший ассемблер, надо брать.[/uquote]
Ну, "во много раз" для программы более-менее вменяемого размера и более-менее вменяемого срока разработки я, конечно, не поверю. Пара десятков процентов от силы. Дальше у человека уже закончится внимательность за всем следить.
[uquote="Just_Fluffy",url="/forum/viewtopic.php?p=4676455#p4676455"]Просто на этапе разработки системы команд не получилось, видимо, выделить больше 6 бит на адрес периферии.[/uquote]
Ну, не так уж они и ошиблись: как раз когда 6 бит закончились, закончилась и популярность 8-битных контроллеров.
[uquote="Just_Fluffy",url="/forum/viewtopic.php?p=4676455#p4676455"]А "развесистость" меня тоже посмешила. BRBC/BRBS раздуть до 18 ассемблерных мнемоник. То же самое про BSET/BCLR...[/uquote]
Чего не сделаешь ради маркетинга. Даже псевдо-команды в список добавлять будешь.
Хм. Даже интересно, сколько у них команд на самом деле, без дублирования.
Добавлено after 42 minutes 43 seconds:
[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4676482#p4676482"]Хм. Даже интересно, сколько у них команд на самом деле, без дублирования.[/uquote]
Провел опыт: создал бинарный файл с последовательными 16-битных числами (по 2 штуки каждого на случай lds, sts) и прошелся по нему скриптом:
Правда, там еще .word затесался, но все равно, более сотни инструкций. Включая такие интересные, как las, lat, xch
Ну, "во много раз" для программы более-менее вменяемого размера и более-менее вменяемого срока разработки я, конечно, не поверю. Пара десятков процентов от силы. Дальше у человека уже закончится внимательность за всем следить.
[uquote="Just_Fluffy",url="/forum/viewtopic.php?p=4676455#p4676455"]Просто на этапе разработки системы команд не получилось, видимо, выделить больше 6 бит на адрес периферии.[/uquote]
Ну, не так уж они и ошиблись: как раз когда 6 бит закончились, закончилась и популярность 8-битных контроллеров.
[uquote="Just_Fluffy",url="/forum/viewtopic.php?p=4676455#p4676455"]А "развесистость" меня тоже посмешила. BRBC/BRBS раздуть до 18 ассемблерных мнемоник. То же самое про BSET/BCLR...[/uquote]
Чего не сделаешь ради маркетинга. Даже псевдо-команды в список добавлять будешь.
Хм. Даже интересно, сколько у них команд на самом деле, без дублирования.
Добавлено after 42 minutes 43 seconds:
[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4676482#p4676482"]Хм. Даже интересно, сколько у них команд на самом деле, без дублирования.[/uquote]
Провел опыт: создал бинарный файл с последовательными 16-битных числами (по 2 штуки каждого на случай lds, sts) и прошелся по нему скриптом:
Код: Выделить всё
$ avr-objdump avr_test.bin -b binary -D -m avr | tail -n +8 | sed 's/[^\t]*\t[^\t]*\t\([0-9a-z.]*\).*/\1/' | sort -u | wc -l
107- Just_Fluffy
- Вымогатель припоя
- Сообщения: 532
- Зарегистрирован: Ср июн 29, 2022 16:25:45
Re: ATMEGA 8 и ATMEGA168 совместимость?
В сети встречала утверждение, что грамотно написанная сишная программа дает оверхед 20-30% против грамотного асм-кода.COKPOWEHEU писал(а):Ну, "во много раз" для программы более-менее вменяемого размера и более-менее вменяемого срока разработки я, конечно, не поверю.
Но бывают частные случаи, когда функционал простой и можно писать все на регистрах... Либо укладываться в 256 байт ОЗУ, "законстантив" ZH...
Можно еще ради экономии сидеть оптимизировать код, используя различные ухищрения и аппаратные особенности... Особенно, когда программа не умещается во флеш ровно на один байт )))
Еще можно уйти от универсальности программы на ЯВУ, заточив код под какой то один-два МК. Но это частные случаи (как срачик про загрузчики).
Как по мне, асм хорош для каких то критичных ко времени задач. Когда нужно сделать минимальный код, а ЯВУ навешает лишнего согласно своих соглашений. Причем не чистый асм, а ассемблерная вставка.
А в остальном - срок разработки, читаемость и переносимость кода - это не для ассемблера.
Мне их тоже не нужно помнить ))))))Starichok51 писал(а):в этом большом количестве мнемоник есть огромное удобство - мне не нужно помнить номера каждого бита в регистре.
if (a>0) { action; }
А если мне нужна ассемблерная вставка, то я могу и в справке подсмотреть мнемонику.
Белая и Пушистая
- java
- Держит паяльник хвостом
- Сообщения: 962
- Зарегистрирован: Вт янв 04, 2011 13:26:17
- Откуда: Лен.Обл.
Re: ATMEGA 8 и ATMEGA168 совместимость?
В общем-то всё гораздо проще оказалось, есть плата адруино уно с краватью, только кварц перепаять, с 16 на 8, в програматоре залить восьмую и вставить в кравать вместо 168.

Пишу с ошибками и опечатками.На это у меня есть разрешение и справка
- COKPOWEHEU
- Говорящий с текстолитом
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Re: ATMEGA 8 и ATMEGA168 совместимость?
[uquote="Just_Fluffy",url="/forum/viewtopic.php?p=4676559#p4676559"]Можно еще ради экономии сидеть оптимизировать код, используя различные ухищрения и аппаратные особенности... Особенно, когда программа не умещается во флеш ровно на один байт )))[/uquote]
А представьте себе такую хардкорную оптимизацию под, хотя бы, stm32f103, контроллер 10-20-летнего возраста с 64к флеша.
А представьте себе такую хардкорную оптимизацию под, хотя бы, stm32f103, контроллер 10-20-летнего возраста с 64к флеша.
Можно. Но это будет скорее пример демосцены "смотрите, как я умею", чем реального проекта. Например, вроде такого.Just_Fluffy писал(а):Еще можно уйти от универсальности программы на ЯВУ, заточив код под какой то один-два МК.
...для локальных оптимизаций, для критичного к времени выполнения кода (vusb отличный пример; хотя в более мощных камнях скорость выполнения инструкций уже не гарантируется - кеши, предсказания, да и просто пропускная способность шины команд). Для супер-низкоуровневых вещей вроде переключателя контекста в ОС. Очень хорош для обучения. И, разумеется, при просмотре дизассемблированного кода - реверсе или просто отладке.Just_Fluffy писал(а):Как по мне, асм хорош...
Отчего же, можно и чистый асм. Очень часто стартап-файлы (тот код, который подготавливает стек, переменные, спецрегистры и прочее к запуску высокоуровневого кода) пишутся именно на чистом асме. На AVR он уже написан и хорошо спрятан, а вот на arm или risc-v его приходится качать у производителя или писать самому. Ну и другие примеры использования библиотек на асме никто не отменял.Just_Fluffy писал(а):Причем не чистый асм, а ассемблерная вставка.
Не, не. Когда есть удачная мнемоника это очень удобно. Зачастую получается писать ассемблерный код просто из головы. Не говоря уж о чтении (в т.ч. дизасма).Just_Fluffy писал(а):А если мне нужна ассемблерная вставка, то я могу и в справке подсмотреть мнемонику.
Ну вот, так и не дали форумчанам блеснуть своими навыкамиjava писал(а):В общем-то всё гораздо проще оказалось, есть плата адруино уно с краватью, только кварц перепаять, с 16 на 8, в програматоре залить восьмую и вставить в кравать вместо 168.
- Just_Fluffy
- Вымогатель припоя
- Сообщения: 532
- Зарегистрирован: Ср июн 29, 2022 16:25:45
Re: ATMEGA 8 и ATMEGA168 совместимость?
COKPOWEHEU, не, я асм в целом помню, но в основном помнятся BREQ и BRNE, а остальные ветвления по флагам приходится подглядывать.... Ну не пишу я на асме уже давно... Иногда что то накалякать как вставку... Либо глянуть чужой код...
Белая и Пушистая
- COKPOWEHEU
- Говорящий с текстолитом
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Re: ATMEGA 8 и ATMEGA168 совместимость?
Ну вот когда в чужом коде встречается brlo или brsh, это же понятнее, чем brbs 0 и brbc 0.
Re: ATMEGA 8 и ATMEGA168 совместимость?
Это из-за отсутствия определений битов SREG. Хотя если самому определить, то типа brbs (1<<bit_T) совсем неплохо выглядит.. да и меньше команд знать..
Re: ATMEGA 8 и ATMEGA168 совместимость?
У АВРок все команды достаточно обоснованы.
Особенности проистекают из структуры ядра и желания подстроиться под ЯВУ уже на уровне ассемблера (avrasm2).
Такая "шпора" быстрее память освежает.

Особенности проистекают из структуры ядра и желания подстроиться под ЯВУ уже на уровне ассемблера (avrasm2).
Такая "шпора" быстрее память освежает.
Re: ATMEGA 8 и ATMEGA168 совместимость?
да, обилие команд чтобы абстрагироваться от железа. Их можно просто как макросы воспринимать..BOB51 писал(а):и желания подстроиться под ЯВУ уже на уровне ассемблера
Например, переход контроллером совершается не потому что меньше или больше, а по факту проверки флага sreg. Так как предыдущая команда его устанавливает или очищает.
Это как компромисс между машинным языком и человеческим))
- COKPOWEHEU
- Говорящий с текстолитом
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Re: ATMEGA 8 и ATMEGA168 совместимость?
[uquote="BOB51",url="/forum/viewtopic.php?p=4676830#p4676830"]Особенности проистекают из структуры ядра и желания подстроиться под ЯВУ уже на уровне ассемблера (avrasm2).[/uquote]
Если бы хотели подстроиться под ЯВУ, сделали бы косвенную адресацию. Вот у меня по адресу Z=0x0124 лежит объект, как обратиться к его полю? Никак - сначала прибавляем к Z смещение, потом обращаемся. Вот у меня на стеке выделено пять локальных переменных, как к ним обратиться? Снова никак - сначала загрузить в регистр SP, потом добавить смещение, и только потом обращаемся.
Для сравнения, в risc-v регистр SP это просто РОН, и есть команды вроде lw reg, 4(sp), sw reg, -6(reg). В ARM вроде тоже что-то подобное есть.
Если бы хотели подстроиться под ЯВУ, сделали бы косвенную адресацию. Вот у меня по адресу Z=0x0124 лежит объект, как обратиться к его полю? Никак - сначала прибавляем к Z смещение, потом обращаемся. Вот у меня на стеке выделено пять локальных переменных, как к ним обратиться? Снова никак - сначала загрузить в регистр SP, потом добавить смещение, и только потом обращаемся.
Для сравнения, в risc-v регистр SP это просто РОН, и есть команды вроде lw reg, 4(sp), sw reg, -6(reg). В ARM вроде тоже что-то подобное есть.
Только вот со шрифтами там довольно печально. Да и с дизайном тоже. Сравните.BOB51 писал(а):Такая "шпора" быстрее память освежает.
Re: ATMEGA 8 и ATMEGA168 совместимость?
[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4676847#p4676847"]Вот у меня по адресу Z=0x0124 лежит объект, как обратиться к его полю?[/uquote]
LDD Rd, Z+q ?
LDD Rd, Z+q ?
Re: ATMEGA 8 и ATMEGA168 совместимость?
Табличное чтение есть, переход ICALL , IJMP есть
сложение/вычитание с индекс-регистрами (ADIW, SBIW) есть,
Обмен регистровых пар MOVW есть.
Чего ещё не хватает то?
Разве что спец команды условного возврата как у I8080/Z80 ...
Так их устроить не так уж и сложно.
Быстродействие вполне позволяет.

Насчет шрифтов и оформления в "шпоре" - это пдфка с *.bmp оригинала 90х годов. Переделывать леньки (пикушки у меня уже в splan7 отрисованы, а 51я и I8080/Z80 вообще вручную с карандашиком - тогда ещё с компами напряг был).

И второе...
"шпаргалки" не заменяют основной документации по системе команд и даташитам МК - это всего лишь возможность быстро "окинуть взглядом" имеющиеся в распоряжении ресурсы.
(возможность выбора более удачного решения из "чуток подзабытого" при перерывах в работе с МК)

сложение/вычитание с индекс-регистрами (ADIW, SBIW) есть,
Обмен регистровых пар MOVW есть.
Чего ещё не хватает то?
Разве что спец команды условного возврата как у I8080/Z80 ...
Так их устроить не так уж и сложно.
Быстродействие вполне позволяет.
Насчет шрифтов и оформления в "шпоре" - это пдфка с *.bmp оригинала 90х годов. Переделывать леньки (пикушки у меня уже в splan7 отрисованы, а 51я и I8080/Z80 вообще вручную с карандашиком - тогда ещё с компами напряг был).
И второе...
"шпаргалки" не заменяют основной документации по системе команд и даташитам МК - это всего лишь возможность быстро "окинуть взглядом" имеющиеся в распоряжении ресурсы.
(возможность выбора более удачного решения из "чуток подзабытого" при перерывах в работе с МК)
Последний раз редактировалось BOB51 Ср янв 29, 2025 14:48:13, всего редактировалось 2 раза.