19.07.2011, 10:22
|
|
Прохожий
Регистрация: 26.10.2009
Сообщений: 9
Сказал спасибо: 1
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
Сообщение от Easyrider83
|
Как ТАКОЕ вообще реально запомнить? Где логика?
|
когда регулярно пользуешься - запоминается со временем само
Сообщение от Easyrider83
|
Ничего по нашей теме найти не смог. С есть для х86. Но там совершенно другое. Мне бы по микровизион найти. Я там уже юарт реализовал. Но опять же проклял все.
|
Керниган, Ричи, Язык С.
Раздел про побитовые логические операции - все вроде как раз в тему написано
|
|
|
|
19.07.2011, 15:10
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
Сообщение от artko
|
когда регулярно пользуешься - запоминается со временем само
|
Пока что кажется китайской грамотой. Не понимаю, зачем надо использовать маску для работы с одним битом. Это же какой-то абсурд. Например, в бейсике обращение выглядит так - PORTB.7 - имеется в виду седьмой бит регистра PORTB. Вместо константы может быть переменная PORTB.A - указатель на номер вывода. Страшно даже представить, как это будет выглядить на С. Я жутко извиняюсь, что зафлудил тему. Но мне правда очень надо освоить микровизион. Я себе такую цель поставил. Ассемблер АРМ не знаю, но думаю, там обращение к биту тоже одной командой выполняется. Почему нельзя так писать "прозрачный" код - который тут же ассоциируется с ассемблерной аналогией? Чтобы не думать потом, сколько тактов заняла ваша процедура.
Сообщение от artko
|
Керниган, Ричи, Язык С.
Раздел про побитовые логические операции - все вроде как раз в тему написано
|
Два дня эту книгу читаю. Пока что никакой закономерности и логики в этом языке не вижу. Я не пьющий, но если меня изрядно нахлобучить и накурить, возможно я выдам что-то подобное, малопонятное и максимально неусваиваемое.
У меня знакомый через два часа после знакомства с бейсиком написал код к шифратору и дешифратору, откомпилировали и запустил. А я имея многолетний опыт программирования за два дня только диодом поморгал. Кошмар.
|
|
|
|
19.07.2011, 16:40
|
|
Вид на жительство
Регистрация: 05.07.2006
Адрес: Tashkent
Сообщений: 454
Сказал спасибо: 24
Сказали Спасибо 67 раз(а) в 44 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
Цитата:
|
Или в 32х разрядных системах нет операций с битами? Имею в виду АСМ.
|
Применительно к ARM - есть, но все они применимы только к регистровому банку т.к. процессор понятия не имеет какую периферию к нему прикрутили(и прикрутили ли вообще). А вот что именно будет использоваться: битовые инструкции или маска - решает компилер т.к. вы на Си пишете. Поэтому если вам нужно именно с портом одной командой, то юзайте IOSET и IOCLR.
Цитата:
|
Почему нельзя так писать "прозрачный" код - который тут же ассоциируется с ассемблерной аналогией? Чтобы не думать потом, сколько тактов заняла ваша процедура.
|
Так что же вам мешает изучить его ассемблер и не плеваться от Си? А ARM - не та архитектура чтобы такты считать. Всякие ускорялки и конвейеры делают это время сильно зависимым от многих факторов.
Кстати, у кортексов ваша "проблема" с битовыми операциями решена с помощью т.к. bit-banding.
|
|
|
|
19.07.2011, 16:56
|
|
Прохожий
Регистрация: 26.10.2009
Сообщений: 9
Сказал спасибо: 1
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
(отмазка) все дальше написаное является имхо и может быть неточным, сам изучаю еще.
Сообщение от Easyrider83
|
Пока что кажется китайской грамотой. Не понимаю, зачем надо использовать маску для работы с одним битом. Это же какой-то абсурд. Например, в бейсике обращение выглядит так - PORTB.7 - имеется в виду седьмой бит регистра PORTB.
|
а в асм заглядывали? Очень может быть, что такое обращение это реализация авторов компилятора бейсика. А на самом деле там длинные маски (условно)
Ну и, например, я могу для своего тестового STM32 написать
GPIOA-›BSRR = GPIO_BSRR_BS8;
это установка восьмого бита порта А.
а в си для пиков можно было LATAbits.LATA8 = 1; (тоже установка восьмого бита) или LATA |= 1 ‹‹ 8;
Это к чему - надо читать заголовочные файлы и инструкции - возможно производитель/добрые люди уже помогли упростить.
Сообщение от Easyrider83
|
Ассемблер АРМ не знаю, но думаю, там обращение к биту тоже одной командой выполняется. Почему нельзя так писать "прозрачный" код - который тут же ассоциируется с ассемблерной аналогией?
|
можно использовать bit-banding, когда каждому биту соответствует свой "адрес в памяти". (если эта фича есть в вашем арме). будет фактически одной командой.
Только это си, а не ассемблер - зачем усложнять себе жизнь, привязываясь жестко к битам и т.п.? Чем и удобно - можно таскать куски кода откуда угодно, и оно работает.
Сообщение от Easyrider83
|
Два дня эту книгу читаю. Пока что никакой закономерности и логики в этом языке не вижу......... А я имея многолетний опыт программирования за два дня только диодом поморгал. Кошмар.
|
Привыкнете, потом (возможно) на бейсик и смотреть не захочете ![Улыбка](images/smilies/icon_smile.gif)
Все-таки большинство примеров кода для МК - си. Или бросать, или привыкать...
|
|
|
|
19.07.2011, 19:02
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
Сообщение от artko
|
а в асм заглядывали? Очень может быть, что такое обращение это реализация авторов компилятора бейсика.
|
Конечно, заглядывал. Стереть и установить бит - одна команда. Стереть байт - тоже. Записать что-то отличное от 0 - две команды. Все логично.
Кстати, как в С выглядит двоичная запись?
0b00000000 не работает
|
|
|
|
19.07.2011, 23:25
|
|
Прохожий
Регистрация: 26.10.2009
Сообщений: 9
Сказал спасибо: 1
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
Сообщение от Easyrider83
|
Кстати, как в С выглядит двоичная запись?
0b00000000 не работает
|
если Keil RealView компилятор - то вроде нет вообще двоичных констант, по крайней мере я в доках не смог найти.
В стандарте си тоже не указано, насколько помню - их наличие на совести конкретного компилятора.
Ну и, имхо, нагляднее (да и проще менять) запись вида
byte = 5 ‹‹ 1 | 4 ‹‹ 1; (установлены 5 и 4-й биты).
|
|
|
|
20.07.2011, 00:29
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
Сообщение от artko
|
byte = 5 ‹‹ 1 | 4 ‹‹ 1; (установлены 5 и 4-й биты).
|
Спасибо, что помогаете мне. Правильно ли я понял - знак вертикальной черты позволяет записывать операторы в одну строку?
Допустим есть переменная А. Она имеет размерность байт. Как в ней изменить конкретный бит не меняя значения остальных?
IOPIN0&=~(1‹‹0); //пишем нолик в бит 0?
IOPIN0 =1‹‹0; //пишем единичку в бит 0?
Знак бесконечности применяет инверсию?
Запись IOPIN0&=1‹‹1;
аналогична IOPIN0&=~(1‹‹0);
Правильно я понимаю?
Последний раз редактировалось Easyrider83; 20.07.2011 в 00:35.
|
|
|
|
20.07.2011, 07:56
|
|
Гражданин KAZUS.RU
Регистрация: 25.11.2008
Адрес: Волгоград
Сообщений: 507
Сказал спасибо: 42
Сказали Спасибо 49 раз(а) в 46 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
Сообщение от Easyrider83
|
Два дня эту книгу читаю. Пока что никакой закономерности и логики в этом языке не вижу.
|
Может вот эта книжка больше понравится...
|
|
|
Сказали "Спасибо" roma9112
|
|
|
20.07.2011, 08:01
|
|
Гражданин KAZUS.RU
Регистрация: 25.11.2008
Адрес: Волгоград
Сообщений: 507
Сказал спасибо: 42
Сказали Спасибо 49 раз(а) в 46 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
И вот еще по этой ссылке http://www.chipenable.ru/index.php/programming-c.html для старта можно посмотреть.
|
|
|
Сказали "Спасибо" roma9112
|
|
|
20.07.2011, 08:14
|
|
Вид на жительство
Регистрация: 05.07.2006
Адрес: Tashkent
Сообщений: 454
Сказал спасибо: 24
Сказали Спасибо 67 раз(а) в 44 сообщении(ях)
|
Re: Здравствуй, ARM. Запуск "на коленке"
Сообщение от Easyrider83
|
Правильно ли я понял - знак вертикальной черты позволяет записывать операторы в одну строку?
|
Нет, это всего лишь битовое ИЛИ.
Сообщение от Easyrider83
|
Запись IOPIN0&=1‹‹1;
аналогична IOPIN0&=~(1‹‹0);
|
Опять не угадали.
IOPIN0&=1‹‹1; эквивавлентна IOPIN=IOPIN & 0x02;
IOPIN0&=~(1‹‹0) эквивалентна IOPIN=IOPIN & 0xFFFFFFFE;
Краткая справка для вас:
1.Битовые операции
& операция поразрядного И двух регистров в банке
| битовое ИЛИ
^ исключающее ИЛИ
~ поразрядное дополнение(инверсия)
‹‹ сдвиг влево на n разрядов
›› сдвиг вправо
2.Логические операции(возвращают истина-ложь), используются главным образом в условных конструкциях проверки условий типа if.
! логическое отрицание
== проверка на равенство
&& логическое И
|| логическое ИЛИ
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 03:28.
|
|