Не было никакой библиотеки, галлюцинация

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
qwerky
Мучитель микросхем
Сообщения: 487
Зарегистрирован: Пт июн 12, 2009 19:17:35
Контактная информация:

Re: AVR++ -- бета-версия вышла

Сообщение qwerky »

ellioh писал(а):
qwerky писал(а):чем это: pin_a_1::set(true); лучше PORTA |= (1 << PA1); ?
Если речь не идёт о многих пинах и об объединении в шину, и если Ваш код может позволить себе рассчитывать, что он всегда будет работать именно с портом A и именно с битом 1, разницы нет. Но и в генерируемом коде нет разницы, это одна и та же команда SBI.
порты/биты можно переопределить через #define
Мы используем под 8-битную логическую шину две последовательности битов PA3-PA0 (биты 7-4 шины) и PB3-PB0 (биты 3-0 шины). И вот мы выводим данные, задавая байт. Эффективный алгоритм примерно такой: вырезать 4 старших бита шины, сдвинуть их на 4 бита вправо и записать результат в 4 младших бита порта A; затем вырезать 4 младших бита и записать их в 4 младших бита порта B. А если бы, скажем, PB3-PB0 шли в обратной последовательности, то пришлось бы 4 раза вырезАть по биту и взводить их.
ну приведите пример исходника и скомпилированный дизассемблер этого супер-эффективного доступа к портам
но и с выходами расширителей портов (самый частый пример -- расширитель портов вывода на цепочке регистров 74HC595). При этом такие выходы можно включать в логические шины, во многих случаях вообще не думая о том, как именно реализован вывод.
приведите реальный пример. Например в разных местах программы устанавливаются/сбрасываются биты на этой "виртуальной" шине. Что происходит в этом случае ? Каждый раз обновляются все регистры ?
Реклама
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»