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

Обсуждаем контроллеры компании Atmel.
Ответить
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

Я нынче говорю про ATmega165.
Старичок, я вроде бы достаточно понятно выразился про адрес.
Этот адрес в ЛЮБОМ AVR лежит вне адресного пространства cseg, однако хоть и с варнингами и некоторыми выше обозначенными нюансами, позволяет поместить константы в еепром, фьюзы и даже локбиты.
Изображение
Реклама
Модератор
Аватара пользователя
Сообщения: 19101
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Сообщение Starichok51 »

выразился ты понятно, но про ЛЮБОЙ AVR я не могу с тобой согласиться. я же сказал, что в АТмега8 нет возможности при программировании задать трехбайтовый адрес.
при программировании для АТмега8 можно отправить только 2 байта адреса.
да, в AVR с большим размером флеши есть команда отправки старшего байта адреса. но у "младших" МК такой возможности нет.
посмотрел сейчас даташит на ATmega165, я там тоже не увидел при программировании отправки третьего байта адреса.
может, ты лишних 2 нуля приписал к указанным адресам? и там всего по 2 байта (0x8100 и 0x8200)?
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

[uquote="Starichok51",url="/forum/viewtopic.php?p=4489071#p4489071"]может, ты лишних 2 нуля приписал к указанным адресам? и там всего по 2 байта (0x8100 и 0x8200)?[/uquote]
Так, Старичок, внимательно и по слогам. Я НЕ ОШИБСЯ.
Скрин я показал.
Можешь повторить сам.
Указанные адреса НЕ ВХОДЯТ в адресное пространство флеша. Это виртуальные адреса еепрома (0х810000), фьюзов (0х820000) и локбитов (0х830000).
ЗЫ. Что характерно, при открывании окна фьюзов в MPLABX этот виртуальный адрес ПРЯМО ОТОБРАЖАЕТСЯ:
Изображение
ЗЗЫ. И все это придумал не совсем я.
Началось все с того, что один товарищ придумал править хекс, дописывая туда еепром из eep-файла с адресным смещением 81, а фьюзы с адресным смещением 82.
Я всего лишь развил эту мысль резонно предположив, что avrasm2 съест это адресное поле. И он его съел.
А мои нынешние игрища с живым ATmega165P лишь подтвердили действия симулятора. С этим нынче и работаю.
К процедуре программирования эти адреса не имеют отношения. Просто PICki4 и другие программаторы Микрочипа при прошивке интерпретируют виртуальные адреса в требуемую диаграмму согласно мануалу на программирование. Но так работают все программаторы всех фирм.
Модератор
Аватара пользователя
Сообщения: 19101
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Сообщение Starichok51 »

интересное кино...
я MPLABX не пользуюсь. может, поэтому для меня это не доступно.
ну, хорошо, MPLABX показывает эти виртуальные адреса.
показ показом. но я говорю про программирование.
при программировании можно отправить только 2 байта адреса.
я себе сделал собственные разработки и последовательного программирования (по SPI) и параллельного программирования. и я точно знаю, что есть возможность отправить только 2 байта адреса. и хоть USBasp, хоть MPLABX - 3 байта адреса они не отправят.
только у МК, у которых больше 128 кБ (более 64 к адресов) флеши, есть отправка старшего (третьего) байта адреса.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

[uquote="Starichok51",url="/forum/viewtopic.php?p=4489220#p4489220"]MPLABX - 3 байта адреса они не отправят.[/uquote]
Ты в состоянии прошить ЕЕПРОМ?
А фьюзы?
А лок-биты?
Ты в состоянии написать код для программатора, который интерпретирует адрес из хекса 0х810000 как необходимость прошить нулевой байт еепрома ТОЙ ДИАГРАММОЙ, которая для этого нужна?
С какого перепуга ты решил, что еепром нужно прошивать так же, как и флеш лишь на том основании, что еепрому назначили виртуальный адрес в хексе?
:facepalm:
PS. Напомню.
Четыре байта посылаемые при программировании в чип начинаются байтом команды.
0х60 - программирование младшего байта флеша
0х68 - программирование старшего байта флеша
0хС0 - программирование байта EEPROM
Что мешает интерпретировать смещение адреса (верхний адрес) 0х81 как команду 0хС0 при программировании?
:tea:
Реклама
Модератор
Аватара пользователя
Сообщения: 19101
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Сообщение Starichok51 »

тебе и мне ничего не мешает интерпретировать, как мы пожелаем.
но для меня это непонятно, как МК решит, что 0х81 - это то же самое, что 0хС0.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

[uquote="Starichok51",url="/forum/viewtopic.php?p=4489349#p4489349"]но для меня это непонятно, как МК решит, что 0х81 - это то же самое, что 0хС0.[/uquote]
А причем тут МК? :facepalm:
МК не потребляет хекс-файл по ISP интерфейсу. Ему вообще непонятен ASCII текст, которым написан хекс.
Между МК и хексом находятся две сущности - оболочка программатора в виде ПО на компьютере и сам железный программатор, который формирует протокол обмена физического уровня в том числе.
Реализовать парсинг хекса можно и в оболочке и контроллере программатора.
Что тут непонятного?
Друг Кота
Аватара пользователя
Сообщения: 15789
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

У каждого МК
СВОЯ
область адресов для спецданных.
Может напрямую читаться/записываться, а может и нет.
У ПИКов она оговорена заранее в документации.
У АВРок (по крайней мере "стандартных", до появления новых семейств) определено было только размещение сигнатуры типа МК и калибровки встроенного генератора.
И то похоже на вариант скрытого внутреннего "перепланирования" доступа к ячейкам.
Так что не факт, что области адресов, полученные опытным путем для одного кристалла совпадут с областями адресов другого.
А вот в новых моделях скорее всего микрочип сделает доработку с "приведением разметки" к единообразию.
Что лучше/хуже с точки зрения ситуации "случайного доступа" к тем спецячейкам - сказать сложно...
С одной стороны - все легкодоступно для прошивки, с другой - вопрос "нелегального доступа" к коду программы.
Ну и стоит туда же всякосторонние клоны отнести - там вопрос прошивки совсем уж "специфичен" при том, что система команд одинакова.
8)

КРАМ
Меня удивило как это на крутого профи снизошла идея копаться в нестандартном (любительском) стиле использования компиляторов?
Это же отрицаемое Вами "ЛЮБИТЕЛЬСТВО"!
Да еще и такие грубости в общении...
ФЕЕЭЭЭ...
:tea:
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

В каком месте грубости и что в предложенном любительского?
Кроме того, все без исключения АТмеги имеют идентичный протокол ISP.
Более того, все МК Атмела имеют в протоколе ISP возможность чтения всех областей флеша, еепрома, фьюзов, локов и ID чипа.
Нет никаких проблем для создания небольшой базы чипов в ПО и спокойно шить все области из одного хекса даже если есть отличия в адресах.
Друг Кота
Аватара пользователя
Сообщения: 15789
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Протокол то единый, да области размещения разные.
(у "сторонних производителей" не факт, что протокол загрузки такой же будет - там только единый формат файлов от компилятора сохраняется).
При таком подходе возможно удобен отдельный раздел в заголовке главного файла исходника с дополнительными участками, прописанными в *def.inc файлах каждого кристалла.
Как вариант - дополнение в софт-оболочке программатора, способное опознавать отдельную область *.hex файла, предназначенную для прошивки соответствующих участков ПЗУ.
Возможно и "совместное" дополнение - как в тексте исходника и *def.inc файле, так и в софте программатора.
:roll:
Но тут уже "сила привычки" - или пользуемся тем, что уже имеется или весьма много менять придется (что не всем интересно).
Делать "с нуля" и доработку стандартного софта и самодельный программатор (железо и сопровождающий софт) самостоятельно - дело гиблое и ленивое (по себе знаю - та же котуинка на 51й :facepalm: ).
Однако... Ежли у кого получится - всегда все рады будут.
8)
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

Области размещения тоже идентичные.
Протокол ISP не делает различий между чипами, заливая флеш, еепром и остальное совершенно идентично. Да и Мануал по ISP общий для всех.
Так что это не вопрос железа, а вопрос парсинга хекса.
Поскольку Старичок делал это железо, то мой тон отражает лишь удивление тем, что он не понимает о чем я пишу.
У меня сложилось впечатление, что его железо не парсит хекс, а лишь использует готовое ПО с имеющимся протоколом между ПО и железом.
Модератор
Аватара пользователя
Сообщения: 19101
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Сообщение Starichok51 »

КРАМ писал(а):Так что это не вопрос железа, а вопрос парсинга хекса.
именно то, что это вопрос железа.
парсингом хекса занимается ПО комповой программы, а не сам МК. поэтому я тебе задал этот вопрос: как МК решит, что 0х81 - это то же самое, что 0хС0? но ты на него не ответил.
КРАМ писал(а):У меня сложилось впечатление, что его железо не парсит хекс, а лишь использует готовое ПО с имеющимся протоколом между ПО и железом.
как уже сказал, парсит хекс ПО, а не железо. или ты думаешь, что ПО передает в МК хекс, а МК умеет его парсит? тогда ты заблуждаешься.
парсит ПО, а по интерфейсу ПО передает только команды в полном соответствии с протоколом, описанном в даташите.
ПО я тоже писал сам своё. и моё ПО работает через СОМ порт и через USART, а не через USB.
я сумел при тактовой частоте 8 МГц поднять скорость USART до 250000 бод, что позволило иметь скорость работы программатора ни чуть не меньше скорости по USB.
при сравнении с usbasp разницы с моим ПО я практически не заметил.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

[uquote="Starichok51",url="/forum/viewtopic.php?p=4489409#p4489409"]именно то, что это вопрос железа.
парсингом хекса занимается ПО комповой программы, а не сам МК.[/uquote]
У нас с тобой полное расхождение терминологии.
Давай я определю свою терминологию и тогда ты поймешь о чем я говорю.
При программировании МК, который я далее буду называть ТАРГЕТом, выстраивается цепочка из ТРЕХ компонентов: ПО->программатор->таргет.
Под железом я понимаю ПРОГРАММАТОР, а не таргет.
Так вот, парсингом может заниматься как ПО, так и ПРОГРАММАТОР. Естественно, что во втором варианте программатор должен из себя представлять не "пять проводков", а полноценное устройство под управлением СОБСТВЕННОГО микроконтроллера. Так делают все нормальные программаторы, включая упомянутый мной ранее PICkit4.
Но где ты будешь заменять 0x81 на 0xC0 - совершенно безразлично. Можно в ПО, а можно в программаторе. С точки зрения функциональности программатор предпочтительнее. Поэтому оный PICkit4 может шить все подряд, а так же являться дебаггером для кучи совершенно разных платформ МК.
[uquote="BOB51",url="/forum/viewtopic.php?p=4489369#p4489369"]У каждого МК
СВОЯ
область адресов для спецданных.
Может напрямую читаться/записываться, а может и нет.
У ПИКов она оговорена заранее в документации.
У АВРок (по крайней мере "стандартных", до появления новых семейств) определено было только размещение сигнатуры типа МК и калибровки встроенного генератора.
И то похоже на вариант скрытого внутреннего "перепланирования" доступа к ячейкам.[/uquote]
Это категорически не так.
Достаточно открыть мануал по программированию Атмела и убедится в этом. Всё как у всех.
Область фьюзов может иметь виртуальные адреса, а может не иметь. Это совершенно безразлично. Программирование все равно имеет специальный протокол для каждой секции. Только сейчас отдельные МК с целью удешевления используют флеш идентичный программному для еепрома и фьюзов, в результате доступ к ним в некоторой степени унифицировался при самопрограммировании МК. Но и только.
Последний раз редактировалось КРАМ Вс окт 15, 2023 15:18:42, всего редактировалось 1 раз.
Модератор
Аватара пользователя
Сообщения: 19101
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Сообщение Starichok51 »

мне по херу, где ты будешь заменять 0xC0 на 0x81.
третий раз задам тот же вопрос.
как таргет узнает, что 0x81 является эквивалентом 0xC0?
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

[uquote="Starichok51",url="/forum/viewtopic.php?p=4489481#p4489481"]мне по херу, где ты будешь заменять 0xC0 на 0x81.[/uquote]
У тебя все нормально сегодня? :dont_know: Заменяется не 0xC0 на 0x81, а 0x81 на 0xC0...
[uquote="КРАМ",url="/forum/viewtopic.php?p=4489466#p4489466"]Но где ты будешь заменять 0x81 на 0xC0 - совершенно безразлично. Можно в ПО, а можно в программаторе.[/uquote]
Читаем внимательно...
[uquote="Starichok51",url="/forum/viewtopic.php?p=4489481#p4489481"]как таргет узнает, что 0x81 является эквивалентом 0xC0?[/uquote]
А таргет и не узнает. Ему вообще не нужно об этом знать. ПО или программатор заменят 0x81 на 0xC0. По моему я ясно об этом сказал.
Модератор
Аватара пользователя
Сообщения: 19101
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Сообщение Starichok51 »

КРАМ писал(а):По моему я ясно об этом сказал.
а по-моему, ты ясно имел в виду, что вместо 0xC0 можно отправить 0x81. лично я именно так тебя понял.
а на хера я стану заменять 0x81 на 0xC0? если я сразу могу послать 0xC0.
так зачем мозги пудрить этими адресами 0x81, 0x82 и тому подобное, а потом подменять эти адреса командами? если удобнее посылать соответствующие команды согласно протокола.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

[uquote="Starichok51",url="/forum/viewtopic.php?p=4489505#p4489505"]зачем мозги пудрить этими адресами 0x81, 0x82 и тому подобное, а потом подменять эти адреса командами? если удобнее посылать соответствующие команды согласно протокола.[/uquote]
Это феерично... :facepalm:
Старичок, ты меня конечно извини, но наверное стоит сначала ознакомиться с первым сообщением, которым я открыл обсуждаемый тут вопрос.
Задача состоит в том, чтобы не городить кучу файлов и методов прошивки МК, а просто прошить ОДИН ЕДИНСТВЕННЫЙ ХЕКС, в котором будут и программный код, и содержимое ЕЕПРОМа (опционально), и фьюзы, и лок-биты.
Для этого хекс должен содержать виртуальные адреса этих сегментов, патамушта, например, файл .eep имеет адресное смещение равное нулю и отличить его от программного хекса можно только по расширению файла и по раздельной загрузке. Это клинический идиотизм.
Если, например, в АРМах файлы бутлоадера и апликейшена отдельны, то у них имеются разные адреса загрузки и оба файла прошиваются в один прием.
Но в этом есть смысл, потому что бутлоадер один для всех проектов. А тут какая то непонятная нормальному человеку хрень.
[uquote="Starichok51",url="/forum/viewtopic.php?p=4489505#p4489505"]а по-моему, ты ясно имел в виду, что вместо 0xC0 можно отправить 0x81. лично я именно так тебя понял.[/uquote]
:facepalm: Процитируй где я об этом писАл?
Я писал лишь то, что В ИСХОДНИКЕ можно обозначить виртуальный 24-разрядный адрес, который ассемблер и линкер приведут к единому хексу, который будет залит через PICkit4 в правильные области МК. И всё.
Модератор
Аватара пользователя
Сообщения: 19101
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Сообщение Starichok51 »

с PICkit4 я не знаком. может он умеет виртуальные адреса превращать в соответствующие команды.
потому я и высказал свое непонимание, что я не знаю возможностей PICkit4. и поэтому на этом мои вопросы к тебе прекращаются.
и меня вполне устраивают стандартные команды. иметь "сквозной" хекс для меня не является актуальным.
процитировать я не смогу. я же сказал, что я именно так тебя понял, но я не сказал, что ты именно так написал.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Вымогатель припоя
Аватара пользователя
Сообщения: 555
Зарегистрирован: Ср июн 29, 2022 16:25:45

Сообщение Just_Fluffy »

КРАМ, Т.е. трансляцию адресов делает именно прошивальщик (PICKit4-железяка)? Не зависимо от того, что на ПК запущено? Или все же MPLABX разруливает виртуальные адреса в хексе и уже командует прошивальщику, чего слать в МК?
Белая и Пушистая
Я не ИИ, поэтому могу ошибаться.
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 365
Зарегистрирован: Вс май 02, 2021 18:58:49
Откуда: 俄罗斯

Сообщение Dismas »

[uquote="Martian",url="/forum/viewtopic.php?p=4489678#p4489678"]...Вот если бы в программатор можно было воткнуть флэшку...[/uquote]
В PICkit4 именно так и есть.
В среде разработки создаётся проект, выбирается “Programmer To Go PICkit3/PICkit4”.
Далее программа создаст HEX-файл и загрузит его на SD-карту, а сам программатор перейдет в автономный режим.
(В случае с PICkit3 данные сохраняются на встроенной памяти EEPROM).
Ответить

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