Вот что "код почти без лишнего мусора" я бы, пожалуй, не согласился...Mildi wrote: 04 Jan 2025 16:41...пишешь на чистом С/С++ в Ардуино ИДЕ и получаешь код почти без лишнего мусора по быстродействию на уровне других компиляторов С/С++.

Довелось мне в этот раз посмотреть, какой код делает С/С++, как говорится, не было счастья, да несчастье помогло!

Никак у меня таймер не работал, как в даташите написано, и полез я в Интернет, посмотреть как люди делают...
А люди все модные! На С/С++ пишут, ну мануал по-русски как я понимают! Т.е. по идее делают то же самое...
И выяснилась неожиданная вещь: в Proteus 7.7 в модели ATMega встроен дизассемблер для отладки!
То есть, он код С/С++ позволяет дебужить без исходника...
Ну я и увидел, как С/С++ организует прерывание таймера:
Code: Select all
;-----(TIMER1 COMPA)Timer/Counter1 Compare Match A --- ***
M00C4:
PUSH R1 ;
PUSH R0 ;
IN R0,$3F ; SREG - Status Register, флаги
PUSH R0 ; сохранить
CLR R1
PUSH R18
PUSH R19
PUSH R20
PUSH R21
PUSH R22
PUSH R23
PUSH R24
PUSH R25
PUSH R26
PUSH R27
PUSH R30
PUSH R31
LDS R24,$0060
CPI R24,$0A
BRCS M00F2
STS $0060, R1
M00F2:
LDS R24,$0060
RCALL M005C ; $-009A
LDS R24,$0060
SUBI R24,$FF
STS $0060,R24
POP R31
POP R30
POP R27
POP R26
POP R25
POP R24
POP R23
POP R22
POP R21
POP R20
POP R19
POP R18
POP R0
OUT $3F,R0
POP R0
POP R1
RETI
