Integrisani racunarski sistemi Advanced v0tnt.etf.bg.ac.rs/~oe4irs/pdf/vezbe/advanced.pdf ·...

Preview:

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

Recommended