Ассемблер (ASM) для AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
ПростоНуб
Собутыльник Кота
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ПростоНуб »

[uquote="КРАМ",url="/forum/viewtopic.php?p=4657391#p4657391"]Сегмент данных резервирует оперативную память, а не флеш.[/uquote]
AVR всегда для сегментов DATA и RODATA резервирует флеш. Содержимое сегмента DATA bootloader копирует в RAM, а RODATA - нет. Во флеш не попадает лишь BSS сегмент.

Добавлено after 4 minutes 49 seconds:
[uquote="Огонёк",url="/forum/viewtopic.php?p=4657396#p4657396"]берём даташит на МК[/uquote]
Там не ни слова о сегментах кода и данных. Так что опять мимо.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25163
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение КРАМ »

[uquote="ПростоНуб",url="/forum/viewtopic.php?p=4657401#p4657401"]DATA и RODATA[/uquote]
Откройте мануал на avrasm и процитируйте из него свое утверждение.

Добавлено after 2 minutes 38 seconds:
[uquote="ПростоНуб",url="/forum/viewtopic.php?p=4657401#p4657401"]AVR всегда.[/uquote]
Что такое "AVR", которое что то там "всегда"?
Аватара пользователя
ПростоНуб
Собутыльник Кота
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ПростоНуб »

[uquote="КРАМ",url="/forum/viewtopic.php?p=4657404#p4657404"]Откройте мануал на avrasm и процитируйте из него свое утверждение.[/uquote]
Там несколько иные названия сегментов, отличающиеся от общепринятых. Но ложности Вашего утверждения это нисколько не меняет.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25163
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение КРАМ »

[uquote="ПростоНуб",url="/forum/viewtopic.php?p=4657406#p4657406"]Но ложности Вашего утверждения это нисколько не меняет.[/uquote]
Пусть иные. Раз мои утверждения ложные, то эти "иные" это докажут.
Я жду цитаты.
:tea:
Последний раз редактировалось КРАМ Пт дек 06, 2024 22:52:32, всего редактировалось 1 раз.
Аватара пользователя
ПростоНуб
Собутыльник Кота
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ПростоНуб »

Я не хочу уходит от темы обсуждения того, что, по Вашему утверждению, в сегменте данных содержится код.
Аватара пользователя
Just_Fluffy
Вымогатель припоя
Сообщения: 532
Зарегистрирован: Ср июн 29, 2022 16:25:45

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Just_Fluffy »

ПростоНуб писал(а):Можете тогда считать, что эта таблица лежала на внешней SD-карте и была загружена в RAM.
Берем Тиньку13. Я с удовольствием посмотрю, как вы из СД-карты загрузите в ОЗУ табличку 256 байт. Или пожертвуете четверть доступного флеша на нее.
Белая и Пушистая
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25163
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение КРАМ »

[uquote="ПростоНуб",url="/forum/viewtopic.php?p=4657410#p4657410"]Я не хочу уходит от темы обсуждения того, что[/uquote]
Вы нагло лжете. Я ни в каком месте не утверждал, что в сегменте данных находится код. Это принципиально невозможно. Это гарвардская архитектура.
Я утверждал, что ТАБЛИЦЫ находятся во флеше и потому описываются в сегменте кода. Так устроен avrasm.
Аватара пользователя
ПростоНуб
Собутыльник Кота
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ПростоНуб »

[uquote="Just_Fluffy",url="/forum/viewtopic.php?p=4657411#p4657411"]Берем Тиньку13.[/uquote]
Это будет уже третье изменение постановки.

Добавлено after 42 minutes 40 seconds:
Поэкспериментировал. Что касается извращений - я явно был не прав. AVR ассемблер не позволяет создать объектный файл с сегментом данных RODATA. Для того, чтобы создать объектный файл с сегментом данных RODATA пришлось извращаться через avr-gcc. Только после этого прошивка всё же собралась линкером.
Так же я был не прав с копированием сегмента DATA из флеша bootloader. В случае ассемблера такого не происходит, только в startup коде GCC.
В итоге, разместить таблицу в сегменте данных RODATA мне удалось, но это оказалось далеко от общепринятого и не средствами avrasm.
Аватара пользователя
Starichok51
Модератор
Сообщения: 19046
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Starichok51 »

ПростоНуб, сегмент DATA - это ОЗУ. а когда ты подаешь питание на МК, в ОЗУ находится хаос, и никакие нужные для работы данные в ОЗУ не появятся.
а чтобы в ОЗУ поместить нужные данные (твою таблицу) нужен кусок кода в программной памяти. так что, любые данные в сегменте данных - это код из программной памяти.
у меня, например, все данные, нужные для работы, находятся в еепром. и при включении эти данные читаются из еепром и копируются в ОЗУ.
и только когда данные (например таблица) лежит во флеши, дополнительный кусок кода для их копирования в ОЗУ не нужен. но при расположении данных во флеши сразу видно, что это часть кода.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение akl »

Starichok51 писал(а):...данные, нужные для работы, находятся в еепром. и при включении эти данные читаются из еепром и копируются в ОЗУ..
Для AVR, с возможностью
Self-Programming
этого можно не делать. У меня довольно много данных и переписывать их никакого ОЗУ не хватит.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Gudd-Head »

Развели канитель.
Я привёл код - несколько XORов. Кто-то сможет короче и быстрее?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Adrift
Вымогатель припоя
Сообщения: 539
Зарегистрирован: Вт окт 01, 2024 15:22:33

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Adrift »

[uquote="Gudd-Head",url="/forum/viewtopic.php?p=4657472#p4657472"]Я привёл код - несколько XORов.[/uquote]
Речь про вот эти несколько XORов?
Аватара пользователя
Just_Fluffy
Вымогатель припоя
Сообщения: 532
Зарегистрирован: Ср июн 29, 2022 16:25:45

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Just_Fluffy »

Gudd-Head, вы привели картинку с текстом. Но не код на avr asm.

Вариант цикла (Starichok51, ваш вариант, я так понимаю +/- такой же)

R1:R0 - исходное значение

Код: Выделить всё

LDI R16,16
Label:
ROR R1
ROR R0
ROL R3
ROL R2
DEC R16
BRNE Label
R3:R2 - результат.
Длина кода 14 байт.
ПростоНуб писал(а):Это будет уже третье изменение постановки.
Кто хочет спорить - тому будет третье. Кто хочет решить задачу - предлагает решения, даже в виде картинок.
В постановке задачи было -
Just_Fluffy писал(а):минимальный код на асме AVR
- т.е. без привязки к конкретному МК. Значит код должен корректно работать на любой старой доброй 8битной AVRке.
Adrift писал(а):Речь про вот эти несколько XORов?
Именно про эти.
Но тут есть маленькое но. Компилятор с ЯВУ зачастую сгенерит не самый оптимальный по размеру код.
Поэтому то я и прошу Gudd-Head показать код на асме, а не скан книжки.
Ибо его код, возможно и быстрее будет выполняться, но никак не короче.
А в постановке задачи было
Just_Fluffy писал(а):минимальный код на асме AVR
Но почему то под минимальным все считают самый быстрый, а не самый маленький. Самый быстрый - табличный, но он не маленький )))))

Добавлено after 9 minutes 32 seconds:
Adrift, Кстати, если тупо в лоб циклом, то он компилируется в более короткий код.
Белая и Пушистая
Аватара пользователя
ДядяВован
Мучитель микросхем
Сообщения: 490
Зарегистрирован: Вс окт 25, 2020 22:13:25
Откуда: Смоленск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ДядяВован »

Just_Fluffy писал(а):R3:R2 - результат.
А не поменять-ли rol r2 и r3 местами?
Adrift
Вымогатель припоя
Сообщения: 539
Зарегистрирован: Вт окт 01, 2024 15:22:33

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Adrift »

[uquote="Just_Fluffy",url="/forum/viewtopic.php?p=4657550#p4657550"]Кстати, если тупо в лоб циклом, то он компилируется в более короткий код.[/uquote]
Так не честно, в "Алгоритмических трюках для программистов" такого варианта не было )
Аватара пользователя
Just_Fluffy
Вымогатель припоя
Сообщения: 532
Зарегистрирован: Ср июн 29, 2022 16:25:45

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Just_Fluffy »

ДядяВован, да, поменять.
(но размер кода не меняется)

Adrift, вот беда... Шож теперь делать?.....

Кстати, шифты на более чем 1 бит ( >> 2, >> 4...) на AVRках одной командой (в общем случае) не делаются. Нет такой команды....
Белая и Пушистая
AQ29
Нашел транзистор. Понюхал.
Сообщения: 198
Зарегистрирован: Сб июл 30, 2011 21:00:24

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение AQ29 »

Первая задача решается «в лоб», поэтому решение появилось.
Вторая задача не совсем в лоб. Вот мой вариант из 5 команд.
Yes – метка перехода, когда в байте один единичный бит.
r0 - исходный байт.

LDI r20, 1
L0:
CP r0, r20
BREQ Yes
LSL r20
BRNE L0

Я на обычном ассемблере, практически, не работал, но как-то так.
[uquote="ДядяВован",url="/forum/viewtopic.php?p=4657564#p4657564"]
Just_Fluffy писал(а):R3:R2 - результат.
А не поменять-ли rol r2 и r3 местами?[/uquote]
Поменять, конечно.
Чтобы не думать о порядке следования байтов, на «хорошем» ассемблере есть команда Shift_R V, которая сдвигает переменную V на один шаг вправо.
Аватара пользователя
ПростоНуб
Собутыльник Кота
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ПростоНуб »

[uquote="Starichok51",url="/forum/viewtopic.php?p=4657453#p4657453"]ПростоНуб, сегмент DATA[/uquote]
Естественно, подразумевался сегмент RODATA, который мне успешно удалось создать и слинковать, хоть и avrasm для этого не хватило.

[uquote="Starichok51",url="/forum/viewtopic.php?p=4657453#p4657453"]когда ты подаешь питание на МК, в ОЗУ находится хаос, и никакие нужные для работы данные в ОЗУ не появятся[/uquote]
Это само собой. Просто, так как я пользовался ассемблером исключительно из С, то упустил, что именно его загрузчик перемещает сегмент данных из флеша в оперативку.

[uquote="Starichok51",url="/forum/viewtopic.php?p=4657453#p4657453"]но при расположении данных во флеши сразу видно, что это часть кода.[/uquote]
Как это видно? Видно, что на них управление передается?
Может здесь принято иначе, но когда я употребляю по отношению к программированию слово "код", это я просто не уточняю, он "машинный", "исходный" или промежуточный (как у LLVM).
То есть, код - это инструкции CPU или то, что привело к их формированию бекэндом-кодогенератором или компилятором.
И если данные были конвертированы из бинарного файла в объектный при помощи objcopy, то когда и как они вдруг превратились в код?
А если я на STM8 загружу код в RAM и выполню его оттуда, это будут данные или код? )))

Добавлено after 2 minutes 49 seconds:
[uquote="AQ29",url="/forum/viewtopic.php?p=4657594#p4657594"]Первая задача решается «в лоб», поэтому решение появилось.[/uquote]
Я пока так и не понял постановку задачи. Требуется оптимизировать размер кода или его производительность? В зависимости от этого задача решается по разному.
Adrift
Вымогатель припоя
Сообщения: 539
Зарегистрирован: Вт окт 01, 2024 15:22:33

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Adrift »

[uquote="ПростоНуб",url="/forum/viewtopic.php?p=4657605#p4657605"]То есть, код - это инструкции CPU или то, что привело к их формированию бекэндом-кодогенератором или компилятором.
И если данные были конвертированы из бинарного файла в объектный при помощи objcopy, то когда и как они вдруг превратились в код?
А если я на STM8 загружу код в RAM и выполню его оттуда, это будут данные или код? )))[/uquote]
Представьте, что у нас один из тех конкурсов где нужно писать программы ограниченные по размеру до 1/4/64...КB. Слышали же про такие? Простые и понятные абсолютному большинству условия и я сомневаюсь что был хоть один случай когда вместо программы размером 1КB приносили программу на 1GB и доказывали, что сама программа то 1KB, а все остальное - данные загружаемые с внешнего носителя )
Аватара пользователя
ДядяВован
Мучитель микросхем
Сообщения: 490
Зарегистрирован: Вс окт 25, 2020 22:13:25
Откуда: Смоленск

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ДядяВован »

Just_Fluffy писал(а):(но размер кода не меняется)
к размеру кода вопросов нет
AQ29 писал(а):вариант из 5 команд
Коротко конечно. Но с допущением, что входящее значение имеет только один единичный бит. Если больше или ноль, то зависли.
Ответить

Вернуться в «AVR»