|
Ассемблер AVR |
|
|
|
Jul 11 2012, 19:55
|
Группа: Новичок
Сообщений: 2
Регистрация: 11-07-12
Пользователь №: 72 725

|
Не взыщите но глупых вопросов не бывает. Как на ассемблере расшифровать две следующие записи (точне значки << |). 1. 1<<USIOIF 2.( 1<<USIOIF)|( 1<<USICS1) Заранее спасибо.
|
|
|
|
|
 |
Ответов
|
Jul 12 2012, 08:17
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
QUOTE (ILYAUL @ Jul 12 2012, 09:44)  Мне больше "нравится" когда написано так и по всему коду CODE UCSR0B = 0b10011000 И даже в этом случае невозможно понять, что тут происходит, не заглядывая в даташит. А значит нужно отвлекаться, что совсем не способствует сосредоточенному написанию/отладке программы, даже теоретически. А в процессе написания не защищает от ошибок/описок.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jul 12 2012, 21:56
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
QUOTE (Tiro @ Jul 12 2012, 23:41)  А почему Вы не напомнили, что макрос (1<<(x)) давно обозвали BIT(x). Читать совсем удобно. Возможно потому, что я понятия не имею, кто и где его так обозвал. Создатели avr-libc с вами не согласны - они обозвали такой макрос _BV(x). В то время как конструкция (1 <<(x)) совершенно однозначно понимается любым компилятором C, C++, "языков, похожих на C", многими ассемблерами и любым программистом, знающим любой из этих языков.  А еще обратите внимание на приведенную мной запись CODE UCSR0B = (1<<RXCIE0)|(0<<TXCIE0)|(0<<UDRIE0)|(1<<RXEN0)|(1<<TXEN0)|(0<<UCSZ02); Здесь совершенно четко видно - какой бит в нуле, а какой - в единице. И чтобы изменить значение бита, достаточно заменить ноль на единицу или наоборот. В случае же BIT(x) или битовых масок придется делать либо (1*BIT(x))|(0*BIT(y)), либо комментировать части выражения. Оба варианта совсем не добавляют читабельности. Еще для сброса бита можно удалять части выражения, но это тоже неудобно, ибо когда понадобится эту часть выражения снова вернуть - в большинстве случаев придется лезть в даташит/заголовочный файл, чтобы уточнить название добавляемого бита. QUOTE (Xenia @ Jul 12 2012, 20:26)  А когда siziof() в хидере не захотел компилить, то я и вовсе разозлилась.  Может быть отказался компилить, потому что на момент обработки этого sizeof размер был неизвестен (incomplete type)? Зачем расходовать нервные клетки? Просто поставьте себя на место компилятора. И на его месте, вероятно, вы бы сказали "Не виноватая я!!!..."
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jul 13 2012, 04:02
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
Цитата(Сергей Борщ @ Jul 13 2012, 00:56)  Может быть отказался компилить, потому что на момент обработки этого sizeof размер был неизвестен (incomplete type)? Скорее, было Код #if sizeof(foo) == moo Поскольку sizeof — оператор языка, в препроцессоре он не должен работать.
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
Jul 13 2012, 08:45
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(Xenia @ Jul 13 2012, 11:57)  а MS Visual C/C++ уперся рогом. Правильно уперся. Препроцессор не должен знать ничего из языка - он запускается до компилятора, да и ему вообще имеют право подсунуть не С/С++ текст. А для проверки 'во сколько байт компилится' есть другие возможности, чисто компиляторные Код #define STATIC_ASSERT(cond,msg) typedef char _Static_Assert_Typedef_##msg [ (cond)?1:-1];
struct A { int a; int b; };
STATIC_ASSERT(sizeof(struct A) == 8, StructA);
|
|
|
|
|
Jul 13 2012, 10:16
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
да именно статк асерт здесь рулит.
static_assert.rar ( 448 байт )
Кол-во скачиваний: 81to Xenia: конечно ваш код хуже, 3 строки вместо одной... to XVR: не вижу смысла во втором аргументе вашего макроса.
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Jul 13 2012, 11:07
|

Гуру
     
Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237

|
Цитата(demiurg_spb @ Jul 13 2012, 14:16)  to Xenia: конечно ваш код хуже, 3 строки вместо одной... Зато ваш хидер static_assert.h таков, что я в нем ничего не понимаю  . Определяется STATIC_ASSERT_H(expr) с единственным аргументом, а подставляется целых два: STATIC_ASSERT(sizeof(struct A) == 8, StructA); И вообще непонятно, что сделает STATIC_ASSERT, если размер не сойдется. Компиляцию остановит, ошибку выдаст? Цитата(demiurg_spb @ Jul 13 2012, 14:16)  to XVR: не вижу смысла во втором аргументе вашего макроса. Это чтобы нужное сообщение в мессадже среди варнингов появилось. Но можно было бы вместо него и #error использовать.
|
|
|
|
|
Jul 13 2012, 11:45
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(Xenia @ Jul 13 2012, 15:07)  Зато ваш хидер static_assert.h таков, что я в нем ничего не понимаю  . Определяется STATIC_ASSERT_H(expr) с единственным аргументом, а подставляется целых два: STATIC_ASSERT(sizeof(struct A) == 8, StructA); И вообще непонятно, что сделает STATIC_ASSERT, если размер не сойдется. Компиляцию остановит, ошибку выдаст? Так я и говорю, что достаточно одного аргумента. И в самом начале файла static_assert.h есть пример использования для совсем уж непонятливых  Цитата Это чтобы нужное сообщение в мессадже среди варнингов появилось. Но можно было бы вместо него и #error использовать. Излишне это. Выскочит ошибка компиляции, вы и так сразу поймёте, что асерт сработал. В его условии весь смысл обычно и заложен, никаких дополнительных подсказок не требуется, а если не так, то комментарии никто не отменял и ты сам себе Буратино:-)
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
Сообщений в этой теме
vvvalarm Ассемблер AVR Jul 11 2012, 19:55 ILYAUL Вот Jul 11 2012, 20:22 Xenia Это не ассемблер, а C. Сдвиг единички влево на ука... Jul 11 2012, 20:22 ILYAUL Цитата(Xenia @ Jul 12 2012, 00:22) Это не... Jul 11 2012, 20:27 _Артём_ Цитата(Xenia @ Jul 11 2012, 23:22) Это не... Jul 11 2012, 20:33  Xenia Цитата(_Артём_ @ Jul 12 2012, 00:33) Нет,... Jul 11 2012, 20:42   _Артём_ Цитата(Xenia @ Jul 11 2012, 23:42) Ясное ... Jul 11 2012, 21:54   V_G Цитата(Xenia @ Jul 12 2012, 06:42) Ясное ... Jul 11 2012, 23:00    SmarTrunk Как раз сейчас осваиваю не спеша ассемблер AVR. На... Jul 12 2012, 00:30     Сергей Борщ QUOTE (SmarTrunk @ Jul 12 2012, 03:30) Те... Jul 12 2012, 05:58     vvvalarm Цитата(SmarTrunk @ Jul 12 2012, 03:30) Ка... Jul 13 2012, 17:02 _Артём_ Цитата(vvvalarm @ Jul 11 2012, 22:55) Не ... Jul 11 2012, 20:23    Tiro Цитата(Сергей Борщ @ Jul 13 2012, 00:56) ... Jul 12 2012, 22:03     Сергей Борщ QUOTE (ReAl @ Jul 13 2012, 07:02) операто... Jul 13 2012, 06:31      Сергей Борщ QUOTE (Xenia @ Jul 13 2012, 10:57) уперся... Jul 13 2012, 08:24       ReAl Цитата(Сергей Борщ @ Jul 13 2012, 09:31) ... Jul 14 2012, 10:31       Xenia Цитата(XVR @ Jul 13 2012, 12:45) А для пр... Jul 13 2012, 10:14        XVR Цитата(Xenia @ Jul 13 2012, 14:14) Не виж... Jul 13 2012, 10:56 Xenia Цитата(ILYAUL @ Jul 12 2012, 10:44) Мне б... Jul 12 2012, 11:16  _Артём_ Цитата(Xenia @ Jul 12 2012, 14:16) В тех ... Jul 12 2012, 12:38  kolobok0 Цитата(Xenia @ Jul 12 2012, 15:16) ...это... Jul 12 2012, 12:47   Xenia Цитата(kolobok0 @ Jul 12 2012, 16:47) дол... Jul 12 2012, 14:06    ae_ Цитата(Xenia @ Jul 12 2012, 23:06) ...обр... Jul 12 2012, 15:27     Xenia Цитата(ae_ @ Jul 12 2012, 19:27) .equ MAS... Jul 12 2012, 16:00      SSerge Цитата(Xenia @ Jul 12 2012, 23:00) Ух ты... Jul 12 2012, 17:18       Xenia Цитата(SSerge @ Jul 12 2012, 21:18) Это т... Jul 12 2012, 17:26  _Pasha Цитата(Xenia @ Jul 12 2012, 14:16) В тех ... Jul 13 2012, 00:26   ae_ Цитата(_Pasha @ Jul 13 2012, 09:26) #defi... Jul 13 2012, 03:11 ILYAUL Так слово нравится я написал в ковычках - т.е как... Jul 12 2012, 09:27 ILYAUL Ну вот, и поговорили за asm Jul 14 2012, 22:21 ReAl — Привет, Пух!
— Привет, Пятачок!
— Хороша... Jul 15 2012, 05:18 uni Как я улучшаю читаемость при установке битов в кон... Jul 26 2012, 00:39 ILYAUL Вернёмся к asm. Тут вот , через эное количество ле... Aug 6 2012, 17:43 _Артём_ Цитата(ILYAUL @ Aug 6 2012, 20:43) что ме... Aug 6 2012, 18:33 ILYAUL Про него, родимого. Явных адресов подпрограмм Вы т... Aug 6 2012, 19:30 _Артём_ Цитата(ILYAUL @ Aug 6 2012, 22:30) Но пер... Aug 6 2012, 20:13 ILYAUL Нет . Артём , я Вам в личку отвечу подробно. Я по... Aug 6 2012, 20:32 kolobok0 Цитата(ILYAUL @ Aug 7 2012, 00:32) ...мож... Aug 7 2012, 06:22  demiurg_spb Цитата(kolobok0 @ Aug 7 2012, 10:22) для ... Aug 7 2012, 06:25   kolobok0 Цитата(demiurg_spb @ Aug 7 2012, 10:25) .... Aug 7 2012, 07:07 ILYAUL Цитатаидёт речь об адресах, которые могут хранитьс... Aug 7 2012, 08:41 kolobok0 Цитата(ILYAUL @ Aug 7 2012, 12:41) ...Вы ... Aug 7 2012, 11:38 ILYAUL 1. Я не храню там адреса переходов , я использую а... Aug 7 2012, 12:42 kolobok0 Цитата(ILYAUL @ Aug 7 2012, 16:42) ...2. ... Aug 7 2012, 13:43 ILYAUL Спасибо , за пояснения.
ЦитатаОтсюда я и спрашивал... Aug 7 2012, 15:34
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|