реклама на сайте
подробности

 
 
> Ассемблер AVR
vvvalarm
сообщение Jul 11 2012, 19:55
Сообщение #1





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



Не взыщите но глупых вопросов не бывает.
Как на ассемблере расшифровать две следующие записи (точне значки << |).
1. 1<<USIOIF
2.( 1<<USIOIF)|( 1<<USICS1)
Заранее спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ILYAUL
сообщение Jul 12 2012, 06:44
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Мне больше "нравится" когда написано так и по всему коду
Код
UCSR0B = 0b10011000


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 12 2012, 08:17
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
Tiro
сообщение Jul 12 2012, 20:41
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 781
Регистрация: 3-10-04
Из: Санкт-Петербург
Пользователь №: 768



Цитата(Сергей Борщ @ Jul 12 2012, 11:17) *
И даже в этом случае невозможно понять, что тут происходит, не заглядывая в даташит. А значит нужно отвлекаться, что совсем не способствует сосредоточенному написанию/отладке программы, даже теоретически. А в процессе написания не защищает от ошибок/описок.

А почему Вы не напомнили, что макрос (1<<(x)) давно обозвали BIT(x). Читать совсем удобно.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 12 2012, 21:56
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 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", многими ассемблерами и любым программистом, знающим любой из этих языков. wink.gif

А еще обратите внимание на приведенную мной запись
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() в хидере не захотел компилить, то я и вовсе разозлилась. sm.gif
Может быть отказался компилить, потому что на момент обработки этого sizeof размер был неизвестен (incomplete type)? Зачем расходовать нервные клетки? Просто поставьте себя на место компилятора. И на его месте, вероятно, вы бы сказали "Не виноватая я!!!..." biggrin.gif


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
ReAl
сообщение Jul 13 2012, 04:02
Сообщение #6


Нечётный пользователь.
******

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



Цитата(Сергей Борщ @ Jul 13 2012, 00:56) *
Может быть отказался компилить, потому что на момент обработки этого sizeof размер был неизвестен (incomplete type)?
Скорее, было
Код
#if sizeof(foo) == moo
Поскольку sizeof — оператор языка, в препроцессоре он не должен работать.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
Xenia
сообщение Jul 13 2012, 07:57
Сообщение #7


Гуру
******

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



Цитата(ReAl @ Jul 13 2012, 08:02) *
Скорее, было
#if sizeof(foo) == moo
Поскольку sizeof — оператор языка, в препроцессоре он не должен работать.


Ага! Именно так и было. Задумка была такая, чтобы после определения структуры проверить во сколько байт она компилится, чтобы вовремя забить тревогу, если был установлен неправильный align с выравниванием размера полей. Borland C/C++ (и его потомки) нормально это компилируют, а MS Visual C/C++ уперся рогом.
Go to the top of the page
 
+Quote Post
XVR
сообщение Jul 13 2012, 08:45
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 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);

Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jul 13 2012, 10:16
Сообщение #9


неотягощённый злом
******

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



да именно статк асерт здесь рулит.
Прикрепленный файл  static_assert.rar ( 448 байт ) Кол-во скачиваний: 81


to Xenia: конечно ваш код хуже, 3 строки вместо одной...
to XVR: не вижу смысла во втором аргументе вашего макроса.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
Xenia
сообщение Jul 13 2012, 11:07
Сообщение #10


Гуру
******

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



Цитата(demiurg_spb @ Jul 13 2012, 14:16) *
to Xenia: конечно ваш код хуже, 3 строки вместо одной...

Зато ваш хидер static_assert.h таков, что я в нем ничего не понимаю sm.gif. Определяется STATIC_ASSERT_H(expr) с единственным аргументом, а подставляется целых два: STATIC_ASSERT(sizeof(struct A) == 8, StructA);
И вообще непонятно, что сделает STATIC_ASSERT, если размер не сойдется. Компиляцию остановит, ошибку выдаст?

Цитата(demiurg_spb @ Jul 13 2012, 14:16) *
to XVR: не вижу смысла во втором аргументе вашего макроса.

Это чтобы нужное сообщение в мессадже среди варнингов появилось. Но можно было бы вместо него и #error использовать.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jul 13 2012, 11:45
Сообщение #11


неотягощённый злом
******

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



Цитата(Xenia @ Jul 13 2012, 15:07) *
Зато ваш хидер static_assert.h таков, что я в нем ничего не понимаю sm.gif. Определяется STATIC_ASSERT_H(expr) с единственным аргументом, а подставляется целых два: STATIC_ASSERT(sizeof(struct A) == 8, StructA);
И вообще непонятно, что сделает STATIC_ASSERT, если размер не сойдется. Компиляцию остановит, ошибку выдаст?
Так я и говорю, что достаточно одного аргумента.
И в самом начале файла static_assert.h есть пример использования для совсем уж непонятливыхsm.gif

Цитата
Это чтобы нужное сообщение в мессадже среди варнингов появилось. Но можно было бы вместо него и #error использовать.
Излишне это.
Выскочит ошибка компиляции, вы и так сразу поймёте, что асерт сработал.
В его условии весь смысл обычно и заложен, никаких дополнительных подсказок не требуется, а если не так, то комментарии никто не отменял и ты сам себе Буратино:-)


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 17:40
Рейтинг@Mail.ru


Страница сгенерированна за 0.01527 секунд с 7
ELECTRONIX ©2004-2016