1 << (i++ % 2) -- для стробирования ламп надо подать 1 на PC4 или PC5, в заисимости от того что выводить -- десятки или единицы.
нужно подать 0, для того чтобы зажглась лампа единиц или десятков
1 << (i++ % 2) -- для стробирования ламп надо подать 1 на PC4 или PC5, в заисимости от того что выводить -- десятки или единицы.
Вообще-то, компилятор с включенной оптимизацией все наши потуги накрутить лишнего приведет к единственно короткому виду. Лишь бы логика наших мудреностей не противоречила его "здравому смыслу"juzik писал(а):Кажется я понял в чем затык.Код: Выделить всё
while(1)
...
PORTC = (m[i] & 0x0F) | 1 << (i++ % 2 + 4);
...
Это вывод каждого разряда за 1 проход. Что он делает:
m[i] -- берет значение разряда десятки\единицы
(m[i] & 0x0F) -- убираем лишние данные, не относящиеся к выводимому значению (можно опустить)
1 << (i++ % 2) -- для стробирования ламп надо подать 1 на PC4 или PC5, в заисимости от того что выводить -- десятки или единицы. Инструкция i++ % 2 убирает нужду добавлять оператор if
m[i] | 1 << (i++ % 2) -- битовая сумма операторов, что в конечном итоге даст нужно число на порте
Я особо не разбирался в схеме. Инвертируйте, если не так.FreshMan писал(а):нужно подать 0, для того чтобы зажглась лампа единиц или десятков
ut1wpr писал(а):Вообще-то, компилятор с включенной оптимизацией все наши потуги накрутить лишнего приведет к единственно короткому виду...
juzik писал(а):Простите, а к чему этот пост?..
Нет проблем.ut1wpr, вы тоже учитесь править цитаты.
Gudd-Head
FreshMan писал(а):мне нужно переменную n каждый раз уменьшать на 16
правильна ли сия команда ?
n--16;
AI_Disable выше вам ответил. И ответил правильно.FreshMan писал(а):мне нужно переменную n каждый раз уменьшать на 16
правильна ли сия команда ?
n--16;
Код: Выделить всё
n = n - 16;Код: Выделить всё
PORTD &=~((1<<1)|(1<<0));Код: Выделить всё
#define SET 0
#define LED 1
PORTD &=~((1<<LED)|(1<<SET));
uldemir писал(а):Если там пропущен оператор побитного ИЛИ, то можно. Конечный результат будет одинаков.
Скорее всего вносить коррективы можно будет в любом случае. Просто с применением дефайнов их можно вынести из тела программы и поместить в отдельном месте.vitalik_1984 писал(а):Что за проблема? Вы можете так написать, но это будет железно и уже ничего не сможете поменять
А так можно вносить небольшие коррективы в прошивку в процессе разработки.
Если применить операцию логического сложения между двумя сдвиговыми - никакой ошибки быть не должно. Если между сдвиговыми не ввести никакой операции - компилятор явно споткнется при разборе подобной строки.А вы пробовали это компилировать?
Как насчет ошибки неожиданная скобка?
Структура программы будет определяться самим программистов в зависимости от алгоритмики решений. А вот стиль написания у каждого свой. Есть попытки выработать некие общие рекомендации, но в любом случае каждый имеет право ваять, как ему вздумается. И он этим правом лихо пользуется, затрудняя чтение и понимание своих программ сторонним программистам.FreshMan писал(а):меня как новичка будоражит такой вопрос: как ПРАВИЛЬНО выстроить СТРУКТУРУ программы при ее написании ?
если говорить о GCC, то нижнее подчеркивание скорее говорит о том, что это вещь системная, т.е. ее изменение может затронуть некие глубинные вещи, кардинально поменяв все на свете. именно поэтому в своих программах крайне не рекомендуется начинать константы, функции, макросы и т.п. с нижнего подчеркивания, дабы не создавать ложное впечатление о системности.IfoR писал(а):перед макросами к этому ещё и ставят нижнее подчёркивание (ex: #define _BV(x) (1<<(x))).