Par AVR iekšiņām
Uri Šakeda AVR asemblera piecu lekciju bezmaksas kurss iekš Hackaday bija varen labs manai vēlmei pēc neliela AVR asemblera un mikrokontroliera iekšiņu pārskata, kas gan apskata pamatus, bet vienlaikus ir gana straujš.
Lai arī nosaukums ir “AVR: Architecture, Assembly & Reverse Engineering”, nav jāpievērš uzmanība reversās enženērijas pieminēšanai, tas ir tīri asemblera iepazīšanās kurss, kas izmanto visuresošo mazo arduino ar seno ATmega328 mikrokontrolieri kā piemēru. Ja arī tev gribētos uzzināt, kas slēpjas zem digitalWrite un kā bakstīt portus pa tiešo, tad šis ir tas. Itin ērti un pārdomāti ir tas, ka Uri ir superīga paša rakstīta simulācijas vide wokvi.com, lai nevajadzētu vilkt ārā savu arduino un tam spraust vadiņus. Amizanti bija redzēt, ka vienā lekcijā Uri piemin, ka kaut kas, piemēram, krāsiņas asemblera failiem, vēl viņa vidē nav ieviestas, tad nākamajā nodarbībā jau ar prieku rāda, kā viss jau darbojas. Super-omulīgi!
Mani kurss galvenokārt interesēja dēļ tā, ka mans mazā vienkāršā Arkanoīda projekts (kurš btw ir gatavs, un visi satiktie draugi jau ir bijuši spiesti viņu paspēlēt, tomēr pieklājīgai finišēšanai man gribētos uzņemt pieklājīgāku video un uzrakstīt īstu write-upu) darbojas uz moderna AVR128DB48 mikrokontroliera (ATmega328 ir tā vectētiņš) un vēlējos atspērienu iekrist tā datašītā: tas super-zemā līmeņa stuffs man šķiet mega-interesants.
Nav jau tā, ka asemblera izpratne ikdienā būtu super-svarīga, jo C++ ar visiem digitalWrite un bibliotēkām ir pilnīgi pietiekami, lai varētu uzrakstīt visu, ko vien vēlies, tāpēc mans galvenais iemesls ir “man tas riktīgi patīk!”. Saprast, kas notiek zem pārsega, man dod stabilu devu gandarījuma: par ko tieši pārvēršas augstā līmeņa kods un kāpēc tas darbojas, ahā!-momenti un labsajūta.
Trīs litri dopamīna, salīdzinot ATmega328 ar AVR128DB un izlasot, ka autori ir ieviesuši *SET/*CLR/*TGL portus (PORTA.OUTSET = _BV(5) iestatīs vienu izejas bitiņu, pārējos neaiztiekot, un tas ir izveidots dzelžu līmenī); sajūsmina nobrīnīties uzzināt, ka programmas flešatmiņas adreses pārklājas ar datu atmiņu un beidzot saprast, kāpēc arduino pasaulē nepieciešama PROGMEM norāde, bet pēc tam atklāt, ka AVR128DB daļu programmas fleša ir jau iemapojis atmiņas apgabalā, un nekādi PROGMEM vairs nav vajadzīgi.
Šīs mazās foršās lietas ik uz soļa, un tad nu, kaut arī avr-gcc kompilators pats ir ellīgi gudrs, bet nekas man netraucēja pašam uzrakstīt savu pirmo funkciju arkanoīdam AVR asemblerī, great success!
