Upload
others
View
17
Download
2
Embed Size (px)
Citation preview
Integrisani racunarski sistemiAdvanced
v0.5
Odsek za elektroniku
Univerzitet u Beogradu - Elektrotehnicki fakultet
poslednja izmena 28. mart 2019
Odsek za elektroniku 13E044IRS ETF Beograd 1 / 24
Pregled
1 Kombinovanje C-a i asemblera
2 Coding style
3 Doxygen
4 Event-driven programming
5 HALPrimer – 7seg driver
Odsek za elektroniku 13E044IRS ETF Beograd 2 / 24
Pregled
1 Kombinovanje C-a i asemblera
2 Coding style
3 Doxygen
4 Event-driven programming
5 HALPrimer – 7seg driver
Odsek za elektroniku 13E044IRS ETF Beograd 3 / 24
C ili asembler?
Jezik C omogucava struktuirano programiranje. Kompajler sam vodiracuna o popunjavanju memorije i osnovnim inicijalizacijama. Kod jeportabilan i na druge mikrokontrolerske platforme
Asembler je efikasan po pitanju brzine izvrsavanja. Kod pisan uasembleru nije portabilan na druge platforme i mnogo je manje citljivod C koda
Odsek za elektroniku 13E044IRS ETF Beograd 4 / 24
Kako kombinovati dobre stranje C-a i asemblera
Glavni program treba pisati u C-u
Sve promenljive i konstante treba pisati u C-u
Delove koda koji odslikavaju sustinu algoritma (strukturu) treba pisatiu C-u
Vremenski kriticne funkcije i prekidne rutine treba pisati u asembleru
Odsek za elektroniku 13E044IRS ETF Beograd 5 / 24
C calling convention - nacin na koji C funkcije dobijaju ivracaju parametre
http://www.ti.com/lit/an/slaa140/slaa140.pdf
Parametri C funkcija se prenose preko registara R12-R15
Povratne vrednosti se prenose preko registara R12-R13
Unutar C funkcija registri R4-R11 se koriste za lokalne promenljive i Ckompajler ih automatski cuva na steku pri pozivu funkcije
Odsek za elektroniku 13E044IRS ETF Beograd 6 / 24
Primer
Primer funkcije f (w, x, y, z)
Odsek za elektroniku 13E044IRS ETF Beograd 7 / 24
Fajl function.h jepotreban da bi Ckompajler imao prototipfunkcije
Parametar se funkcijiprenosi preko nizeg bajtaregistra R12, jer je upitanju tip CHAR
Funkcija WriteLednapisana u asembleru.Direktiva .def jeneophodna da bi sefunkcija mogla pozvatiiz drugih delova koda
Odsek za elektroniku 13E044IRS ETF Beograd 8 / 24
Standardan poziv funkcijeiz asemblera
C prekidi pored standardnogkonteksta automatski cuvajui registre R4-R11 na steku.Asemblerske prekidne rutine kaosto su ove nekad nemaju potrebuza cuvanjem svih registara. Na tajnacin se dobija na brzini
Odsek za elektroniku 13E044IRS ETF Beograd 9 / 24
Pregled
1 Kombinovanje C-a i asemblera
2 Coding style
3 Doxygen
4 Event-driven programming
5 HALPrimer – 7seg driver
Odsek za elektroniku 13E044IRS ETF Beograd 10 / 24
Coding style
https://barrgroup.com/Embedded-Systems/Books/Embedded-C-Coding-Standard
https://www.kernel.org/doc/Documentation/process/coding-style.rst
Odsek za elektroniku 13E044IRS ETF Beograd 11 / 24
Pregled
1 Kombinovanje C-a i asemblera
2 Coding style
3 Doxygen
4 Event-driven programming
5 HALPrimer – 7seg driver
Odsek za elektroniku 13E044IRS ETF Beograd 12 / 24
Doxygen
Instalacijahttp://www.stack.nl/~dimitri/doxygen/download.html#srcbin
Konfiguracija za CCShttps://anb0s.github.io/eclox/
Dokumentacijahttp://www.stack.nl/~dimitri/doxygen/manual/index.html
Advancedhttp://mcuoneclipse.com/2012/06/25/5-best-eclipse-plugins-1-eclox-with-doxygen-graphviz-and-mscgen/
Odsek za elektroniku 13E044IRS ETF Beograd 13 / 24
Pregled
1 Kombinovanje C-a i asemblera
2 Coding style
3 Doxygen
4 Event-driven programming
5 HALPrimer – 7seg driver
Odsek za elektroniku 13E044IRS ETF Beograd 14 / 24
Finite State Machine
Funkcionalnost se implementira u vidu masina stanja
Dogadaji uticu na izvrsavanje programa
Razmatracemo dve varijante:SuperloopEvent queue
Odsek za elektroniku 13E044IRS ETF Beograd 15 / 24
Superloop
Kod je organizovan u vidu masina stanja koje su realizovane pomocuswitch-case naredbi
Jasno vidljiva funkcionalnost, citljivo
Nije pogodno za suvise komplikovane sisteme, posto treba biti izuzetnopazljiv prilikom implementacije, kao i ukoliko je potrebna razmenapodataka izmedu masina stanja
Odsek za elektroniku 13E044IRS ETF Beograd 16 / 24
Blocking primer
/* ... */
/* configure USCI, send start bit */
/* i2c isr will be sending group of bytes. After data is sent, tx_done flag is set */while (!tx_done);
/* check if STOP condition was successfully sent */while(UCB1CTL1 & UCTXSTP);
/* return appropriate value */if (success) {
return SUCCESS;} else {
return FAIL;}
/* ... */
Odsek za elektroniku 13E044IRS ETF Beograd 17 / 24
Superloop primer
/* i2c transmit machine state */typedef enum {I2C_INIT, I2C_WAIT_TX_DONE, I2C_WAIT_STOP, I2C_SUCCESS, I2C_FAIL} i2c_tx_state_t;i2c_tx_state_t i2c_state = I2C_INIT;/* ... */
switch (i2c_state){case I2C_INIT:
/* configure USCI, send start bit */i2c_state = I2C_WAIT_TX_DONE;break;
case I2C_WAIT_TX_DONE:/* i2c isr will be sending group of bytes. After data is sent, tx_done flag is set */if (tx_done == 1) {
i2c_state = I2C_WAIT_STOP;}break;
case I2C_WAIT_STOP:/* check if STOP condition was successfully sent */if (!(UCB1CTL1 & UCTXSTP)) {
if (success) {i2c_state = I2C_SUCCESS;
} else {i2c_state = I2C_FAIL;
}}break;
default:break;
}
Odsek za elektroniku 13E044IRS ETF Beograd 18 / 24
Event queue
Objasnjenjehttp://www.barrgroup.com/Embedded-Systems/How-To/State-Machines-Event-Driven-Systems
Poredenje sa Superloophttp://embeddedgurus.com/state-space/2012/05/superloop-vs-event-driven-framework/
Odsek za elektroniku 13E044IRS ETF Beograd 19 / 24
Pregled
1 Kombinovanje C-a i asemblera
2 Coding style
3 Doxygen
4 Event-driven programming
5 HALPrimer – 7seg driver
Odsek za elektroniku 13E044IRS ETF Beograd 20 / 24
Hardware Abstraction Layer
Razvoj kompleksnih softverskih stekova se radi u slojevima, da bi seomogucila jednostavnija podela posla, testiranje kao i laksi code reuse
Principi su isti za razlicite embedded sisteme, razlika je samo uhardveru
Apstrakcijom pristupa hardveru omogucava se da visi slojevi koda buduportabilni na druge arhitekture
Odsek za elektroniku 13E044IRS ETF Beograd 21 / 24
Drajveri
Drajveri nude interfejs za pristup hardverskoj komponenti
Autor aplikacije ne brine o tome KAKO hardver radi, vec samo STAhardver radi
Odredeni template za pisanje drajvera
Primeri:POSIX – open, close, read, write, ioctl. . .STM CUBE – init, deinit. . .
Odsek za elektroniku 13E044IRS ETF Beograd 22 / 24
Pregled
1 Kombinovanje C-a i asemblera
2 Coding style
3 Doxygen
4 Event-driven programming
5 HALPrimer – 7seg driver
Odsek za elektroniku 13E044IRS ETF Beograd 23 / 24
sevenseg-hal
Primer koji demonstrira HAL za koriscenje sedmosegmentnog displeja
Odsek za elektroniku 13E044IRS ETF Beograd 24 / 24