ARV писал(а):мда... такого я от вас не ожидал
ну насчет задымится то я пошутил
так шо можна под переменную выделить байт и инкриментировать ее до БЕСКОНЕЧНОСТИ не опасаясь за "рассудок" МК ?
ARV писал(а):мда... такого я от вас не ожидал
нет, до бесконечности нельзя: ученые считают, что вселенная просуществует еще несколько миллиардов лет, после чего снова "схлопнется"...FreshMan писал(а):так шо можна под переменную выделить байт и инкриментировать ее до БЕСКОНЕЧНОСТИ ?
ARV писал(а):после чего снова "схлопнется"...
Код: Выделить всё
COM flag
SUB x,flag ;результат 0 1 1 2 2 3 3..., если flag инициализировать 0, и 0 0 1 1 2 2 3 3..., если флаг инициализировать числом 255
[далее проверка что x>=6]
ARV писал(а):мда... такого я от вас не ожидал
в принципе, если вас что-то смущает, можно поступить иначе:Код: Выделить всё
if((flag ^= 1) & 1) x++;
Код: Выделить всё
if(flag ^= 1) x++;так будет правильно только в том случае, если flag был проинициализирован значением 0 или 1. если вдруг там было, например, 2, то работать не будет. я обычно переменную с именем flag использую для хранения до 8 независимых флагов - в целях экономии ОЗУFreshMan писал(а):так тоже будет правильно ?Код: Выделить всё
if(flag ^= 1) x++;
Код: Выделить всё
if(++flag & _BV(3)) x++;Код: Выделить всё
#define SKIP_CNT 10
static uint8_t flag = SKIP_CNT;
if(!--flag){
flag = SКIP_CNT;
x++;
}ARV писал(а):я обычно переменную с именем flag использую для хранения до 8 независимых флагов - в целях экономии ОЗУ
Код: Выделить всё
unsigned char flag;Битовые поля Вам в помощь.FreshMan писал(а):допустим я обявил переменную flagкак каждому биту данной переменной назначить свое имя ?Код: Выделить всё
unsigned char flag;
как, в зависимости от событий в программе, сбрасывать или устанавливать эти флажки ?
Аlex писал(а):Нельзя назначить имя отдельному биту в переменной и работать с ним через это имя.
новое - хорошо забытое старое. прямая адресация битов была доступна еще в древнем MCS-51КРАМ писал(а):Аlex писал(а):Нельзя назначить имя отдельному биту в переменной и работать с ним через это имя.
Строго говоря, можно.
Если архитектура допускает прямую адресацию битов.
В ARM Cortex-M это возможно.
Аlex писал(а):Нельзя назначить имя отдельному биту в переменной и работать с ним через это имя.
а как же это сделали разработчики...
The bit level access to the I/O registers can be also accomplished by using bit selectors appended after the name of the I/O register.
Because bit level access to I/O registers is done using the CBI, SBI, SBIC and SBIS instructions, the register address must be in the 0 to 1Fh range for sfrb and in the 0 to 1Eh range for sfrw.
Note: Bit selector access to I/O registers located in internal RAM above address 5Fh (like PORTF for the ATmega128 for example) will not work, because the CBI, SBI, SBIC and SBIS instructions can't be used for RAM access.
Ну взяли и добавили в свой компилятор фишку, для доступа к отдельным битам регистров порта. Это всё "сладости" компиляторов, и к языку программирования не имеют никакого отношения.FreshMan писал(а):а как же это сделали разработчики "пресловутого" CodeVision ?
ведь в оной IDE допустима запись PORTB.5=1;
Аlex писал(а):Ну взяли и добавили в свой компилятор фишку, для доступа к отдельным битам регистров порта. Это всё "сладости" компиляторов, и к языку программирования не имеют никакого отношения.
ARV писал(а):прямая адресация битов была доступна еще в древнем MCS-51жаль, косвенной не было...
HHIMERA писал(а):Просто лысый решил поумничать... Не у всех Cortex есть bit banding... в М0 он отсутствует...
================
На мелких проектах и при нынешнем обилии ОЗУ... в битах вообще особого смысла нет...
КРАМ писал(а):Правда некоторые математические операции требуют побитовой обработки ОДНОГО слова, но это так... к слову...
И размер ОЗУ тут вообще ни к селу, ни к городу...
Если в кодах Хемминга требуется перестановка бит в ПОТОКЕ данных, то отсутствие адресации бит ЗАМЕДЛЯЕТ обработку...
Да и Бог с ним, с Хэммингом... Обработка графических полей для монохромных LCD превращается в громоздкий индусский код...
К вопросу об универсальности копеечных М0. При отсутствии битовых команд и битового расширения адресов любая битовая команда превращается в НАБОР команд. Тогда и заявленная производительность - фикция...