Да смысл такой - если подключена уно запретить прерывания перед выводом данных в ленту и соответственно нарушить работу ик приёмника ![]()
…хотя это уже может быть паранойя.
м-да…
Что мда? Опять есть гавно ?
Тут уж выбирайте, что нарушать, работу приёмника или ленты.
Кстати, Вы писали, что с моим кодом у Вас ничего не мерцает и не пропадает? Ну, так и пользуйтесь. Если в библиотеке надо что-то добавить, … ну, … можно обсудить.
Могу объяснить как именно я там разрешил прерывания, чтобы это не мешало ленте, но не знаю, надо ли.
Да, успешных вариантов накопилось, спасибо.
Нет, вывода цвета пикселя по номеру вполне достаточно для адаптации под мои поделки.
просто старческое брюзжание, не надо ничего подобного есть)
Два прерывания: на ик пульт и второе на вывод а ленту нельзя сделать? и пусть они одновременно работают
Одновременно не смогут. Одно другому будет вынуждено уступать ![]()
Да и лента принимать должна “осмысленную череду” 0101111 на частоте 800кГц.
Ещё кстати забавность определил в опытах. Используя один вариант функции для чтения ик приёмника и пульт получил разные коды с одних и тех же кнопок. К примеру на уно и rp2040 код кнопки получен 906E, а на ЕСП32 он уже 15906E или был 51AE, а стал 1451AE.
дружище,
“я не знаю, как сделать” != “не смогут”.
теорема Котельникова (она же Шеннона-Найквиста) утверждает, что смогут. Ты умнее, чем эти трое?
Если бы было так, то альтернатива уже проскочила где-нибудь для пикселей, учитывая, что я не умнее.
Спойлер
noInterrupts();
asm volatile (
"head20:" "\n\t" // Clk Pseudocode (T = 0)
"st %a[port], %[hi]" "\n\t" // 2 PORT = hi (T = 2)
"sbrc %[byte], 7" "\n\t" // 1-2 if(b & 128)
"mov %[next], %[hi]" "\n\t" // 0-1 next = hi (T = 4)
"dec %[bit]" "\n\t" // 1 bit-- (T = 5)
"st %a[port], %[next]" "\n\t" // 2 PORT = next (T = 7)
"mov %[next] , %[lo]" "\n\t" // 1 next = lo (T = 8)
"breq nextbyte20" "\n\t" // 1-2 if(bit == 0) (from dec above)
"rol %[byte]" "\n\t" // 1 b <<= 1 (T = 10)
"rjmp .+0" "\n\t" // 2 nop nop (T = 12)
"nop" "\n\t" // 1 nop (T = 13)
"st %a[port], %[lo]" "\n\t" // 2 PORT = lo (T = 15)
"nop" "\n\t" // 1 nop (T = 16)
"rjmp .+0" "\n\t" // 2 nop nop (T = 18)
"rjmp head20" "\n\t" // 2 -> head20 (next bit out)
"nextbyte20:" "\n\t" // (T = 10)
"ldi %[bit] , 8" "\n\t" // 1 bit = 8 (T = 11)
"ld %[byte] , %a[ptr]+" "\n\t" // 2 b = *ptr++ (T = 13)
"st %a[port], %[lo]" "\n\t" // 2 PORT = lo (T = 15)
"nop" "\n\t" // 1 nop (T = 16)
"sbiw %[count], 1" "\n\t" // 2 i-- (T = 18)
"brne head20" "\n" // 2 if(i != 0) -> (next byte)
: [port] "+e" (port),
[byte] "+r" (currentByte),
[bit] "+r" (currentBit),
[next] "+r" (next),
[count] "+w" (_dataSize)
: [ptr] "e" (ptrData),
[hi] "r" (hi),
[lo] "r" (lo)
);
interrupts();
ты казался умнее. велкоме ту игноре лист.
Людям свойственно ошибаться.
если ядро одно, то никакого “одновременно” на нем быть не может
два события в одной точке в принципе одновременно произойти не могут, теория относительности не позволяет.
Квантовая спутанность, как следствие воздействия торсионных полей. Невозможность одновременности причинно-следственных связей и как итог - теорема о неделимости делимого.
Нильс Бор?
если в прерываниях по 20 команд то это и будет практически одновременно. Можно, например, просто схватывать быстрые данные (от пульта) и потом в фоне спокойно их расшифровывать. Как все Нормальные Пацаны.
Нет. Они потому и названы прерываниями, что останавливают выполнение основного потока
ну и посчитайте времена
Зачем? Одновременное выполнение на одном ядре невозможно в принципе, даже на больших ПК. Возможно быстрое переключение между потоками, т.е. видимость одновременности ![]()