Ассемблер (ASM) для AVR в вопросах и ответах
- ПростоНуб
- Собутыльник Кота
- Сообщения: 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]
Там не ни слова о сегментах кода и данных. Так что опять мимо.
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", которое что то там "всегда"?
Откройте мануал на 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]
Пусть иные. Раз мои утверждения ложные, то эти "иные" это докажут.
Я жду цитаты.

Пусть иные. Раз мои утверждения ложные, то эти "иные" это докажут.
Я жду цитаты.
Последний раз редактировалось КРАМ Пт дек 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 в вопросах и ответах
Берем Тиньку13. Я с удовольствием посмотрю, как вы из СД-карты загрузите в ОЗУ табличку 256 байт. Или пожертвуете четверть доступного флеша на нее.ПростоНуб писал(а):Можете тогда считать, что эта таблица лежала на внешней SD-карте и была загружена в RAM.
Белая и Пушистая
- КРАМ
- Друг Кота
- Сообщения: 25163
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Ассемблер (ASM) для AVR в вопросах и ответах
[uquote="ПростоНуб",url="/forum/viewtopic.php?p=4657410#p4657410"]Я не хочу уходит от темы обсуждения того, что[/uquote]
Вы нагло лжете. Я ни в каком месте не утверждал, что в сегменте данных находится код. Это принципиально невозможно. Это гарвардская архитектура.
Я утверждал, что ТАБЛИЦЫ находятся во флеше и потому описываются в сегменте кода. Так устроен avrasm.
Вы нагло лжете. Я ни в каком месте не утверждал, что в сегменте данных находится код. Это принципиально невозможно. Это гарвардская архитектура.
Я утверждал, что ТАБЛИЦЫ находятся во флеше и потому описываются в сегменте кода. Так устроен 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.
Это будет уже третье изменение постановки.
Добавлено 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 в вопросах и ответах
ПростоНуб, сегмент DATA - это ОЗУ. а когда ты подаешь питание на МК, в ОЗУ находится хаос, и никакие нужные для работы данные в ОЗУ не появятся.
а чтобы в ОЗУ поместить нужные данные (твою таблицу) нужен кусок кода в программной памяти. так что, любые данные в сегменте данных - это код из программной памяти.
у меня, например, все данные, нужные для работы, находятся в еепром. и при включении эти данные читаются из еепром и копируются в ОЗУ.
и только когда данные (например таблица) лежит во флеши, дополнительный кусок кода для их копирования в ОЗУ не нужен. но при расположении данных во флеши сразу видно, что это часть кода.
а чтобы в ОЗУ поместить нужные данные (твою таблицу) нужен кусок кода в программной памяти. так что, любые данные в сегменте данных - это код из программной памяти.
у меня, например, все данные, нужные для работы, находятся в еепром. и при включении эти данные читаются из еепром и копируются в ОЗУ.
и только когда данные (например таблица) лежит во флеши, дополнительный кусок кода для их копирования в ОЗУ не нужен. но при расположении данных во флеши сразу видно, что это часть кода.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Для AVR, с возможностьюStarichok51 писал(а):...данные, нужные для работы, находятся в еепром. и при включении эти данные читаются из еепром и копируются в ОЗУ..
этого можно не делать. У меня довольно много данных и переписывать их никакого ОЗУ не хватит.Self-Programming
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Развели канитель.
Я привёл код - несколько XORов. Кто-то сможет короче и быстрее?
Я привёл код - несколько XORов. Кто-то сможет короче и быстрее?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Re: Ассемблер (ASM) для AVR в вопросах и ответах
[uquote="Gudd-Head",url="/forum/viewtopic.php?p=4657472#p4657472"]Я привёл код - несколько XORов.[/uquote]
Речь про вот эти несколько XORов?
Речь про вот эти несколько XORов?
- Just_Fluffy
- Вымогатель припоя
- Сообщения: 532
- Зарегистрирован: Ср июн 29, 2022 16:25:45
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Gudd-Head, вы привели картинку с текстом. Но не код на avr asm.
Вариант цикла (Starichok51, ваш вариант, я так понимаю +/- такой же)
R1:R0 - исходное значение
R3:R2 - результат.
Длина кода 14 байт.
В постановке задачи было -
Но тут есть маленькое но. Компилятор с ЯВУ зачастую сгенерит не самый оптимальный по размеру код.
Поэтому то я и прошу Gudd-Head показать код на асме, а не скан книжки.
Ибо его код, возможно и быстрее будет выполняться, но никак не короче.
А в постановке задачи было
Добавлено after 9 minutes 32 seconds:
Adrift, Кстати, если тупо в лоб циклом, то он компилируется в более короткий код.
Вариант цикла (Starichok51, ваш вариант, я так понимаю +/- такой же)
R1:R0 - исходное значение
Код: Выделить всё
LDI R16,16
Label:
ROR R1
ROR R0
ROL R3
ROL R2
DEC R16
BRNE LabelДлина кода 14 байт.
Кто хочет спорить - тому будет третье. Кто хочет решить задачу - предлагает решения, даже в виде картинок.ПростоНуб писал(а):Это будет уже третье изменение постановки.
В постановке задачи было -
- т.е. без привязки к конкретному МК. Значит код должен корректно работать на любой старой доброй 8битной AVRке.Just_Fluffy писал(а):минимальный код на асме AVR
Именно про эти.Adrift писал(а):Речь про вот эти несколько XORов?
Но тут есть маленькое но. Компилятор с ЯВУ зачастую сгенерит не самый оптимальный по размеру код.
Поэтому то я и прошу Gudd-Head показать код на асме, а не скан книжки.
Ибо его код, возможно и быстрее будет выполняться, но никак не короче.
А в постановке задачи было
Но почему то под минимальным все считают самый быстрый, а не самый маленький. Самый быстрый - табличный, но он не маленький )))))Just_Fluffy писал(а):минимальный код на асме AVR
Добавлено after 9 minutes 32 seconds:
Adrift, Кстати, если тупо в лоб циклом, то он компилируется в более короткий код.
Белая и Пушистая
- ДядяВован
- Мучитель микросхем
- Сообщения: 490
- Зарегистрирован: Вс окт 25, 2020 22:13:25
- Откуда: Смоленск
Re: Ассемблер (ASM) для AVR в вопросах и ответах
А не поменять-ли rol r2 и r3 местами?Just_Fluffy писал(а):R3:R2 - результат.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
[uquote="Just_Fluffy",url="/forum/viewtopic.php?p=4657550#p4657550"]Кстати, если тупо в лоб циклом, то он компилируется в более короткий код.[/uquote]
Так не честно, в "Алгоритмических трюках для программистов" такого варианта не было )
Так не честно, в "Алгоритмических трюках для программистов" такого варианта не было )
- Just_Fluffy
- Вымогатель припоя
- Сообщения: 532
- Зарегистрирован: Ср июн 29, 2022 16:25:45
Re: Ассемблер (ASM) для AVR в вопросах и ответах
ДядяВован, да, поменять.
(но размер кода не меняется)
Adrift, вот беда... Шож теперь делать?.....
Кстати, шифты на более чем 1 бит ( >> 2, >> 4...) на AVRках одной командой (в общем случае) не делаются. Нет такой команды....
(но размер кода не меняется)
Adrift, вот беда... Шож теперь делать?.....
Кстати, шифты на более чем 1 бит ( >> 2, >> 4...) на AVRках одной командой (в общем случае) не делаются. Нет такой команды....
Белая и Пушистая
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Первая задача решается «в лоб», поэтому решение появилось.
Вторая задача не совсем в лоб. Вот мой вариант из 5 команд.
Yes – метка перехода, когда в байте один единичный бит.
r0 - исходный байт.
LDI r20, 1
L0:
CP r0, r20
BREQ Yes
LSL r20
BRNE L0
Я на обычном ассемблере, практически, не работал, но как-то так.
[uquote="ДядяВован",url="/forum/viewtopic.php?p=4657564#p4657564"]
Поменять, конечно.
Чтобы не думать о порядке следования байтов, на «хорошем» ассемблере есть команда Shift_R V, которая сдвигает переменную V на один шаг вправо.
Вторая задача не совсем в лоб. Вот мой вариант из 5 команд.
Yes – метка перехода, когда в байте один единичный бит.
r0 - исходный байт.
LDI r20, 1
L0:
CP r0, r20
BREQ Yes
LSL r20
BRNE L0
Я на обычном ассемблере, практически, не работал, но как-то так.
[uquote="ДядяВован",url="/forum/viewtopic.php?p=4657564#p4657564"]
А не поменять-ли rol r2 и r3 местами?[/uquote]Just_Fluffy писал(а):R3:R2 - результат.
Поменять, конечно.
Чтобы не думать о порядке следования байтов, на «хорошем» ассемблере есть команда 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]
Я пока так и не понял постановку задачи. Требуется оптимизировать размер кода или его производительность? В зависимости от этого задача решается по разному.
Естественно, подразумевался сегмент 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]
Я пока так и не понял постановку задачи. Требуется оптимизировать размер кода или его производительность? В зависимости от этого задача решается по разному.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
[uquote="ПростоНуб",url="/forum/viewtopic.php?p=4657605#p4657605"]То есть, код - это инструкции CPU или то, что привело к их формированию бекэндом-кодогенератором или компилятором.
И если данные были конвертированы из бинарного файла в объектный при помощи objcopy, то когда и как они вдруг превратились в код?
А если я на STM8 загружу код в RAM и выполню его оттуда, это будут данные или код? )))[/uquote]
Представьте, что у нас один из тех конкурсов где нужно писать программы ограниченные по размеру до 1/4/64...КB. Слышали же про такие? Простые и понятные абсолютному большинству условия и я сомневаюсь что был хоть один случай когда вместо программы размером 1КB приносили программу на 1GB и доказывали, что сама программа то 1KB, а все остальное - данные загружаемые с внешнего носителя )
И если данные были конвертированы из бинарного файла в объектный при помощи 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 команд