Обсуждаем контроллеры компании Atmel.
Ответить

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

Вт май 21, 2019 16:26:41

друзья я все это понимаю (и знаю) как он взводиться и как он сбрасываеться.

просто у меня какимто чюдом получилось его вручную взвести через асм код. но на следующий день уже не получалось.
вот просто доказать атмелу что мы можем даже программно его взвести :)
както же у меня получилось, не переглючило же меня так сильно :) утром делал на свежую голову.

а применение всегда найдеться - подняли флаг, сработало прерывание (хотя фактически понятно что нет). ну хотя это можно и еденицу записать на ногу прерывания.
больше ради спортивного интереса конечно.

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

Вт май 21, 2019 16:43:46

а проект сохранился?

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

Вт май 21, 2019 17:03:57

Чудес не бывает, эти флаги программно только сбрасываются. Сама внутренняя логика такова.

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

Вт май 21, 2019 18:26:11

А почему бы и не поставить?
К примеру настроено прерывание по перепаду а сам порт предварительно выставлен как выход с уровнем 1.
Ежли аппаратно такой фокус пройдет - программа пишет туда 0 и тем самым ставит флаг в 1 (улетая в прерывание).
:roll:
Только по факту это то же самое программное прерывание, только по своей же лапке.
8)
Спутать - вполне можно с переусердия - флаги то на тех же местах, что и биты регистров порта...
:tea:

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

Вт май 21, 2019 18:33:43

alex68md писал(а):просто у меня какимто чюдом получилось его вручную взвести через асм код
это был обман зрения :)

alex68md писал(а):вот просто доказать атмелу что мы можем даже программно его взвести
это вряд ли :) я так понимаю, что там обычный RS-триггер: на S вход заведена логика сигналов с пина микроконтроллера, а на вход R - внутренняя шина данных. поэтому при всем желании никак вы туда ничего не запишите, ибо пишется R-вход триггера, а читается - выход триггера.
BOB51 писал(а):А почему бы и не поставить?
потому что эта "поставка" делается не записью в регистр EIFR, как требуется по условию задачи :)

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

Ср май 22, 2019 08:20:35

ладно чтото никак не получается. наверно показалоось.

а подскажите такой вопрос. в первой строчки тут все понятно :
asm volatile("sbi %0, %1" : : "I" (_SFR_IO_ADDR(PORTB)), "I" (PB5));
asm volatile("sbi %0, 0x07" : "I" (_SFR_IO_ADDR(PORTB)):);

1) для чего вообще используется секция вывод и в каких случаях? после первой :
2) почему во второй строчке после первой : в секции вывод унас определение аргумента %0 , почему не после второго : ?

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

Ср май 22, 2019 09:04:34

ARV
Ёжли человек с перегрузу
:write: :sleep: :shock:
случайно вместо EIFR впишет
соответствующий порт ввода/вывода (или еще какого....),
а затем по утрячку при анализе вчерашнего ... поправится...
:dont_know:
Ведь от "волшебного исходника" у него следов не осталось...
:wink:

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

Ср май 22, 2019 09:12:30

alex68md, а не могли бы Вы сначала почитать документацию, а только после этого задавать вопросы?

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

Ср май 22, 2019 10:52:07

Простонуб , т.е. если после этой инструкции переменная поменяет свое значение то она используется как вывод?
Ок, тогда куда писать порт, как первая или вторая строчка? У всех в примерах в нете порт как инпут, несмотря на то что по мануалу мы же меняем значение этой переменной и получается надо как во второй строчке?

Добавлено after 2 minutes 41 second:
BOB51, если это вы мне, то многократно уже озвучивалось , просто строчка sbi port,pin. Посмотрите мои ответы внимательно.

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

Ср май 22, 2019 12:02:56

alex68md, с точки зрения компилятора, порт - это указатель, причем константный. И его значение мы не меняем. В ассемблере меняем то, на что ссылается этот указатель.

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

Ср май 22, 2019 14:25:26

ПростоНуб, хорошо так и как правильнЕЕ ? первая или вторая запись ?

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

Ср май 22, 2019 15:27:35

alex68md, правильнее первая, так как никаких переменных, известных компилятору, и никаких регистров, используемых компилятором, в коде не изменяется.

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

Ср май 22, 2019 16:33:10

понятно спасибо

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

Чт май 23, 2019 05:06:47

Кто знает, что делать с ошибкой constant value required?
На вторую строку ругается:

Код:
waitForJ:
    sbis    USBIN, USBMINUS ;1 [40] wait for D- == 1
    rjmp    waitForJ        ;2


Гуглил, гуглил, вроде типа не объявлено что-то.
Я так подозреваю, что это USBIN. Так как не нашел его дефайн в проекте...

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

Чт май 23, 2019 06:35:27

alex68md, если так, как написали Вы, то не надо. Надо если так:
Код:
asm volatile("sbi 0x18,0x07\n\t \
              sbi 0x18,0x06");


а третья \ тут опечатка ? так должно быть как далее

asm volatile("sbi 0x18,0x07\n\t
sbi 0x18,0x06");

или всетаки как у вас ?

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

Чт май 23, 2019 08:07:40

alex68md, как у меня будет работать с любым компилятором, так как многострочный литерал преобразуется в однострочный средствами препроцессора С. Как у Вас - зависит уже от компилятора и его параметров.

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

Чт май 23, 2019 14:01:15

а перед третьим \ должен быть пробел?

т.е. это универсальный вариант ?
Код:
asm volatile("sbi 0x18, 7\n\t \
              sbi 0x18, 6\n\t \
              sbi 0x18, 5");


это тоже?
Код:
asm volatile("sbi 0x18, 7\n\t;
              sbi 0x18, 6\n\t;
              sbi 0x18, 5");


а это не всегда ?
Код:
asm volatile("sbi 0x18, 7\n\t
              sbi 0x18, 6\n\t
              sbi 0x18, 5");

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

Чт май 23, 2019 14:52:32

alex68md, второй вариант, вообще не будет работать, так как после табуляции в нем символ комментария, а значит и весь текст до следующего \n будет воспринят, как комментарий, а не как команда.
Я же уже писал, что первый вариант будет работать всегда. Третий - если компилятор поддерживает такую многострочную запись строковых литералов.

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

Чт май 23, 2019 15:11:34

а можно ссылку какуюто с примерами про этот пустой литерал \
?

а то чёто както непонятно \нет я могу тупо повторять этот тимплейт и всё будет ок но хочеться больше понимания

так а пробел нужен или можно без ?
sbi port,pin \n\t\
sbi port,pin \n\t\

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

Чт май 23, 2019 15:47:22

alex68md, достаточно почитать стандарт языка C. Да хоть С11 пункт 6.4.5.
Стандарт С внутри строкового литерала переход на новую строку не допускает, хотя многие компиляторы это позволяют.

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

Отсюда же следует, что пробел перед последним обратным слешем не обязателен, но заметно повышает читабельность.
Ответить