Mikrokrmilnik in programiranje Programsko opremo mikrokrmilnikov razvijamo večinoma v programskem jeziku C. Včasih se pokaže potreba po programiranju tudi v zbirnem jeziku. Programiranje v zbirnem jeziku zahteva temeljito poznavanje arhitekture mikrokrmilnika. Tudi programiranje v programskem jeziku C za mikrkormilnike zahteva kar dobro poznavanje aritekture. To je pomembna značilnost razvoja programske opreme (tudi v C-ju) za mikrokrmilnike v primerjavi s programiranjem za računalniške sisteme za splošne namene, ki delujejo pod nadzorom operacijskega sistema in z izdatno sistemsko podporo.
Mikrokrmilnik in programiranje Programiranje v višjih programskih jezikih je bolj ekonomično kot v zbirnem jeziku. Današnji prevajalniki praviloma naredijo boljšo strojno kodo, kot bi jo mi sami (oz. povprečen programer). S tega stališča se pomen programiranja v zbirnem jeziku manjša (izginja?). Vendarle, tipičen programski projekt, čeprav v veliki večini v višjem programskem jeziku, običajno vključuje tudi vsaj nekaj zbirniških vrstic. Vendarle, programiranje v zbirnem jeziku neizprosno zahteva več znanja in s tega stališča posredno vpliva na bolj kakovosten razvoj programske opreme tudi v višjih programskih jezikih. Kakorkoli, sposobnost napisati nekaj zbirniških vrstic, spada v splošno izobrazbo elektroinžinirja.
Mikrokrmilnik in programiranje Tipičen programski projekt vsebuje: Pridružene datoteke Splošne definicije Definicije (npr. konfiguracijskih) konstant Definicije naslovov V/I registrov, prekinitvenih vektorjev, pomnilnika RAM, Flash, ... .... Začetni del (zagonski del) programa Priprava sklada Priprava prekinitvenih vektorjev Definicije globalnih spremenljivk
Mikrokrmilnik in programiranje Tipičen programski projekt vsebuje (nadaljevanje): Glavni (del) programa (datoteko) Poljubno število podprogramov (datotek) Nekatere podprograme v zbirnem jeziku (datoteke) Nekatere programe (datoteke) objektne narave Po potrebi programske knjižnice (datoteke) Konfiguracijske datoteke Najenostavnejši projekt bo vseboval eno datoteko s programskim besedilom (izvornim programom). Izvorni program je v programskem jeziku, ki ga uporablja programer, na primer zbirniški.
Mikrokrmilnik in programiranje Razvojni cikel: Pisanje programskega besedila (urejevalnik) Prevajanje, popravljanje sintaktičnih napak (prevajalnik) Povezovanje, popravljanje povezovalnih napak (povezovalnik) Nalaganje (v pomnilnik, ali simulator) (nalagalnik) Preizkušanje, razhroščevanje, popravljanje logičnih napak. (razhroščevalnik)
Mikrokrmilnik in zbirnik Zbirni jezik sestavljajo: Sintaktična pravila (določajo kako pisati) Začetek/konec, komentar, ... Mnemoniki ukazov (procesorja) Najdemo jih v programerskem priročniku Zbirniški ukazi (navodila za prevajanje) Začetni naslov programa, podatkov Definicije konstant, spremenljivk, ... Znaki s posebnim pomenom Na primer $, #, ....
Mikrokrmilnik in zbirnik Zbirni jezik je “vrstične” narave Vrstica vsebuje ukaz procesorja ali ukaz zbirnika Splošna oblika vrstice: Oznaka Mnemonik Operand ;Pojasnilo (Operator) Oznako zaključi dvopičje Pojasnilo začne s podpičjem Na primer: LDAA #$10 Zanka: DECA BNE Zanka ; komentar
Mikrokrmilnik in zbirnik Zbriniški program je lahko: Absoluten Relativen (tudi premakljiv). Absoluten program s programskim besedilom določi namestitev v pomnilniku. Premakljiv prepusti to nalogu povezovalniku. Nalagalnik preprosto naloži program v pomnilnik na predvidene naslove (prenese v pomnilnik).
HCS12 absolutni program Poznati moramo razporeditev v naslovnem področju: Kje je pomnilnik RAM Kje je pomnilnik EEPROM Kje je Flash Kje so registri V/ enot Kje so prekinitveni vektorji
HCS12 absolutni program – primer ; ; --- primer (izvornega) programskega besedila ; --- najprej splošne definicije konstant, itd. RAM EQU $1000 ;tu začenja pomnilnik RAM PROGRAM EQU $1400 SKLAD EQU RAM+$100 ;tu začenja sklad NPOD EQU 10 ;število podatkov ; --- nato “koda” ORG PROGRAM MAIN: LDX #RAM CLRA ZANKA: ADDA 0,X ;v zanki seštejemo NPOD podatkov INX CPX #RAM+NPOD BNE ZANKA BRA * ;neskončna zanka
HCS12 – primer, razčlenitev Polje oznake je povečini prazno. Oznake uporabljamo običajno pri: Skokih, vejitvah, zankah. Označevanju prvega naslova programa, subrutine, ki je hkrati (oz. s tem postane) njeno ime (“vstopna točka”). Označevanju “pomembnih” naslovov spremenljivk, npr. začetni naslov polja podatkov, sklada, vektorja, ... Oznaka je v bistvu simbolično zapisan naslov (ukaza, podatka), ki se v času prevajanja (povezovanja) nadomesti z dejansko vrednostjo, kot to zahteva programsko besedilo. Ukazi (mnemoniki, operacijske kode) se prevedejo v strojno obliko. Zbirniški ukazi se ne prevedejo v strojno obliko, ampak vplivajo na način prevajanja – izgled prevedenega programa. Primeri: EQU – priredi simbolu vrednost ORG – določi začetni naslov (programa, podatkov), v času prevajanja vpliva na naslovni števec zbirnika. DS.B, DS.W – definira spremenljivko (bajt, beseda). DC.B, DC.W – definira konstanto (bajt, beseda).
HCS12 Primer - razčlenitev Simbolična imena (na splošno) Prvo pravilo dobrega programiranja je: Uporabljaj čimveč simboličnih imen naslovov, vrednosti, konstant. (Skoraj) nikoli ne uporabljaj (izogibaj se uporabi) dejanskih (“trdo kodiranih”) vrednosti. Primer: NPOD EQU 10 ;potem pa povsod samo še NPOD ORG RAM ;bolje kot ORG $1000 Itd. Opomba: Nekatri zbirniški ukazi so t.i. Motorolini: Npr.: FCB, FDB, FCC DC Npr.: RMB DS Oboji so v veljavi, a je to vprašanje (dotičnega) zbirnika.
HCS12 – primer še enkrat ; ; --- najprej splošne definicije konstant, itd. RAM EQU $1000 PROGRAM EQU $1400 NPOD EQU 10 ;število podatkov ; --- pomnilnik za podatke ORG RAM DS.B NPOD ;rezerviran pom, nedef. vsebina ; ---- DC.B 1,2,3,4,5,6,7,8 ;def. tudi vsebina ; --- program ORG PROGRAM MAIN: LDX #RAM CLRA ZANKA: ADDA 0,X INX CPX #RAM+NPOD BNE ZANKA BRA *