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

Обсуждаем контроллеры компании Atmel.
Ответить
Опытный кот
Аватара пользователя
Сообщения: 708
Зарегистрирован: Пт ноя 30, 2007 14:40:44

Сообщение Серый_ »

Офф: :))) "Ассемблер (ASM) для AVR в вопросах и ответах"
MISRA - не равно ассемблер (а значит и идёт лесом)
С - не равно ассемблер
ptr128 писал(а):Будет у Вас заказчик серьезный - потребует сертификации MISRA.
Серьёзный заказчик не потребует сертификат MISRA, только потому, что MISRA поставила ему бутыль кентуккийского виски, разлива 1865г... Иначе "серьёзность" заказчика встанет под сомнение, а к MISR-е применят антимонопольное право. (Если она и туда бутыль виски не поставит :)))).
ptr128 писал(а):Значит все же есть какие-то причины, почему ассемблер запрещают использовать вне ассемблерных вставок C?
Вполне возможно, что какие-то причины есть, MISR-ены причины = MISRA их пусть и скушает. :)
Реклама
Встал на лапы
Сообщения: 106
Зарегистрирован: Чт сен 10, 2015 06:59:03
Откуда: Гродно, BY

Сообщение trofim2 »

Полностью поддерживаю!
Реклама
Друг Кота
Аватара пользователя
Сообщения: 6348
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

Z_h_e писал(а): Да, получилось с циферными метками.
Никаких ограничений. Любые метки.

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

               	.macro  cr16
               	tst	r16
               	brne	lab1
               	clr	r17
            lab1:
               	.endmacro

    ....................
             cr16
             nop
             cr16
             nop
   ...........


; ======
00005a 2300     +tst r16
00005b f409     +brne lab1
00005c 2711     +clr r17
                +lab1 :
                  	cr16
00005d 0000      	nop
                +
00005e 2300     +tst r16
00005f f409     +brne lab1
000060 2711     +clr r17
                +lab1 :
                  	cr16
000061 0000      	nop

само собой, речь идет о нормальном асме, как будет в асм. вставках в Си - Hz
Неважно, что в листинге будет несколько одноименных меток - компайлер сам понимает, что речь идет именно о метке, "родной" для данного макрорасширения.
Справедливо для AVR, в ассемблерах для других архитектур, к примеру, 1806ВМ2 (DEC) - несколько иначе.
Изображение
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Jack_A писал(а):само собой, речь идет о нормальном асме
У меня "ненормальный" асм. Понравились, в том числе, условные директивы, очень сильно экономит время и повышает читаемость кода.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
Эиком - электронные компоненты и радиодетали
Встал на лапы
Сообщения: 106
Зарегистрирован: Чт сен 10, 2015 06:59:03
Откуда: Гродно, BY

Сообщение trofim2 »

Какой?
Реклама
Друг Кота
Аватара пользователя
Сообщения: 6348
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

В Студиях (дальше 4-й я не продвигался) есть Assembler1 и Assembler2, в обоих вышеописанное работает. Так что проблемы локальных меток для AVR не существует. А о пользе директив условной трансляции - кто же сомневается ? (хотя мне применять не приходилось, бо не нужны были :) )
Изображение
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Дак и тут не проблема меток. Просто не знал синтаксис, теперь знаю.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Встал на лапы
Сообщения: 106
Зарегистрирован: Чт сен 10, 2015 06:59:03
Откуда: Гродно, BY

Сообщение trofim2 »

Локальные метки только в макросах?
А в основном теле программы?
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Сб сен 17, 2016 18:56:30

Сообщение dimmer »

Как известно при подаче питания, или после сброса аппаратно производится инициализация РВВ начальными значениями ( большая часть - нулём). Ваше мнение: нужно ли при конфигурации портов ВВ, записывать нули туда, где вроде-бы уже должен быть ноль? Например, если произошел сбой в программе и был осуществлён сброс по собачьему таймеру, или по коричневому детектору. (ATmega, ATtiny)
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

trofim2 писал(а): в основном теле программы?
Это как? Что Вы имеете ввиду?
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Встал на лапы
Сообщения: 106
Зарегистрирован: Чт сен 10, 2015 06:59:03
Откуда: Гродно, BY

Сообщение trofim2 »

Я имею ввиду не в макросах.
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Объясните что Вы имеете ввиду под локальной меткой в основном теле. Как Вы хотите ее применять?
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Встал на лапы
Сообщения: 106
Зарегистрирован: Чт сен 10, 2015 06:59:03
Откуда: Гродно, BY

Сообщение trofim2 »

Область действия локальных меток ограничена глобальными метками.
Пример:
Label_1:
.......
@@1:
.......
Label_2:
.......
@@1:
........
Label_3:
Т.е. первая локальная метка @@1 действительна только в зоне между Label_1 и Label_2,
вторая - между Label_2 и Label_3 .
За пределами до Label_1 и после Label_3 метки с именем @@1 не существует.

"@@" - признак локальной метки.
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

А какая необходимость этого?
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Встал на лапы
Сообщения: 106
Зарегистрирован: Чт сен 10, 2015 06:59:03
Откуда: Гродно, BY

Сообщение trofim2 »

Нет необходимости писать длинные метки в процедурах и библиотеках.
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

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

Сообщение Starichok51 »

trofim2 писал(а):Нет необходимости писать длинные метки
у каждой метки должно быть осмысленное имя, по которому понятно, что под ней делается.
а такая запись
@@1:
ничего осмысленного не несет, и через некоторое время и сам забудешь, что под этой меткой делается....
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Встал на лапы
Сообщения: 106
Зарегистрирован: Чт сен 10, 2015 06:59:03
Откуда: Гродно, BY

Сообщение trofim2 »

Во многих случаях локальные метки оправданы.
К примеру конструкция
"rjmp PC+смещение"
заменяется на
rjmp @@1
..........
@@1:
........
и позволяет вставлять/удалять команды не заботясь о смещении.
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

trofim2 писал(а):и позволяет вставлять/удалять команды не заботясь о смещении.
Именно для этого метки и придуманы, чтобы не заботится. Я так понимаю, что Вам влом менять имена меток, когда копируете код, ну для этого как раз макросы и существуют. Думаю другого способа нет.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Вымогатель припоя
Аватара пользователя
Сообщения: 606
Зарегистрирован: Вт июн 25, 2013 18:45:07

Сообщение Andrew Martin »

Польза от локальных меток неоспорима, поскольку в пределах проекта может существовать сколько угодно локальных меток с одинаковыми именами. Это позволяет не нагромождать длинные имена меток. И потом не приходится заморачиваться с именами при копипасте. Очень удобно для ближних меток.

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

funcname_1:

          cpi     r16,0
          brge   @@1
          neg    r16
    @@1:

funcname_2:

          cpi     r16,0
          brge   @@1
          neg    r16
    @@1:




Вот простой пример взятия модуля числа. Такая конструкция может быть использована без каких-либо переделок в любом числе функций одного и того же проекта.
Ответить

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