Cecko produkovalo spatny kod i pro 8051, pokud se tomu nevenovala radna pozornost. Prave tam se clovek naucil spravne "sizovat" promenne, pouzivat register (jak je v clanku), pouzivat volatile na stavove registry a dusledne se NEspolehat na optimalizace :D
(a samozrejme nikdy nelinkovat se stdlib, protoze jen implementace printf je delsi, nez cely zbytek programu)
Na 8051 je docela fajn SDCC, s tím se dělalo pěkně. Samozřejmě si člověk musí zvyknout na takové věci jako že proměnné, co jsou sdílené mezi přerušeními a hlavní smyčkou, musí být taky volatile.
A taky že když si "rozežraně" z PCčka bude bez rozmyslu používat typy jako int (který má SDCC 16b) bez ohledu na skutečné velikosti proměnných, tak spláče nad výdělkem, protože pak násobení nezabere jednu instrukci a 4 cykly, ale 8 násobení a 11 sčítání a 44 cyklů (11x pomalejší operace) plus ještě asi nějaké šoupání dat mezi registry a pamětí.
Jinak třeba zrovna SDCC má pro 8051 6 paměťových oblastí, každá má své využití a specifika.
Kdysi jsem dělal demoboard s 8051 v "maximální" konfiguraci, programovalo se to přes USB bootloader. Akorát se to k ničemu reálně nepoužilo, protože jsem pak hned přešel na ARMy :D
https://github.com/MR-DOS/8052-schizoid_demo
sdcc bohuzel generuje velice neoptimalizovany kod pro 8051, zvlast pokud se pristupuje do externi pameti pres DPTR coz je pro dnes bezne cipy zalozene na 8051 nutnost, jeden priklad
https://hackaday.com/2019/02/17/how-to-program-a-really-cheap-microcontroller/#comment-5884490
rozumny peephole optimizer by z toho mel udelat
mov dptr,#_OPAMPMC
movx a,@dptr
orl a,#0x80
movx @dptr,a
no, to by bylo super kdyby na to nekdo kouknul kdo 8051 jeste pouziva. sdcc pro 8051 teoreticky funguje a asi i prakticky pro male veci pracujici s interni pameti, ale pro vetsi je to fakt slabota, podle bugreportu https://sourceforge.net/p/sdcc/discussion/1865/thread/9589cc8d57/ to vypada ze to bylo driv lepsi ale postupnyma zmenama to nejak odumrelo. ten muj pripad je reportovany i tady https://sourceforge.net/p/sdcc/discussion/1864/thread/0f148521/
jo no, prostě 8051 na céčko není stavěná, je to pořád dost specifická akumulátorová architektura se třemi adresovými registry (a každý se navíc používá jinak).
Ale to není úplně o 8bitovém CPU, protože třeba na AVR produkuje céčko dobrý kód (tedy IMHO, mě připadá, že někdy na něm už není co zlepšit).