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

Обсуждаем контроллеры компании Atmel.
Ответить
Мудрый кот
Аватара пользователя
Сообщения: 1812
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Сообщение Kavka »

[uquote="ARV",url="/forum/viewtopic.php?p=3596305#p3596305"]только вот расширение .S давать таким подключаемым добавкам не комильфо, т.к. это расширение для ассемблерных модулей предназначено.[/uquote]
ARV, извините, уж, за назойливость.
file.S
Assembler code which must be preprocessed.
https://gcc.gnu.org/onlinedocs/gcc-3.3/gcc/Overall-Options.html
Ассемблер с обработкой препроцессором, однако...
:)
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18790
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Не понял, при чем тут назойливость и я. Да, ассемблер с препроцессором, а маленькая .s без препроцессора, но все это МОДУЛИ проекта, которые компилируются раздельно и потом их объектные файлы линкуются в общий результат.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Мудрый кот
Аватара пользователя
Сообщения: 1812
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Сообщение Kavka »

Kavka писал(а):только вот расширение .S давать таким подключаемым добавкам не комильфо, т.к. это расширение для ассемблерных модулей предназначено.
Я как бы вот к чему. Если сделать расширение не .S, например .asm, то такой файл не будет обрабатываться препроцессором и надо отдельно запускать препроцессор.
Соответственно и основной файл модуля и подключаемые файлы через #include тоже .S, чтобы и они обрабатывались препроцессором автоматически.
Формально получается, что все файлы должны быть ассемблерными модулями с обработкой препроцессором - все *.S

ARV, возможно вас смущает, то что все файлы .S, но не все должны быть включены в компиляцию (в проект).
Но ведь аналогичная ситуация с "чистым" ассемблером, когда все файлы *.asm. Но точно так же, одни для компиляции, другие используются косвенно, через .include.

Не отрицаю, что затронутая тема может оказаться из разряда "на вкус и цвет... бозон Хигса кактус". :))
ARV, спасибо за участие.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Собутыльник Кота
Аватара пользователя
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Сообщение ПростоНуб »

[uquote="Kavka",url="/forum/viewtopic.php?p=3598700#p3598700"]Если сделать расширение не .S, например .asm, то такой файл не будет обрабатываться препроцессором и надо отдельно запускать препроцессор.[/uquote]
Только в том случае, если компилятору явно не указано, что делать с данным файлом. Например, ключем -x assembler-with-cpp. И тогда вообще расширение может быть хоть ".мой ассемблерный изврат" :)))
Реклама
Эиком - электронные компоненты и радиодетали
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18790
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

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

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Сообщение ПростоНуб »

ARV, когда люди в чем-то сомневаются, они проводят эксперимент. В данном случе, времени на проведение такого эксперимента надо даже меньше, чем написание Вашего поста. Я, зная то, что gcc уже очень давно адаптирован к юникоду, таких сомнений не питаю :)))
Реклама
Мудрый кот
Аватара пользователя
Сообщения: 1812
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Сообщение Kavka »

[uquote="ПростоНуб",url="/forum/viewtopic.php?p=3598818#p3598818"]-x assembler-with-cpp[/uquote]Ну, да, какбы оно так.
Только не хочется лезть в глубь настроек проекта в студии, или в дебри make-файла...
Тем не менее спасибо за подсказку.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Грызет канифоль
Сообщения: 278
Зарегистрирован: Сб янв 03, 2015 21:03:24

Сообщение alex68md »

asm volatile("sbi 0x18,0x07;");

котаны зачем волатиле писать ? в некоторых примерах без него

зачем ; первый после 7? в большинстве примеров нету ; внтури

в большинстве приеров вместо ; внутри \n а гдето и \n\t но работает и без всего это. зачем надо как правильно? нет я понимаю что n перенос строки а ; вообще оператор конца команды
Друг Кота
Аватара пользователя
Сообщения: 15792
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Это ассемблерная вставка на СИ, а не "чистый ассемблер" - там свои заморочки СИшные...
8)
Собутыльник Кота
Аватара пользователя
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Сообщение ПростоНуб »

alex68md, В данном конкретном случае volatile казалось бы не нужен (не изменяются никакие переменные).
Однако! GCC оптимизатор обладает оригинальной особенностью игнорировать оператор asm без volatile, если этот оператор не возвращает никаких значений. Так же, оптимизатор может легко вывести оператор asm за пределы цикла, чтобы не выполнять многократно код, который, по его мнению, никак на сам цикл не влияет. Поэтому, для надежности, volatile лучше писать всегда.

Точка запятой уже относится к ассемблеру - это символ начала комментария в конце строки (аналог // в C++). В данном случает не нужен, но и не мешает никак.
Грызет канифоль
Сообщения: 278
Зарегистрирован: Сб янв 03, 2015 21:03:24

Сообщение alex68md »

ааа вот оно что спасибо!

а про \n \n\t в конце надо писать или можно без ?
Собутыльник Кота
Аватара пользователя
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Сообщение ПростоНуб »

alex68md, в ассемблере символ новой строки служит разделителем команд ассемблера. Поэтому в конце он никакого смысла не несет.
Грызет канифоль
Сообщения: 278
Зарегистрирован: Сб янв 03, 2015 21:03:24

Сообщение alex68md »

так если у меня две команды подряд
asm volatile("sbi 0x18,0x07");
asm volatile("sbi 0x18,0x06");
надо ставить \n ?
Собутыльник Кота
Аватара пользователя
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Сообщение ПростоНуб »

alex68md, если так, как написали Вы, то не надо. Надо если так:

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

asm volatile("sbi 0x18,0x07\n\t \
              sbi 0x18,0x06");
Грызет канифоль
Сообщения: 278
Зарегистрирован: Сб янв 03, 2015 21:03:24

Сообщение alex68md »

спасибо!

еще такой вопрос.
плата micro 32u4 (может это важно)
я експерементировал с записью в EIFR через ассемблер (на С этот трюк не проходил только на асм)
и как то (ну не както а через sbi 0x1C, 3) у меня получилось записывать флаг в ручную (когда он там ноль) т.е. я его взводил вручную (хотя вроде нельзя). компилировал старым ардуино 1.6.7 но потом обновился на последний иде - и уже не получается записать вручную. откатился обратно - тоже не получается. или магия какаято или я упускаю из виду какуюто важную деталь.
есть идеи как повторить этот трюк?
Это не хвост, это антенна
Сообщения: 1495
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

Arduino конструктор из кубиков. Не более. Если есть желание разбираться глубже, ставьте AVR-Studio 4.19.
Контактная информация:
Грызет канифоль
Сообщения: 278
Зарегистрирован: Сб янв 03, 2015 21:03:24

Сообщение alex68md »

это да. никто не спорит. можно расматривать ардуино как фреймворк как js angular например в мире яваскрипта. внутри ардуины всеравно avr с/с++ / компилятор avrdude и т.д.

у меня же вопрос именно к ГУРУ асемблера . которые програмируют на чистом асм.

ктo то может попробовать записать единицу (поднять флаг) не путать со сбросом. в регистр EIFR ? получается это у вас ?
Собутыльник Кота
Аватара пользователя
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Сообщение ПростоНуб »

[uquote="alex68md",url="/forum/viewtopic.php?p=3636960#p3636960"]ктo то может попробовать записать единицу (поднять флаг) не путать со сбросом. в регистр EIFR ? получается это у вас ?[/uquote]
Да просто на фиг никому это не нужно было. В даташит ATMega328 сказано, что для сброса бита надо записать туда единицу. Каким образом при записи туда этой самой единицы он вместо сброса устанавливался - я без понятия. У меня всегда исправно единицой сбрасывается.
akl
Друг Кота
Сообщения: 4473
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Не гуру, но знаю что невозможно взвести флаг(и) программно. Программно эти флаги можно только сбросить, записью 1.
Друг Кота
Аватара пользователя
Сообщения: 15792
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Бывают и исключения и/или спецприемы для программного вызова обработчика прерывания.
Чаще даже не через флаг.
:wink:
Как вариант - соединим вместе лапку отвечающую за INT0/INT1 с каким-либо выходом
и делаем соответствующую подпрограммку дрыголапа, инициирующую прерывание.
Линии запускающие прерывание объединяем как линии с ОК.
8)
Ответить

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