Вы уверены? Ассемблерный листинг сравнивали?отсутствуют операторы if и else, что увеличивет скорость передачи.
PORTB.B0 = t.B7 как работает?
А ято я могу вообще макрос из 1 буквы придумать, будет ещё короче
Вы уверены? Ассемблерный листинг сравнивали?отсутствуют операторы if и else, что увеличивет скорость передачи.
В асемблере переходы безусловно будут, но речь немного о другом, в алгаритмах представленных выше эти операторы присутствуют а в моём случае их нет. Это упрощает код и уменьшает его размерыотсутствуют операторы if и else, что увеличивет скорость передачи.
Вы уверены? Ассемблерный листинг сравнивали?
Работает элементарно: PORTB.B0 это пин контроллера, работаем с ним как с обычным битом =1 или 0. Переменная t имеет размер 8 бит. При передача начинается со старшего бита, PORTB.B0 = t.B7. Дальше идёт операция сдвига, все биты сдвигаются в "большую" сторону: тот что был t.B6 теперь является t.B7.PORTB.B0 = t.B7 как работает?
Я буду только рад если кому нибудь удастся ещё упростить код, при условии что он останется работоспособнымА ято я могу вообще макрос из 1 буквы придумать, будет ещё короче
Похоже Вы вообще не понимаете архитектуру контроллера....alex_ писал(а):Работает элементарно: PORTB.B0 это пин контроллера, работаем с ним как с обычным битом =1 или 0. Переменная t имеет размер 8 бит. При передача начинается со старшего бита, PORTB.B0 = t.B7. Дальше идёт операция сдвига, все биты сдвигаются в "большую" сторону: тот что был t.B6 теперь является t.B7.PORTB.B0 = t.B7 как работает?
Короче, смысл в том чтобы на прямую присваивать знавения t в порт не производя сравнения:
PORTB.B0 = t.B7
PORTB.B0 = t.B6
...
PORTB.B0 = t.B0
Я не только понимаю, что эта запись обозначает, но так же знаю, как она работаетРаботает элементарно:
Fallk писал(а):Код: Выделить всё
BTFSC SPI_REG,7 GOTO $+3 BCF D_OUT GOTO $+2 BSF D_OUT ; BCF STATUS,0 ; Очистка бита CARRY RLF SPI_REG,1 ; Сдвиг числа влево
Код: Выделить всё
BTFSS SPI_REG,7
BCF D_OUT
BTFSC SPI_REG,7
BSF D_OUT ;
RLF SPI_REG,1 ; Сдвиг числа влевоНу вроде я не совсем дуб, иногда бывает и покуриваю мануалы, но и до профи мне далеко, тут не поспоришь.Похоже Вы вообще не понимаете архитектуру контроллера....
С этим я обсолютно согласенПоэтому на самом деле побитный вывод ВСЕГДА имеет операцию условного перехода.
Теперь я не могу сообразить в чём смысл спрашивать "как работает?" если ответ уже известен?Я не только понимаю, что эта запись обозначает, но так же знаю, как она работает
Хых, действительно. Заремил строки и огонек бегает так же весело по гирлянде. Это был код из реальной программы, и я его чуть чуть оптимизировалАlex писал(а):Сдвиг числа влево[/code]По выполнению будет немного шустрее. И бит переноса очищать незачем, всё равно сдвигов всего 8, и сдвинутые данные не дойдут до 7-ого бита
Ну как сказать, в Си я не новичёк, только раньше приходилось писать для ПК а сейчас для МК, есть сходства но и отличий много, точнее сказать проходиться заморачиваться с вещами которые меня даже не интересовали по ненадобности, например асемблер или оптимизация кода из-за того что у контроллера мало памяти(PIC12F629, ATTiny13). К примеру раньше что бы вывести информацию на экран(или фаил) достаточно было спихнуть её классу IOS, а дальше это его задача. Тут же всё иначе, приходиться мелочам уделять гораздо больше внимания.КРАМ писал(а):Если Вы пишите на Си как начинающий, то стоит воздержаться от поучительных комментариев....