А в основном теле программы?
Ассемблер (ASM) для AVR в вопросах и ответах
Локальные метки только в макросах?
А в основном теле программы?
А в основном теле программы?
- Реклама
- Сообщения: 31
- Зарегистрирован: Сб сен 17, 2016 18:56:30
Как известно при подаче питания, или после сброса аппаратно производится инициализация РВВ начальными значениями ( большая часть - нулём). Ваше мнение: нужно ли при конфигурации портов ВВ, записывать нули туда, где вроде-бы уже должен быть ноль? Например, если произошел сбой в программе и был осуществлён сброс по собачьему таймеру, или по коричневому детектору. (ATmega, ATtiny)
Это как? Что Вы имеете ввиду?trofim2 писал(а): в основном теле программы?
Объясните что Вы имеете ввиду под локальной меткой в основном теле. Как Вы хотите ее применять?
- Реклама
Область действия локальных меток ограничена глобальными метками.
Пример:
Label_1:
.......
@@1:
.......
Label_2:
.......
@@1:
........
Label_3:
Т.е. первая локальная метка @@1 действительна только в зоне между Label_1 и Label_2,
вторая - между Label_2 и Label_3 .
За пределами до Label_1 и после Label_3 метки с именем @@1 не существует.
"@@" - признак локальной метки.
Пример:
Label_1:
.......
@@1:
.......
Label_2:
.......
@@1:
........
Label_3:
Т.е. первая локальная метка @@1 действительна только в зоне между Label_1 и Label_2,
вторая - между Label_2 и Label_3 .
За пределами до Label_1 и после Label_3 метки с именем @@1 не существует.
"@@" - признак локальной метки.
А какая необходимость этого?
Нет необходимости писать длинные метки в процедурах и библиотеках.
Теперь поясните что есть длинная метка?
у каждой метки должно быть осмысленное имя, по которому понятно, что под ней делается.trofim2 писал(а):Нет необходимости писать длинные метки
а такая запись
@@1:
ничего осмысленного не несет, и через некоторое время и сам забудешь, что под этой меткой делается....
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Во многих случаях локальные метки оправданы.
К примеру конструкция
"rjmp PC+смещение"
заменяется на
rjmp @@1
..........
@@1:
........
и позволяет вставлять/удалять команды не заботясь о смещении.
К примеру конструкция
"rjmp PC+смещение"
заменяется на
rjmp @@1
..........
@@1:
........
и позволяет вставлять/удалять команды не заботясь о смещении.
Именно для этого метки и придуманы, чтобы не заботится. Я так понимаю, что Вам влом менять имена меток, когда копируете код, ну для этого как раз макросы и существуют. Думаю другого способа нет.trofim2 писал(а):и позволяет вставлять/удалять команды не заботясь о смещении.
- Сообщения: 606
- Зарегистрирован: Вт июн 25, 2013 18:45:07
Польза от локальных меток неоспорима, поскольку в пределах проекта может существовать сколько угодно локальных меток с одинаковыми именами. Это позволяет не нагромождать длинные имена меток. И потом не приходится заморачиваться с именами при копипасте. Очень удобно для ближних меток.
Вот простой пример взятия модуля числа. Такая конструкция может быть использована без каких-либо переделок в любом числе функций одного и того же проекта.
Код: Выделить всё
funcname_1:
cpi r16,0
brge @@1
neg r16
@@1:
funcname_2:
cpi r16,0
brge @@1
neg r16
@@1:
Вот простой пример взятия модуля числа. Такая конструкция может быть использована без каких-либо переделок в любом числе функций одного и того же проекта.
Ваш пример рабочий? Как компилятор узнает зону ответственности метки?
Для Вашего примера любой доктор пропишет макрос.
Для Вашего примера любой доктор пропишет макрос.
То же самое достижимо, если не пытаться впихнуть весь проект в один файл исходного кода. Если у Вас каждый файл исходного кода содержит только один функциональный блок кода, длиной не более, чем в сотню строк, то и проблем с метками у Вас не будет. Дайте возможность компоновщику потрудиться )Andrew Martin писал(а):Польза от локальных меток неоспорима, поскольку в пределах проекта может существовать сколько угодно локальных меток с одинаковыми именами. Это позволяет не нагромождать длинные имена меток.
Не ошибается только то, кто ничего не делает.
Тот, кто признает свои ошибки, на них учится.
Глупец же, упорствуя в своих заблуждениях, остается глупцом.
Тот, кто признает свои ошибки, на них учится.
Глупец же, упорствуя в своих заблуждениях, остается глупцом.
Ну так используйте для AVR GNU Toolchain. Там компоновщик точно есть.
Не ошибается только то, кто ничего не делает.
Тот, кто признает свои ошибки, на них учится.
Глупец же, упорствуя в своих заблуждениях, остается глупцом.
Тот, кто признает свои ошибки, на них учится.
Глупец же, упорствуя в своих заблуждениях, остается глупцом.
Сколько пробовал, ничего не получается.
Нет сенсея, чтобы на пальцах показал, как им пользоваться.
Нет сенсея, чтобы на пальцах показал, как им пользоваться.
Ну не знаю. Под Eclipse для включения в проект ассемблера в *.S файлах, вообще никаких дополнителых телодвижений не требуется, кроме изначальной настройки CDT и AVR Eclipse Plugin.
Не ошибается только то, кто ничего не делает.
Тот, кто признает свои ошибки, на них учится.
Глупец же, упорствуя в своих заблуждениях, остается глупцом.
Тот, кто признает свои ошибки, на них учится.
Глупец же, упорствуя в своих заблуждениях, остается глупцом.



