Как-то так:
// Блинк на 9-ом пине (Uno/Nano и т.п.)
%:define _ *(unsigned*)
void setup(void) {
_ 36 = _"Vb";
_ 128 = _"D-";
_ 136 = _"D+";
}
void loop(void) {}
Скетч родился случайно в процессе разговора с @BABOS , за что ему большое спасибо!
Kakmyc
08.Октябрь.2024 16:34:16
2
Это даже компилируется.
Будем посмотреть.
Kakmyc:
Это даже компилируется.
Это даже работает, как и всё, что я выкладываю. Киньте светодиод на 9-ый пин и убедитесь. Можно, кстати, в протеусе – без разницы.
kolyn
08.Октябрь.2024 17:03:29
4
Как ни странно, но и по вторникам работает .
А чего странного, если семь пятниц на неделе?
2 лайка
kolyn
08.Октябрь.2024 17:12:18
6
ЕвгенийП:
А чего странного
Для вас то ничего. Но для меня в этом коде понятны всего две строки - 3 и 8 ))
Kakmyc
08.Октябрь.2024 17:24:15
7
Ладно хоть без триграфов, про диграфы то я хоть что то слышал
Первая загадка разгадана
3 лайка
Kakmyc
08.Октябрь.2024 17:30:10
8
Осталось разгадать что есть сие:
#define _ *(unsigned*)
void setup(void) {
*(unsigned*) 36 =*(unsigned*)"Vb";
*(unsigned*) 128 = *(unsigned*)"D-";
*(unsigned*) 136 = *(unsigned*)"D+";
}
void loop(void) {}
Для этого придется в даташит лезть, адреса регистров похоже, осталось понять каких
kolyn:
Для вас то ничего.
Зная ЕП, можно предположить, что он первому таймеру в конфиг-регистры напихал напрямую через отображаемую область памяти…
1 лайк
xDriver
08.Октябрь.2024 17:31:09
10
Да а вторую там и гадать нечего, подставляйте
*(36) = оопкоды “Vb” и т.д.
Как это запускается, вот для меня загадка🙄
xDriver
08.Октябрь.2024 17:32:00
11
Точно, вот откуда 9 пин))
Kakmyc
08.Октябрь.2024 17:34:34
12
Это надо посмотреть, адресами каких регистров являются 36,128 и 136
Сдается мне что это будут DDRx, TCCRx и TIMSKx
Kakmyc:
хоть без триграфов
Я пробовал , но IDE “изкаропки” говорит, что триграфы отключены опцией, а менять опции – неспортивно, должно всё работать искаропки!
1 лайк
Kakmyc
08.Октябрь.2024 17:36:59
14
Так они запрещены “женевской конвенцией”
Только в С’23 а у нас более ранние версии.
Kakmyc
08.Октябрь.2024 17:49:36
16
Итак:
36(0х24)=DDRB
128(0x80)=TCCR1A
136(0x88)=OCR1AL
Осталось понять, что за хрень скрывается в кавычках.
Но это уже завтра, спать хочется сильней чем разбираться в этих ребусах
Такие: TCCR1A, TCCR1B, OCR1A
Хрень - это битовые последовательности. Причём, в TCCR1A пишется 16 бит, что покрывает и TCCR1B.
D- => 442D => 0100010000101101
Kakmyc
08.Октябрь.2024 17:50:49
18
sadman41:
OCR1A
Маэстро решил только с младшим байтом поиграться
Kakmyc
08.Октябрь.2024 17:54:31
19
А ты прям уверен, что он пишет сразу 16 бит туда ?
Я вот нет, по синтаксису не вижу.
uinsigned int - 16 бит, пишется в указатель, приведенный к uint16_t приведённая к нему же “D-” => 442D => 0100010000101101
1 лайк