Ассемблер (ASM) для AVR в вопросах и ответах
Re: Ассемблер (ASM) для AVR в вопросах и ответах
asm volatile("sbi 0x18,0x07;");
котаны зачем волатиле писать ? в некоторых примерах без него
зачем ; первый после 7? в большинстве примеров нету ; внтури
в большинстве приеров вместо ; внутри \n а гдето и \n\t но работает и без всего это. зачем надо как правильно? нет я понимаю что n перенос строки а ; вообще оператор конца команды
котаны зачем волатиле писать ? в некоторых примерах без него
зачем ; первый после 7? в большинстве примеров нету ; внтури
в большинстве приеров вместо ; внутри \n а гдето и \n\t но работает и без всего это. зачем надо как правильно? нет я понимаю что n перенос строки а ; вообще оператор конца команды
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Это ассемблерная вставка на СИ, а не "чистый ассемблер" - там свои заморочки СИшные...

- ПростоНуб
- Собутыльник Кота
- Сообщения: 2723
- Зарегистрирован: Пт сен 07, 2018 20:20:02
- Откуда: деревня в Тульской губернии
Re: Ассемблер (ASM) для AVR в вопросах и ответах
alex68md, В данном конкретном случае volatile казалось бы не нужен (не изменяются никакие переменные).
Однако! GCC оптимизатор обладает оригинальной особенностью игнорировать оператор asm без volatile, если этот оператор не возвращает никаких значений. Так же, оптимизатор может легко вывести оператор asm за пределы цикла, чтобы не выполнять многократно код, который, по его мнению, никак на сам цикл не влияет. Поэтому, для надежности, volatile лучше писать всегда.
Точка запятой уже относится к ассемблеру - это символ начала комментария в конце строки (аналог // в C++). В данном случает не нужен, но и не мешает никак.
Однако! GCC оптимизатор обладает оригинальной особенностью игнорировать оператор asm без volatile, если этот оператор не возвращает никаких значений. Так же, оптимизатор может легко вывести оператор asm за пределы цикла, чтобы не выполнять многократно код, который, по его мнению, никак на сам цикл не влияет. Поэтому, для надежности, volatile лучше писать всегда.
Точка запятой уже относится к ассемблеру - это символ начала комментария в конце строки (аналог // в C++). В данном случает не нужен, но и не мешает никак.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
ааа вот оно что спасибо!
а про \n \n\t в конце надо писать или можно без ?
а про \n \n\t в конце надо писать или можно без ?
- ПростоНуб
- Собутыльник Кота
- Сообщения: 2723
- Зарегистрирован: Пт сен 07, 2018 20:20:02
- Откуда: деревня в Тульской губернии
Re: Ассемблер (ASM) для AVR в вопросах и ответах
alex68md, в ассемблере символ новой строки служит разделителем команд ассемблера. Поэтому в конце он никакого смысла не несет.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
так если у меня две команды подряд
asm volatile("sbi 0x18,0x07");
asm volatile("sbi 0x18,0x06");
надо ставить \n ?
asm volatile("sbi 0x18,0x07");
asm volatile("sbi 0x18,0x06");
надо ставить \n ?
- ПростоНуб
- Собутыльник Кота
- Сообщения: 2723
- Зарегистрирован: Пт сен 07, 2018 20:20:02
- Откуда: деревня в Тульской губернии
Re: Ассемблер (ASM) для AVR в вопросах и ответах
alex68md, если так, как написали Вы, то не надо. Надо если так:
Код: Выделить всё
asm volatile("sbi 0x18,0x07\n\t \
sbi 0x18,0x06");Re: Ассемблер (ASM) для AVR в вопросах и ответах
спасибо!
еще такой вопрос.
плата micro 32u4 (может это важно)
я експерементировал с записью в EIFR через ассемблер (на С этот трюк не проходил только на асм)
и как то (ну не както а через sbi 0x1C, 3) у меня получилось записывать флаг в ручную (когда он там ноль) т.е. я его взводил вручную (хотя вроде нельзя). компилировал старым ардуино 1.6.7 но потом обновился на последний иде - и уже не получается записать вручную. откатился обратно - тоже не получается. или магия какаято или я упускаю из виду какуюто важную деталь.
есть идеи как повторить этот трюк?
еще такой вопрос.
плата micro 32u4 (может это важно)
я експерементировал с записью в EIFR через ассемблер (на С этот трюк не проходил только на асм)
и как то (ну не както а через sbi 0x1C, 3) у меня получилось записывать флаг в ручную (когда он там ноль) т.е. я его взводил вручную (хотя вроде нельзя). компилировал старым ардуино 1.6.7 но потом обновился на последний иде - и уже не получается записать вручную. откатился обратно - тоже не получается. или магия какаято или я упускаю из виду какуюто важную деталь.
есть идеи как повторить этот трюк?
-
Demiurg
- Это не хвост, это антенна
- Сообщения: 1480
- Зарегистрирован: Ср июн 25, 2008 15:19:44
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Arduino конструктор из кубиков. Не более. Если есть желание разбираться глубже, ставьте AVR-Studio 4.19.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
это да. никто не спорит. можно расматривать ардуино как фреймворк как js angular например в мире яваскрипта. внутри ардуины всеравно avr с/с++ / компилятор avrdude и т.д.
у меня же вопрос именно к ГУРУ асемблера . которые програмируют на чистом асм.
ктo то может попробовать записать единицу (поднять флаг) не путать со сбросом. в регистр EIFR ? получается это у вас ?
у меня же вопрос именно к ГУРУ асемблера . которые програмируют на чистом асм.
ктo то может попробовать записать единицу (поднять флаг) не путать со сбросом. в регистр EIFR ? получается это у вас ?
- ПростоНуб
- Собутыльник Кота
- Сообщения: 2723
- Зарегистрирован: Пт сен 07, 2018 20:20:02
- Откуда: деревня в Тульской губернии
Re: Ассемблер (ASM) для AVR в вопросах и ответах
[uquote="alex68md",url="/forum/viewtopic.php?p=3636960#p3636960"]ктo то может попробовать записать единицу (поднять флаг) не путать со сбросом. в регистр EIFR ? получается это у вас ?[/uquote]
Да просто на фиг никому это не нужно было. В даташит ATMega328 сказано, что для сброса бита надо записать туда единицу. Каким образом при записи туда этой самой единицы он вместо сброса устанавливался - я без понятия. У меня всегда исправно единицой сбрасывается.
Да просто на фиг никому это не нужно было. В даташит ATMega328 сказано, что для сброса бита надо записать туда единицу. Каким образом при записи туда этой самой единицы он вместо сброса устанавливался - я без понятия. У меня всегда исправно единицой сбрасывается.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Не гуру, но знаю что невозможно взвести флаг(и) программно. Программно эти флаги можно только сбросить, записью 1.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Бывают и исключения и/или спецприемы для программного вызова обработчика прерывания.
Чаще даже не через флаг.

Как вариант - соединим вместе лапку отвечающую за INT0/INT1 с каким-либо выходом
и делаем соответствующую подпрограммку дрыголапа, инициирующую прерывание.
Линии запускающие прерывание объединяем как линии с ОК.

Чаще даже не через флаг.
Как вариант - соединим вместе лапку отвечающую за INT0/INT1 с каким-либо выходом
и делаем соответствующую подпрограммку дрыголапа, инициирующую прерывание.
Линии запускающие прерывание объединяем как линии с ОК.
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Проще прыгнуть в обработчик прерывания .BOB51 писал(а):и делаем соответствующую подпрограммку дрыголапа, инициирующую прерывание.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Только именно под чистым ассемблером.
У автора вопроса АДУРИНА и, по всей вероятности, рамки ее функционала.
А там вызвать обработчик независимо от прерывания (без глубоковлезания в СИ)...
Пока так не изголялся на таком уровне...

У автора вопроса АДУРИНА и, по всей вероятности, рамки ее функционала.
А там вызвать обработчик независимо от прерывания (без глубоковлезания в СИ)...
Пока так не изголялся на таком уровне...

Re: Ассемблер (ASM) для AVR в вопросах и ответах
У автора вопрос ПОД ЧИСТЫМ АСМ
откуда вы взяли ардуина ? это я компилил через ардуину асмовскую вставку. просо мне так удобней
Как в чистом асме записать единицу в EIFR ?
Добавлено after 1 minute 54 seconds:
Faun как опытный асемблерщик может ответит ?
откуда вы взяли ардуина ? это я компилил через ардуину асмовскую вставку. просо мне так удобней
Как в чистом асме записать единицу в EIFR ?
Добавлено after 1 minute 54 seconds:
Faun как опытный асемблерщик может ответит ?
- ПростоНуб
- Собутыльник Кота
- Сообщения: 2723
- Зарегистрирован: Пт сен 07, 2018 20:20:02
- Откуда: деревня в Тульской губернии
Re: Ассемблер (ASM) для AVR в вопросах и ответах
[uquote="alex68md",url="/forum/viewtopic.php?p=3637043#p3637043"]Как в чистом асме записать единицу в EIFR ?[/uquote]
Для чего? По даташит - никак. Запись единицы в биты EIFR приводит к сбросу этих битов. Запись нуля не оказывает на них никакого воздействия.
На практике я наблюдаю полное соответствие поведения МК и даташит.
Для чего? По даташит - никак. Запись единицы в биты EIFR приводит к сбросу этих битов. Запись нуля не оказывает на них никакого воздействия.
На практике я наблюдаю полное соответствие поведения МК и даташит.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
EIFR - регистр аппаратного контроля состояния прерываний по INT0/INT1
Посему и возможные для него состояния:
аппаратный взвод флага при наличии прерывания по соответствующему условию (ежли прерывание разрешено);
аппаратный сброс флага по выходу из подпрограммы обслуживания прерывания или программный сброс флага.
Просто надо почитать даташит да понять чего внутри МК происходить должно.
Да разницу между программно-управляемыми и аппаратно-управляемыми ресурсами МК освоить.

Посему и возможные для него состояния:
аппаратный взвод флага при наличии прерывания по соответствующему условию (ежли прерывание разрешено);
аппаратный сброс флага по выходу из подпрограммы обслуживания прерывания или программный сброс флага.
Просто надо почитать даташит да понять чего внутри МК происходить должно.
Да разницу между программно-управляемыми и аппаратно-управляемыми ресурсами МК освоить.

Re: Ассемблер (ASM) для AVR в вопросах и ответах
[uquote="BOB51",url="/forum/viewtopic.php?p=3637117#p3637117"]...аппаратный взвод флага при наличии прерывания по соответствующему условию (ежли прерывание разрешено)...[/uquote]Уточню. Взвод флага прерывания осуществляется независимо от разрешенности оного. Условие выполнено - флаг аппаратно взводится. Программа решает сама как реагировать на это событие.
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Ассемблер (ASM) для AVR в вопросах и ответах
alex68md, если бы пояснил зачем это надо, то наверняка найдется альтернативый способ решения "хотелки".
