SlideShare a Scribd company logo
1 of 142
Download to read offline
Notas de Aula Programação Embarcada

           Rodrigo Maximiano Antunes de Almeida

Instituto de Engenharia de Sistemas e Tecnologia da Informação,

               Universidade Federal de Ita jubĂĄ,

                        Minas Gerais,

                            Brasil

                rodrigomax @ unifei.edu.br

                    2 de Dezembro de 2010
ConteĂşdo
1 Introdução                                                                                         1
  1.1   vingu—gem g F F F F F F F F F F F F F F F    F   F   F   F   F   F   F   F   F   F   F   F    P
  1.2   r—rdw—re utiliz—do F F F F F F F F F F F F   F   F   F   F   F   F   F   F   F   F   F   F    Q
  1.3   em˜iente de progr—m—ção F F F F F F F F      F   F   F   F   F   F   F   F   F   F   F   F    Q
               snst—l—ção F F F F F F F F F F F F    F   F   F   F   F   F   F   F   F   F   F   F    R
               gon(gur—ção do gr—v—dor sghP          F   F   F   F   F   F   F   F   F   F   F   F    U
               gri—ção de um novo projeto F F        F   F   F   F   F   F   F   F   F   F   F   F    W

2 Linguagem C para sistemas embarcados                                                               12
  2.1   sndent—ção e p—drão de es™rit— F F F F F F F         F   F   F   F   F   F   F   F   F   F   IP
  2.2   gomentĂĄrios F F F F F F F F F F F F F F F F F F      F   F   F   F   F   F   F   F   F   F   IR
  2.3   erquivos F™ e Fh F F F F F F F F F F F F F F F F     F   F   F   F   F   F   F   F   F   F   IS
  2.4   hiretiv—s de ™ompil—ção F F F F F F F F F F F        F   F   F   F   F   F   F   F   F   F   IS
               5in™lude F F F F F F F F F F F F F F F        F   F   F   F   F   F   F   F   F   F   IS
               5de(ne F F F F F F F F F F F F F F F F        F   F   F   F   F   F   F   F   F   F   IU
               5ifdefD 5ifndefD 5else e 5endif F F F         F   F   F   F   F   F   F   F   F   F   IV
  2.5   „ipos de d—dos em g F F F F F F F F F F F F F        F   F   F   F   F   F   F   F   F   F   PI
               ‚epresent—ção ˜inári— e hex—de™im—l           F   F   F   F   F   F   F   F   F   F   PP
               wodi(™—dores de t—m—nho e sin—l F F           F   F   F   F   F   F   F   F   F   F   PQ
               wodi(™—dores de —™esso F F F F F F F          F   F   F   F   F   F   F   F   F   F   PR
               wodi(™—dores de posi™ion—mento F F            F   F   F   F   F   F   F   F   F   F   PT
               wodi(™—dor de persistên™i— F F F F F          F   F   F   F   F   F   F   F   F   F   PT
  2.6   yper—ções —ritméti™—s F F F F F F F F F F F F        F   F   F   F   F   F   F   F   F   F   PU
  2.7   punção m—in@A F F F F F F F F F F F F F F F F        F   F   F   F   F   F   F   F   F   F   PW
  2.8   ‚otin—s de tempo F F F F F F F F F F F F F F F       F   F   F   F   F   F   F   F   F   F   QI
  2.9   yper—ções ™om ˜its F F F F F F F F F F F F F F       F   F   F   F   F   F   F   F   F   F   QQ
               xy„ F F F F F F F F F F F F F F F F F F       F   F   F   F   F   F   F   F   F   F   QR
               exh F F F F F F F F F F F F F F F F F F       F   F   F   F   F   F   F   F   F   F   QR
               y‚ F F F F F F F F F F F F F F F F F F F      F   F   F   F   F   F   F   F   F   F   QS
               ˆy‚ F F F F F F F F F F F F F F F F F F       F   F   F   F   F   F   F   F   F   F   QS
               ƒhift F F F F F F F F F F F F F F F F F F     F   F   F   F   F   F   F   F   F   F   QT
               vig—r um ˜it @˜it setA F F F F F F F F        F   F   F   F   F   F   F   F   F   F   QT
               heslig—r um ˜it @˜it ™le—rA F F F F F F       F   F   F   F   F   F   F   F   F   F   QU


                                       i
„ro™—r o v—lor de um ˜it @˜it )ipA F F F F                 F   F   F   F   F   F   F   QV
                †eri(™—r o est—do de um ˜it @˜it testA F F                 F   F   F   F   F   F   F   QW
                gri—ndo funções —tr—vés de de(nes F F F F                  F   F   F   F   F   F   F   RH
  2.10   he˜ug de sistem—s em˜—r™—dos F F F F F F F F F F                  F   F   F   F   F   F   F   RH
                ixtern—liz—r —s inform—çõesF F F F F F F F F               F   F   F   F   F   F   F   RQ
                €rogr—m—ção in™rement—l F F F F F F F F F                  F   F   F   F   F   F   F   RR
                ghe™—r possíveis pontos de wemoryEle—k F                   F   F   F   F   F   F   F   RR
                guid—do ™om — fr—gment—ção d— memóri—                      F   F   F   F   F   F   F   RR
                ytimiz—ção de ™ódigo F F F F F F F F F F F                 F   F   F   F   F   F   F   RR
                ‚eproduzir e isol—r o erro F F F F F F F F F               F   F   F   F   F   F   F   RS
  2.11   €onteiros e endereços de memóri— F F F F F F F F F                F   F   F   F   F   F   F   RS

3 Arquitetura de microcontroladores                                                                    48
  3.1    e™esso à memóri— F F F F F F F F F F F F F F F F F F F F F F                      F   F   F   RV
  3.2    glo™k e tempo de instrução F F F F F F F F F F F F F F F F                        F   F   F   SI
  3.3    isquem— elétri™o e ™ir™uitos import—ntes F F F F F F F F F                        F   F   F   SQ
                wultiplex—ção nos termin—is do mi™ro™ontrol—dor                            F   F   F   SR
  3.4    ‚egistros de ™on(gur—ção do mi™ro™ontrol—dor F F F F F F                          F   F   F   SR

4 Programação dos PerifÊricos                                                                          57
  4.1    e™esso às 4port—s4 do mi™ro™ontrol—dor        F   F   F   F   F   F   F   F   F   F   F   F    SV
  4.2    gon(gur—ção dos periféri™os F F F F F F F     F   F   F   F   F   F   F   F   F   F   F   F    SW
  4.3    f—rr—mento de ved's F F F F F F F F F F F     F   F   F   F   F   F   F   F   F   F   F   F    TQ
  4.4    hispl—y de U segmentos F F F F F F F F F F    F   F   F   F   F   F   F   F   F   F   F   F    TQ
                 wultiplex—ção de displ—ys F F F F     F   F   F   F   F   F   F   F   F   F   F   F    TT
                 gri—ção d— ˜i˜liote™— F F F F F F     F   F   F   F   F   F   F   F   F   F   F   F    TU
  4.5    veitur— de te™l—s F F F F F F F F F F F F F   F   F   F   F   F   F   F   F   F   F   F   F    UH
                he˜oun™e por softw—re F F F F F F      F   F   F   F   F   F   F   F   F   F   F   F    UP
                err—njo de leitur— por m—triz F F      F   F   F   F   F   F   F   F   F   F   F   F    UQ
                gri—ção d— ˜i˜liote™— F F F F F F F    F   F   F   F   F   F   F   F   F   F   F   F    UT
  4.6    hispl—y vgh PxIT F F F F F F F F F F F F      F   F   F   F   F   F   F   F   F   F   F   F    UT
                 gri—ção d— ˜i˜liote™— F F F F F F     F   F   F   F   F   F   F   F   F   F   F   F    VQ
  4.7    gomuni™—ção seri—l F F F F F F F F F F F F    F   F   F   F   F   F   F   F   F   F   F   F    VV
                ‚ƒ PQP F F F F F F F F F F F F F F F   F   F   F   F   F   F   F   F   F   F   F   F    VV
                gri—ção d— ˜i˜liote™— F F F F F F F    F   F   F   F   F   F   F   F   F   F   F   F    WP
  4.8    gonversor eh F F F F F F F F F F F F F F F    F   F   F   F   F   F   F   F   F   F   F   F    WS
                ilementos sensores F F F F F F F F     F   F   F   F   F   F   F   F   F   F   F   F    WS
                €ro™esso de ™onversão eh F F F F       F   F   F   F   F   F   F   F   F   F   F   F    WU
                gri—ção d— ˜i˜liote™— F F F F F F F    F   F   F   F   F   F   F   F   F   F   F   F   IHH
  4.9    ƒ—íd—s €‡w F F F F F F F F F F F F F F F      F   F   F   F   F   F   F   F   F   F   F   F   IHQ
                gri—ção d— ˜i˜liote™— F F F F F F F    F   F   F   F   F   F   F   F   F   F   F   F   IHR
  4.10   „imer F F F F F F F F F F F F F F F F F F F   F   F   F   F   F   F   F   F   F   F   F   F   IHU
  4.11   ‚eprodução de ƒons F F F F F F F F F F F      F   F   F   F   F   F   F   F   F   F   F   F   IIH
  4.12   snterrupção F F F F F F F F F F F F F F F F   F   F   F   F   F   F   F   F   F   F   F   F   IIP


                                       ii
4.13   ‡—t™hdog F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IIU

5 Arquitetura de desenvolvimento de software                                             119
  5.1    yne single loop F F F F F F F F F F F F F F F F F F F F F   F   F   F   F   F   IIW
  5.2    snterrupt ™ontrol system F F F F F F F F F F F F F F F F    F   F   F   F   F   IPI
  5.3    gooper—tive multit—sking F F F F F F F F F F F F F F F      F   F   F   F   F   IPQ
                 pix—ção de tempo p—r— exe™ução dos slots F F        F   F   F   F   F   IPS
                …tiliz—ção do 4tempo livre4 p—r— interrupções        F   F   F   F   F   IPV

6 Anexos                                                                                 129
  6.1    ™on(gFh F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IPW
  6.2    ˜—si™oFh F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IQH
  6.3    snst—l—r gr—v—doresGdepur—dores de €sg em sistem—s xTR F F F IQP




                                       iii
Lista de Figuras
 IFI   g—m—d—s de —˜str—ção de um sistem— oper—™ion—l F F F F F F F            I
 IFP   €esquis— so˜re lingu—gens utiliz—d—s p—r— projetos de softw—re
       em˜—r™—do F F F F F F F F F F F F F F F F F F F F F F F F F F F F F      P
 IFQ   gon(gur—ção d—s ferr—ment—s de ™ompil—ção F F F F F F F F F F            T
 IFR   snst—l—ção do sghP F F F F F F F F F F F F F F F F F F F F F F F F       U
 IFS   ‚esumo d—s ™on(gur—ções do sghP no w€vef F F F F F F F F                 V
 IFT   €roje™t ixplorer do w€vef F F F F F F F F F F F F F F F F F F            W
 IFU   gomp—r—tivo de ™—r—™terísti™—s d— f—míli— €sg IVfxxSx F F F F           II

 PFI   €ro˜lem— d—s ‚eferên™i—s gir™ul—res F F F F F F F F F F F F     F   F   PH
 PFP   ƒolução d—s referên™i—s ™ir™ul—res ™om 5ifndef F F F F F F F    F   F   PI
 PFQ   voop in(nito de um devi™e driver ger—ndo erro no sistem—        F   F   PW
 PFR   ixemplo de fun™ion—mento do vetor de interrupção F F F F        F   F   QH

 QFI   erquitetur— do mi™ro™ontrol—dor €sg IVpRSSH F F F F F F F           F   RW
 QFP   wemóri— ™omo um —rmário F F F F F F F F F F F F F F F F F F         F   SH
 QFQ   wemóri— e periféri™os ™omo um —rmário F F F F F F F F F F F         F   SH
 QFR   ‚egiões de memóri—s disponíveis no €sgIVpRSSH F F F F F F           F   SI
 QFS   isquem— elétri™oX wi™ro™ontrol—dor €sg IVpRSSH F F F F F F          F   SQ
 QFT   ‚egistros de ™on(gur—ção do mi™ro™ontrol—dor €sg IVpRSSH            F   SS

 RFI  ‚egistros de ™on(gur—ção dos periféri™os do €sg IVpRSSH F F              TH
 RFP  f—rr—mento de ved's F F F F F F F F F F F F F F F F F F F F F F F        TQ
 RFQ  hispl—y de U ƒegmentos F F F F F F F F F F F F F F F F F F F F F         TR
 RFR  hi—gr—m— elétri™o p—r— displ—y de U segmentos ™om —nodo
      ™omum F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F      TR
 RFS vig—ção de R displ—ys de U segmentos multiplex—dos F F F F F F            TT
 RFT gir™uito de leitur— de ™h—ve F F F F F F F F F F F F F F F F F F F        UH
 RFU ys™il—ção do sin—l no momento do ™h—ve—mento F F F F F F F F              UI
 RFV gir™uito de de˜oun™e F F F F F F F F F F F F F F F F F F F F F F F        UI
 RFW …tiliz—ção de (ltro ‚g p—r— de˜oun™e do sin—l F F F F F F F F F           UP
 RFIH „e™l—do em —rr—njo m—tri™i—l F F F F F F F F F F F F F F F F F F         US
 RFII hispl—y elf—numéri™o vgh PxIT F F F F F F F F F F F F F F F F            UT
 RFIP hispl—y elf—numéri™o vgh PxIT E verso F F F F F F F F F F F F            UW


                                     iv
RFIQ   g—r—™teres disponíveis p—r— ‚yw eHH F F F         F   F   F   F   F   F   F   F   F   F VI
RFIR   g—r—™teres disponíveis p—r— ‚yw eHP F F F         F   F   F   F   F   F   F   F   F   F VP
RFIS   isquemáti™o de lig—ção do displ—y de vgh F        F   F   F   F   F   F   F   F   F   F VR
RFIT   ƒin—l seri—liz—do p—r— tr—nsmissão em ‚ƒPQP       F   F   F   F   F   F   F   F   F   F VW
RFIU   vâmp—d— in™—ndes™ente F F F F F F F F F F F       F   F   F   F   F   F   F   F   F   F WS
RFIV   €oten™iômetro F F F F F F F F F F F F F F F F F   F   F   F   F   F   F   F   F   F   F WT
RFIW   €oten™iômetro ™omo divisor de tensão F F F        F   F   F   F   F   F   F   F   F   F WT
RFPH   gir™uito integr—do vwQS F F F F F F F F F F F     F   F   F   F   F   F   F   F   F   F WU
RFPI   hi—gr—m— de ˜lo™os do vwQS F F F F F F F F        F   F   F   F   F   F   F   F   F   F WV
RFPP   gonversor —n—lógi™o digit—l de P ˜its F F F F     F   F   F   F   F   F   F   F   F   F WW
RFPQ   ƒin—is €‡w ™om v—ri—ção do duty ™y™le F F         F   F   F   F   F   F   F   F   F   F IHQ

SFI    ixemplo de máquin— de est—dos F F F F F F F F F F F F                 F   F   F   F   F   IPQ
SFP    ixemplo d— mud—nç— de slots no tempo F F F F F F F                    F   F   F   F   F   IPS
SFQ    vinh— de tempo de um sistem— ™om I slot F F F F F F                   F   F   F   F   F   IPV
SFR    gomport—mento d— linh— de tempo ™om interrupções                      F   F   F   F   F   IPV




                                    v
Lista de Tabelas
 IFI   ƒoftw—res utiliz—dos no ™urso F F F F F F F F F F F F F F F F F F                   R

 PFI   „ipos de d—dos e f—ix— de v—lores F F F F F F F F   F   F   F   F   F   F   F   F   PP
 PFP   ‚epresent—ção de™im—l E ˜inári— E hex—de™im—l F     F   F   F   F   F   F   F   F   PQ
 PFQ   elter—ção de t—m—nho e sin—l dos tipos ˜ási™os      F   F   F   F   F   F   F   F   PR
 PFR   yper—ção ˜it set ™om de(ne F F F F F F F F F F F    F   F   F   F   F   F   F   F   RI
 PFS   yper—ção ˜it ™le—r ™om de(ne F F F F F F F F F F    F   F   F   F   F   F   F   F   RI
 PFT   yper—ção ˜it )ip ™om de(ne F F F F F F F F F F F    F   F   F   F   F   F   F   F   RP
 PFU   yper—ção ˜it test ™om de(ne F F F F F F F F F F     F   F   F   F   F   F   F   F   RP

 QFI   u—ntid—de de oper—ções e t—ref—s F F F F F F F F F F F F F F F                     SP

 RFI   indereços de memóri— p—r— —s port—s do €sg IVpRSSH F F F F SV
 RFP   „—˜el— de ™on(gur—ção do €sg p—r— —s experiên™i—s F F F F F F TI
 RFQ   gonversão ˜inário E hex—de™im—l p—r— displ—ys de U segmentos TS
 RFR   vist— de ™om—ndos —™eitos pelo o vgh F F F F F F F F F F F F F VQ
 RFS   „—x—s de tr—nsmissão p—r— diferentes proto™olos F F F F F F F F VV
 RFT   gál™ulo do v—lor d— t—x— de tr—nsmissão d— port— seri—l F F F F WH
 RFU   p—ix— de frequên™i—s máxim—s e mínim—s p—r— ™—d— ™on(guE
       r—ção do pres™—ler F F F F F F F F F F F F F F F F F F F F F F F F F IHR




                                     vi
Listings
 PFI    ‚esumo do dispUsegF™ F F F F F F F F F F F F F F F F F F F         F   F   F    IT
 PFP    ‚esumo do dispUsegFh F F F F F F F F F F F F F F F F F F F         F   F   F    IT
 PFQ    istrutur— de he—der F F F F F F F F F F F F F F F F F F F F        F   F   F    IW
 PFR    yper—ções —ritméti™—s ™om tipos diferentes F F F F F F F F         F   F   F    PU
 RFI    dispUsegF™ F F F F F F F F F F F F F F F F F F F F F F F F F F     F   F   F    TV
 RFP    dispUsegFh F F F F F F F F F F F F F F F F F F F F F F F F F F     F   F   F    TW
 RFQ    …tiliz—ndo — ˜i˜liote™— dispUseg F F F F F F F F F F F F F F       F   F   F    TW
 RFR    te™l—doF™ F F F F F F F F F F F F F F F F F F F F F F F F F F F    F   F   F    UU
 RFS    te™l—doFh F F F F F F F F F F F F F F F F F F F F F F F F F F F    F   F   F    UV
 RFT    ixemplo de uso d— ˜i˜liote™— te™l—do F F F F F F F F F F F         F   F   F    UV
 RFU    l™dF™ F F F F F F F F F F F F F F F F F F F F F F F F F F F F F    F   F   F    VT
 RFV    l™dFh F F F F F F F F F F F F F F F F F F F F F F F F F F F F F    F   F   F    VU
 RFW    ixemplo de uso d— ˜i˜liote™— de vgh F F F F F F F F F F            F   F   F    VU
 RFIH   seri—lF™ F F F F F F F F F F F F F F F F F F F F F F F F F F F F   F   F   F    WQ
 RFII   seri—lFh F F F F F F F F F F F F F F F F F F F F F F F F F F F F   F   F   F    WQ
 RFIP   ixemplo de uso d— ˜i˜liote™— de ™omuni™—ção seri—l F F F           F   F   F    WR
 RFIQ   —d™F™ F F F F F F F F F F F F F F F F F F F F F F F F F F F F F    F   F   F   IHI
 RFIR   —d™Fh F F F F F F F F F F F F F F F F F F F F F F F F F F F F F    F   F   F   IHI
 RFIS   ixemplo de uso d— ˜i˜liote™— de ™onversores eh F F F F             F   F   F   IHP
 RFIT   pwmF™ F F F F F F F F F F F F F F F F F F F F F F F F F F F F      F   F   F   IHS
 RFIU   pwmFh F F F F F F F F F F F F F F F F F F F F F F F F F F F F      F   F   F   IHT
 RFIV   ixemplo de uso d— ˜i˜liote™— d—s s—íd—s €‡w F F F F F              F   F   F   IHT
 RFIW   timerF™ F F F F F F F F F F F F F F F F F F F F F F F F F F F F    F   F   F   IHV
 RFPH   timerFh F F F F F F F F F F F F F F F F F F F F F F F F F F F F    F   F   F   IHV
 RFPI   ixemplo de uso d— ˜i˜liote™— de um temporiz—dor F F F              F   F   F   IHW
 RFPP   ‚eprodução de sons F F F F F F F F F F F F F F F F F F F F         F   F   F   III
 RFPQ   pontes de snterupção F F F F F F F F F F F F F F F F F F F F       F   F   F   IIR
 RFPR   „r—t—mento d—s interrupções F F F F F F F F F F F F F F F F        F   F   F   IIS
 RFPS   sni™i—liz—ção do sistem— ™om interrupções F F F F F F F F          F   F   F   IIT
 RFPT   sni™i—liz—ção do sistem— ™om interrupções F F F F F F F F          F   F   F   IIU
 SFI    ixemplo de —rquitetur— singleEloop F F F F F F F F F F F F         F   F   F   IPH
 SFP    €ro˜lem— n— sin™roni— de tempo p—r— o singleEloop F F F            F   F   F   IPH
 SFQ    ixemplo de sistem— snterruptEdriven F F F F F F F F F F F          F   F   F   IPI
 SFR    ixemplo de sistem— snterruptEdriven ™om ˜—se de tempo              F   F   F   IPP

                                       vii
SFS   ixemplo    de ™ooper—tive multit—sking F F F F F F F F F F F F F F       IPR
SFT   ixemplo    de ™ooper—tive multit—sking ™om uso do top slot F F           IPT
SFU   ixemplo    de sistem— gooper—tiveEmultit—sking ™om slot temE
      poriz—do   F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F   IPU
TFI   ™on(gFh    F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F   IPW
TFP   ˜—si™oFh   F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F   IQI




                                     viii
CapĂ­tulo 1

Introdução
              The real danger is not that computers will begin to think
              like men, but that men will begin to think like computers.   E
              ƒydney tF r—rris

€rogr—m—ção p—r— sistem—s em˜—r™—dos exige um— série de ™uid—dos espeE
™i—isD pois estes sistem—s ger—lmente possuem restrições de memóri— e proE
™ess—mentoF €or se tr—t—r de sistem—s ™om funções espe™í(™—sD —s rotin—s e
té™ni™—s de progr—m—ção diferem d—quel—s us—d—s p—r— projetos de —pli™—tiE
vos p—r— desktopsF
    „—m˜ém é ne™essário ™onhe™er m—is — fundo o h—rdw—re que será utiE
liz—doD pois ™—d— mi™ropro™ess—dor possui um— —rquitetur— diferenteD ™om
qu—ntid—de e tipos de instruções diversosF €rogr—m—dores volt—dos p—r—
desktops não pre™is—m se —ter t—nto — estes itensD pois eles progr—m—m p—r—
um sistem— oper—™ion—l que re—liz— o p—pel de tr—dutorD disponi˜iliz—ndo
um— interf—™e ™omumD independente do h—rdw—re utiliz—do@pigur— IFIAF


                                 Aplicação

                         Sistema Operacional

                                 Firmware

                                 Hardware


      pigur— IFIX g—m—d—s de —˜str—ção de um sistem— oper—™ion—l


   €—r— sistem—s em˜—r™—dosD é ne™essário progr—m—r espe™i(™—mente p—r—

                                     I
2                                   Introdução


o h—rdw—re em questãoF …m— opção p—r— se o˜ter —rti(™i—lmente est— ™—E
m—d— de —˜str—ção que er— ger—d— pelo sistem— oper—™ion—l é — utiliz—ção
de dois itensX um ™ompil—dor próprio p—r— o ™omponente em questão e um—
˜i˜liote™— de funçõesF y ™ompil—dor será o responsável por tr—duzir — linE
gu—gem de —lto nível em um— lingu—gem que o mi™ro™ontrol—dor ™onsegue
entenderF e ˜i˜liote™— de funçõesD ou fr—meworkD em ger—lD é disponi˜iliz—d—
pelos f—˜ri™—ntes do mi™ro™ontrol—dorF


1.1    Linguagem C
               C is quirky, awed, and an enormous success.             E hennis wF
               ‚it™hie
xeste ™urso será utiliz—d— — lingu—gem gF ist— é um— lingu—gem ™om divers—s
™—r—™terísti™—s que — torn—m um— ˜o— es™olh— p—r— o desenvolvimento de
softw—re em˜—r™—doF epes—r de ser um— lingu—gem de —lto nívelD permite —o
progr—m—dor um —™esso direto —os dispositivos de h—rdw—reF
    „—m˜ém é — es™olh— d— m—iori— dos progr—m—dores e gerentes de projetos
no que ™on™erne —o desenvolvimento de sistem—s em˜—r™—dos ™omo pode ser
visto n— pigur— IFPF




pigur— IFPX €esquis— so˜re lingu—gens utiliz—d—s p—r— projetos de softw—re
em˜—r™—do
           Fonte: http://www.embedded.com/design/218600142



    e des™ontinuid—de depois de PHHR se dá devido à mud—nç— de metodologi—
d— pesquis—F entes de PHHSD — pergunt— formul—d— er—X €—r— o desenvolE
vimento d— su— —pli™—ção em˜—r™—d—D qu—is d—s lingu—gens vo™ê usou nos
últimos IP mesescF im PHHS — pergunt— se tornouX weu projeto em˜—rE
™—do —tu—l é progr—m—do prin™ip—lmente em ••••••F wúltipl—s seleções
er—m possíveis —ntes de PHHSD permitindo — som— superior — IHH7D sendo o
v—lor médio de PHW7D o que impli™— que — m—iori— d—s pesso—s es™olheu du—s
ou m—is opçõesF

            Notas de Aula ELT024 - Programação para Sistemas Embarcados
3                                    Introdução


    y m—ior imp—™to n— pesquis— pode ser visu—liz—do n— lingu—gem —ssemE
˜lerX —té PHHRD est—v— presente em TP7 d—s respost—s @n— médi—AF y que
™omprov— que pr—ti™—mente todo projeto de sistem— em˜—r™—do exige um
pou™o de —ssem˜lerF ho mesmo modoD per™e˜emos que —tu—lmente pou™os
projetos são re—liz—dos tot—lmente ou em su— m—iori— em —ssem˜lerD um—
médi— de —pen—s U7F


1.2      Hardware utilizado
                 People who are really serious about software should make
                 their own hardware.    E el—n u—y

gomo o enfoque deste ™urso é — progr—m—ção de sistem—s em˜—r™—dos e não
— eletrôni™—D utiliz—remos um kit de desenvolvimento prontoD ˜—se—do num
mi™ro™ontrol—dor €sgF
    gomo periféri™os disponíveis temosX

    ˆ   I displ—y vgh P linh—s por IT ™—r—™teres @™omp—tível ™om rhUURVHA

    ˆ   R displ—ys de U segmentos ™om ˜—rr—mento de d—dos ™omp—rtilh—dos

    ˆ   V leds lig—dos —o mesmo ˜—rr—mento dos displ—ys

    ˆ   IT mini swit™hes org—niz—d—s em form—to m—tri™i—l RxR

    ˆ   I sensor de temper—tur— vwQSg

    ˆ   I resistên™i— de —que™imento lig—d— — um— s—íd— €‡w

    ˆ   I motor hg tipo lig—do ventil—dor — um— s—íd— €‡w

    ˆ   I ˜uzzer lig—do — um— s—íd— €‡w

    ˆ   I ™—n—l de ™omuni™—ção seri—l p—drão ‚ƒEPQP

g—d— ™omponente terá seu fun™ion—mento ˜ási™o expli™—do p—r— permitir o
desenvolvimento de rotin—s p—r— estesF


1.3      Ambiente de programação
                 First, solve the problem. Then, write the code.     E tohn tohnE
                 son
y —m˜iente utiliz—do será o w€vef@‚AF iste é um —m˜iente de desenvolE
vimento disponi˜iliz—do pel— wi™ro™hip@‚A gr—tuit—menteF y ™ompil—dor
utiliz—do será o ƒhggD os linkers e —ssem˜lers serão disponi˜iliz—dos pel—
˜i˜liote™— q€…tilsF


             Notas de Aula ELT024 - Programação para Sistemas Embarcados
4                                  Introdução


    gomo o fo™o é — —prendiz—gem de ™on™eitos so˜re progr—m—ção em˜—rE
™—d— poderá ser utiliz—d— qu—lquer pl—t—form— de progr—m—ção e qu—lquer
™ompil—dorGlinkerF g—so sej— utiliz—do qu—lquer ™onjunto de ™ompil—dorGlinE
ker diferentes deveEse prest—r —tenção —pen—s n—s diretiv—s p—r— gr—v—çãoF
    €—r— — progr—m—ção em —m˜iente vinux re™omend—Ese o uso d— suíte
€suvef ISFIHF iste progr—m— foi desenvolvido p—r— uhi QFSF elém de
permitir — integr—ção ™om o mesmo ™ompil—dor utiliz—do neste ™urso permite
— progr—m—ção do mi™ro™ontrol—dor utiliz—ndo o progr—m—dor sghP vi— …ƒfF

    Instalação
e „—˜el— IFI —present— os softw—res que serão utiliz—dos no ™ursoF


                 „—˜el— IFIX ƒoftw—res utiliz—dos no ™urso
                     Item                     Versão          Licença

        shi                   w€vef             VFSH        €roprietário
        gompil—dor             ƒhgg       PFWFHH @winQPA        q€v
        vinkerGessem˜ler      q€…tils     HFIQFU @winQPA        q€v
        €lugin w€vef        sd™™Empl—˜           HFI            q€v


    „odos os softw—res são gr—tuitos e estão disponíveis n— internetF €—r— ™orE
ret— inst—l—ção deveEse inst—l—r os softw—res segundo — sequên™i— —present—d—
n— „—˜el— IFIF enote o diretório onde ™—d— softw—re foi inst—l—doF
    epós — inst—l—ção dos softw—res deveEse —˜rir o —rquivo pi™ITdevi™esFtxt
@de preferên™i— no wordp—dA que foi inst—l—do no diretório do ƒhgg dentro d—
p—st— in™lude’pi™IT @por p—drão gX’erquivos de progr—m—s’ƒhgg’in™lude’pi™ITAF
€ro™ure — seguintes linh—sX

name 18f4550
using 18f2455

   „ro™—r — letr— f minús™ul— d— primeir— linh—D —pen—s do IVfRSSHD p—r—
um p m—iús™uloX

name 18F4550
using 18f2455

    epós isto —˜rir — p—st— onde foi inst—l—do o w€vef @por p—drãoX gX’erquivos
de progr—m—s’wi™ro™hip’w€vef shiAF e˜rir — p—st— gore’w„g ƒuitesF
e˜rir os —rquivos sd™™linkFmt™ e gplinkFmt™ num editor de textoF ep—E
g—r o ™onteúdo do —rquivo sd™™linkFmt™F gopi—r todo ™onteúdo do —rquivo
gplinkFmt™ p—r— o —rquivo sd™™linkFmt™F ƒ—lv—rF

           Notas de Aula ELT024 - Programação para Sistemas Embarcados
5                                  Introdução


    epós o p—sso —™im— o —rquivo sd™™linkFmt™ deverá ™onter o seguinte
textoX



// Microchip Language Tools
// Configuration File
// gplink
// Craig Franklin                         [5]
[Tool]                                    Description=Library directories
Tool=gplink                               Switch=-I
ScriptExtension=lkr                       Data=1
DefaultOptions=                           MultipleOptions=0
MultipleNodes=1                           LibrarySwitch=Switch
SpaceBetweenSwitchAndData=1               Hidden=1
[0]                                       [6]
Description=Output filename               Description=Linker script directories
Switch=-o                                 Switch=-I
Data=1                                    Data=1
MultipleOptions=0                         MultipleOptions=0
OutputNameSwitch=Switch                   LinkerScriptSwitch=Switch
Hidden=1                                  Hidden=1
[1]                                       [7]
Description=Map file                      Description=Use Shared Memory
Switch=-m                                 Switch=-r
Data=0                                    Data=0
MultipleOptions=0                         [8]
[2]                                       Description=Fill Value
Description=COFF File                     Switch=-f
Switch=-c                                 MultipleOptions=0
Data=0                                    Data=1
MultipleOptions=0                         [9]
[3]                                       Description=Stack Size
Description=Hex Format                    Switch=-t
OptionList=INHX8M;INHX8S;INHX32           MultipleOptions=0
INHX8M=-a INHX8M                          Data=1
INHX8S=-a INHX8S                          [10]
INHX32=-a INHX32                          Description=No List File
Data=0                                    switch=-l
[4]                                       Data=0
Description=Quiet mode
Switch=-q
Data=0



im seguid— —˜rir o progr—m— w€vef e ir —o menu €roje™ts Eb ƒet v—nE
gu—ge „ool vo™—tionsF ƒerá —present—d— um— tel— simil—r — d— pigur— IFQF
   ƒele™ione — ferr—ment— ƒm—ll hevi™e g gompiler for €sgIT @ƒhggITAF
ixp—nd— — opção ixe™ut—˜lesF e ferr—ment— gp—sm e gplink são o˜tiE
d—s no diretório ˜in dentro de onde foi inst—l—do o q€…tils @por p—drãoX
gX’erquivos de progr—m—s’gputils’˜inAF e ferr—ment— sd™™IT é en™ontr—d—


           Notas de Aula ELT024 - Programação para Sistemas Embarcados
6                             Introdução




    pigur— IFQX gon(gur—ção d—s ferr—ment—s de ™ompil—ção




      Notas de Aula ELT024 - Programação para Sistemas Embarcados
7                                   Introdução


no diretório ˜in dentro do diretório onde foi inst—l—do o ƒhgg @por p—E
drãoX gX’erquivos de progr—m—s’ƒhgg’˜in’AF gli™—r em yuF epós
estes p—ssos — suíte w€vef está pront— p—r— tr—˜—lh—r ™om o ™ompil—dor
ƒhggCq€…tilsF

    Conguração do gravador ICD2
epós inst—l—r o w€vef já é possível f—zer — inst—l—ção e ™on(gur—ção do
gr—v—dor ou depur—dor sghPF gone™teEo — qu—lquer port— …ƒf e —gu—rde
— tel— de inst—l—ção do ‡indowsF im —lgum—s versões do windows pode
—™onte™er de vo™ê ser pergunt—do se desej— inst—l—r um softw—re não —ssin—do
digit—lmenteD ™erti(queEse que — versão do (rmw—re é pelo menos IFHFHFH d—
f—˜ri™—nte wi™ro™hipD ™onforme pode ser visto n— pigur— IFR e —v—n™eF




                       pigur— IFRX snst—l—ção do sghP


    epós o termino d— inst—l—ção —˜r— o progr—m— w€vef p—r— ™on(gur—r
o gr—v—dor ou depur—dorF †á —o menu €rogr—mmer Eb ƒele™t €rogr—mmer
Eb w€vef sgh PF †á nov—mente —o menu €rogr—mmer m—s dest— vez
es™olh— — opção  w€vef sgh P ƒetup ‡iz—rdF
    xo wiz—rdD es™olh— — ™omuni™—ção ™omo …ƒf e depois dig— que — pl—™—
possui —liment—ção independente „—rget h—s own power supplyF heixe —s
outr—s opções n— seleção p—drãoF entes de ™li™—r em ™on™luir veri(que —o
(n—l se o resumo se p—re™e ™om o d— pigur— IFSF




            Notas de Aula ELT024 - Programação para Sistemas Embarcados
8                              Introdução




    pigur— IFSX ‚esumo d—s ™on(gur—ções do sghP no w€vef




       Notas de Aula ELT024 - Programação para Sistemas Embarcados
9                                       Introdução


     Criação de um novo projeto
‚e™omend—Ese — utiliz—ção do —ssistente disponível p—r— — ™ri—ção de um novo
projeto @menu €roje™t Eb €roje™t ‡iz—rdAF ile irá question—r so˜re @entre
p—rênteses os v—lores —dot—dos neste ™ursoAX

    IF O microcontrolador a ser utilizado (PIC18F4550)

    PF A suíte de compilação (SDCC 16)

    QF O diretĂłrio e nome do projeto

    RF Arquivos jĂĄ existentes cujo programador deseja incluir no projeto

    epós estes p—ssos o projeto est—rá ™ri—doF g—so — list— de —rquivos do
projeto não estej— visível vá —o menu †iew Eb €roje™tF
    €—r— — ™ri—ção de um novo —rquivo vá —té o menu pile Eb xewF xeste
novo —rquivo digite —lgum— ™ois— e s—lveEoF g—so sej— o —rquivo que ™onterá
— função prin™ip—l @m—inA é ™ostume s—lváElo ™om o nome de 4m—inF™4F
    e ™—d— novo —rquivo ™ri—do é ne™essário inseríElo no projetoF €—r— isso
deveEse ™li™—r n— p—st— ™orrespondente —o tipo de —rquivo que se desej— in™luir
e em seguid— 4edd piles4 ™omo pode ser visu—liz—do n— pigur— IFTF




                      pigur— IFTX €roje™t ixplorer do w€vef


   elém dos —rquivos ™ri—dos pelo progr—m—dorD existem três —rquivos que
devem ser —di™ion—dos —o projetoX um de linker e dois de ˜i˜liote™—sF

    IF Linker

        @—A C:Arquivos de programasgputilslkr18f4550.lkr

    PF Bibliotecas

                Notas de Aula ELT024 - Programação para Sistemas Embarcados
10                                     Introdução


         @—A C:Arquivos de programasSDCClibpic16libdev18f4550.lib
         @˜A C:Arquivos de programasSDCClibpic1618f4550.lkr

   y —rquivo de linker é o responsável por indi™—r qu—is são os esp—ços
de memóri— disponíveis no ™hip utiliz—doD onde ™omeç—m e de que tipo são
@‚ewD ‚ywD pl—shA et™F



// File: 18f4550.lkr
// Sample linker script for the PIC18F4550 processor
// Not intended for use with MPLAB C18. For C18 projects,
// use the linker scripts provided with that product.
LIBPATH .

CODEPAGE     NAME=page      START=0x0    END=0x7FFF
CODEPAGE     NAME=idlocs    START=0x200000 END=0x200007       PROTECTED
CODEPAGE     NAME=config    START=0x300000 END=0x30000D       PROTECTED
CODEPAGE     NAME=devid     START=0x3FFFFE END=0x3FFFFF       PROTECTED
CODEPAGE     NAME=eedata    START=0xF00000 END=0xF000FF       PROTECTED

ACCESSBANK   NAME=accessram START=0x0    END=0x5F
DATABANK     NAME=gpr0    START=0x60  END=0xFF
DATABANK     NAME=gpr1    START=0x100 END=0x1FF
DATABANK     NAME=gpr2    START=0x200 END=0x2FF
DATABANK     NAME=gpr3    START=0x300 END=0x3FF
DATABANK     NAME=usb4    START=0x400 END=0x4FF PROTECTED
DATABANK     NAME=usb5    START=0x500 END=0x5FF PROTECTED
DATABANK     NAME=usb6    START=0x600 END=0x6FF PROTECTED
DATABANK     NAME=usb7    START=0x700 END=0x7FF PROTECTED
ACCESSBANK   NAME=accesssfr START=0xF60 END=0xFFF PROTECTED



   €er™e˜emos pelo linker —™im— que existem PST ˜ytes de memóri— eepromD
não volátilD que foi denomin—d— eed—t—F €—r— — memóri— ‚ew está reserv—do
um tot—l de P k˜ytesD divididos1 em R ˜—n™os de memóri—D sendo que o
primeiro foi dividido em du—s seçõesF istes for—m denomin—dos @—™essr—mE
gprHAD gprID gprPD gprQ2 F
   €—r— o progr—m— temos disponível um— região de QP k˜ytes de memóri—
)—shD que v—i d— posição HxHHHH —té HxUpppF iste é o mesmo endereço d—
memóri— ‚ewF xão existe ™on)itoD pois est—mos tr—˜—lh—ndoD no ™—so do
€sgD ™om um— —rquitetur— r—rv—rdF xest— existem dois ˜—rr—mentos e du—s
memóri—s diferentesX um— p—r— o progr—m—D denomin—d— gyhi€eqi no
     1
     …m— d—s m—iores di(™uld—des en™ontr—d—s em se ™onstruir um ™ompil—dor de lingu—E
gem g é o g—sto em termos de re™ursos ™omput—™ion—is que é dispendido p—r— tr—t—r estes
qu—tro ˜—n™os ™omo sequên™i—isF x— re—lid—de eles estão todos so˜re um mesmo endereço
de memóri—F €—r— —™ess—r ™—d— um deles é ne™essário —tu—r so˜re um registro no €sgD
indi™—ndo qu—l ˜—n™o est—rá —tivo n—quele momentoF
   2
     gprˆ signi(™— qener—l €ropouse ‚—m ˜—nk ˆ


              Notas de Aula ELT024 - Programação para Sistemas Embarcados
11                                   Introdução


linkerD e um— p—r— os d—dosD denomin—d— he„efexuF xot—r que —pes—r d—
memóri— eeprom ser utiliz—d— p—r— —rm—zen—mento não volátil de d—dosD el—
está m—pe—d— no ˜—rr—mento de ™ódigoF ssto se deve — ™onstrução intern—
do mi™ro™ontrol—dorF
    ys d—dos —present—dos no linker e des™orridos —nteriormente podem ser
veri(™—dos e ™omp—r—dos ™om outros modelos o˜serv—ndo — pigur— IFUF




     pigur— IFUX gomp—r—tivo de ™—r—™terísti™—s d— f—míli— €sg IVfxxSx




            Notas de Aula ELT024 - Programação para Sistemas Embarcados
CapĂ­tulo 2

Linguagem C para sistemas
embarcados
               C is quirky, awed, and an enormous success.    E hennis wF
               ‚it™hie
e progr—m—ção p—r— sistem—s em˜—r™—dos possui divers—s ™—r—™terísti™—s diE
ferentes d— progr—m—ção volt—d— p—r— desktopF ho mesmo modoD existem
—lguns ™on™eitos que ger—lmente não são explor—dos nos ™ursos de lingu—gens
de progr—m—ção em g m—s que são essen™i—is p—r— o ˜om desenvolvimento
deste ™ursoF istes ™on™eitos serão expl—n—dos neste ™—pítuloF


2.1    Indentação e padrão de escrita
               Good programmers use their brains, but good guidelines save
               us having to think out every case.   E pr—n™is ql—ss˜orow

É fund—ment—l o˜ede™er um p—drão p—r— es™rit— de progr—m—sD de modo que
— visu—liz—ção do ™ódigo sej— f—™ilit—d—F
    x— língu— portugues— utiliz—mos p—rágr—fos p—r— delimit—r ˜lo™os de fr—E
ses que possuem — mesm— idei—F im lingu—gem g estes ˜lo™os são delimit—dos
por ™h—ves { e }F
    €—r— demonstr—r —o leitor que um p—rágr—fo ™omeçou utiliz—mos um re™uo
à direit— n— primeir— linh—F u—ndo é ne™essário re—liz—r um— ™it—ção de
itens ™olo™—Ese ™—d— um destes itens num— linh— re™u—d— à direit—D —lgum—s
vezes ™om um identi(™—dor ™omo um tr—ço E ou set— Eb p—r— f—™ilit—r —
identi(™—ção visu—lF
    gom esse mesmo intuito utiliz—Ese re™uos e esp—ç—mentos p—r— que o
™ódigo sej— m—is f—™ilmente entendidoF
    gomo todo ˜lo™o de ™om—ndos é ini™i—do e termin—do ™om um— ™h—veD
tornouEse ™omum que est—s @—s ™h—vesA estej—m no mesmo nível e todo ™ódigo
interno — el—s sej— deslo™—do à direit—F ƒe existir um segundo ˜lo™o interno


                                    IP
13                         Linguagem C para sistemas embarcados


    —o primeiroD este deve ser deslo™—do du—s vezes p—r— indi™—r — hier—rqui— no
    )uxo do progr—m—F ƒegue —˜—ixo um exemplo de um mesmo ™ódigo ™om
    diferenç— —pen—s n— indent—çãoF


    gódigo indent—do                                gódigo não indent—do


I   void main @ void A interrupt H                  void main @ void A interrupt        H
    {                                               {
      unsigned int i Y                              unsigned int i Y
      unsigned int temp Y                           unsigned int temp Y
      unsigned int teclanova aHY                    unsigned int teclanova aHY
         InicializaSerial @ A Y                     InicializaSerial @ A Y
         InicializaDisplays @ A Y                   InicializaDisplays @ A Y
         InicializaLCD @ A Y                        InicializaLCD @ A Y
         InicializaAD @ A Y                         InicializaAD @ A Y
         for @YYA                                   for@YYA
         {                                          {
           AtualizaDisplay @ A Y                    AtualizaDisplay @ A Y
            if   @ teclanova 3a Tecla A             if @ teclanova 3a Tecla A
           {                                        {
               teclanova a Tecla Y                  teclanova a Tecla Y
                 for @ i aHY i `ITY iCCA            for@ i aHY i `ITY iCCA
               {                                    {
                   if    @ BitTst @ Tecla D i A A   if @ BitTst @ Tecla D i A A
                   {                                {
                       EnviaDados @ i CRVA Y        EnviaDados @ i CRVA Y
                   }                                }
               }                                    }
           }                                        }
         for @ i a H Y i ` I H H H Y iCCA Y         for@ i a H Y i ` I H H H Y iCCA Y
         }                                          }
    }                                               }



        €odemos not—r pelo ™ódigo —nterior que —quele que possui ident—ção f—™iE
    lit— n— veri(™—ção de qu—is instruçõesGrotin—s estão su˜ordin—d—s às dem—isF
        yutr— ™—r—™terísti™— de p—droniz—ção est— n— ™ri—ção de nomes de funções
    e de v—riáveisF €el— lingu—gem g um— função ou v—riável pode ter qu—lquer
    nome desde queX sej— ini™i—d— por um— letr—D m—iús™ul— ou minús™ul—D e os
    dem—is ™—r—™teres sej—m letr—sD números ou unders™ore •F
        e lingu—gem g permite t—m˜ém que sej—m de™l—r—d—s du—s v—riáveis ™om
    mesmo nome ™—so possu—m letr—s diferentes —pen—s qu—nto ™—ix— @m—iús™ul—
    ou minús™ul—AF €or exemploX v—r e ver são v—riáveis distint—sD o que
    pode ger—r erro no desenvolvimento do progr—m— ™—us—ndo dúvid—s e erros
    de digit—çãoF
        €or isso ™onven™ion—Ese que nome de v—riáveis sej—m es™ritos —pen—s em
    minús™ul—sF u—ndo o nome é ™ompostoD se utiliz— um— m—iús™ul— p—r—

                    Notas de Aula ELT024 - Programação para Sistemas Embarcados
14                           Linguagem C para sistemas embarcados


diferen™iáElos ™omo por exemplo —s v—riáveis ™ont€os e ™ont„ot—lF
    xomes de função serão es™ritos ™om — primeir— letr— m—iús™ul— e no ™—so
de nome ™ompostoD ™—d— ini™i—l será gr—f—d— em m—iús™uloX sni™i—liz—„eE
™l—do@AD €—r—ƒistem—@AF
    „—gs de de(nições @utiliz—dos em ™onjunto ™om — diretiv— 5de(neA serão
gr—f—dos ex™lusiv—mente em m—iús™uloX x…wi‚yhi†yv„eƒD gyxƒ„E
q‚e†s„egsyxevF
    g—d— ™h—ve será ™olo™—d— num— úni™— linh—D ™onforme exemplo —nteriorD
evit—ndoEse ™onstruções do tipoX

if    @ PORTA aa H x30 A { PORTB a H x10 Y }

      yu

if    @ PORTA aa H x30 A {
     PORTB a H x10 Y }

    es regr—s —present—d—s vis—m forne™er um— identid—de visu—l —o ™ódigoF
„—is regr—s não são —˜solut—sD servem —pen—s p—r— o ™ontexto dest— —postil—F
im ger—lD ™—d— instituição ou projeto possui seu próprio ™onjunto de norm—sF
É import—nte ter ™onhe™imento deste ™onjunto e —pli™áElo em seu ™ódigoF
    y estilo —dot—do nest— —postil— é ™onhe™ido t—m˜ém ™omo estilo ellm—nD
˜sd @no em—™sA ou exƒsD já que todos os do™umentos do p—drão exƒs g
utiliz—m este estiloF epes—r disto o p—drão exƒs g não espe™i(™— um estilo
p—r— ser us—doF


2.2        ComentĂĄrios
                    If the code and the comments disagree, then both are probably
                    wrong.       E xorm Īhryer

gomentários são textos que introduzimos no meio do progr—m— fonte ™om —
intenção de tornáElo m—is ™l—roF É um— ˜o— práti™— em progr—m—ção inserir
™omentários no meio dos nossos progr—m—sF €odeEse ™oment—r —pen—s um—
linh— us—ndo o sím˜olo GG @du—s ˜—rr—sAF €—r— ™oment—r m—is de um— linh—
us—Ese o sím˜olo GB @˜—rr— e —steris™oA —ntes do ™omentário e BG @—steris™o
e ˜—rr—A p—r— indi™—r o (n—l do ™omentárioF

#include `s t d i o F hb
#define hsƒ„ PTH
int main @ int argc D char *
                             //    distancia     entre   SP    e   Ita
                                          argv ‘ “ A
{
     /*   esse   programa         serve   para
     mostrar     como   se    insere      comentĂĄrios     */
     printf @  SĂŁo Paulo estĂĄ %d Km de ItajubĂĄ  D                      DIST A Y
     return HY


                 Notas de Aula ELT024 - Programação para Sistemas Embarcados
15                  Linguagem C para sistemas embarcados


}



2.3     Arquivos .c e .h
x— progr—m—ção em lingu—gem g utiliz—mos dois tipos de —rquivos ™om funE
ções distint—sF „od— implement—ção de ™ódigo é feit— no —rquivo ™om exE
tensão F™ @code AF É nele que ™ri—mos —s funçõesD de(nimos —s v—riáveis e
re—liz—mos — progr—m—ção do ™ódigoF ƒe existem dois —rquivos F™ no projeto
e queremos que um deles poss— us—r —s funções do outro —rquivoD é ne™essário
re—liz—r um 5in™ludeF
    ys —rquivos Fh @header A tem ™omo função ser um espelho dos —rquivos
F™ disponi˜iliz—ndo —s funções de um —rquivo F™ p—r— serem utiliz—d—s
em outros —rquivosF xele ™olo™—mos todos os protótipos d—s funções que
queremos que os outros —rquivos usemF
    ƒe quisermos que um— função só poss— ser utiliz—d— dentro do próprio —rE
quivoD por motivo de segur—nç— ou org—niz—çãoD ˜—st— de™l—r—r seu protótipo
e€ixeƒ no —rquivo F™F
    ƒe for ne™essário que um —rquivo lei— eGou gr—ve num— v—riável de outro
—rquivo é re™omend—do ™ri—r funções espe™í(™—s p—r— t—l (n—lid—deF
    y progr—m— PFI —present— um exemplo de um —rquivo de ™ódigo F™ e o
progr—m— PFP —present— o respe™tivo —rquivo de he—der FhF
    €odemos not—r que no —rquivo Fh — função etu—liz—hispl—y@A não está
presenteD deste modo el— não est—rá disponível p—r— os outros —rquivosF €oE
demos not—r t—m˜ém que p—r— ler ou gr—v—r — v—riável digito é ne™essário
utiliz—r —s funções wud—rhigito@A e verhigito@AF xot—r que não existe —™esso
direto às v—riáveisF iste tipo de —˜ord—gem insere —tr—sos no pro™ess—mento
devido à um efeito ™onhe™ido ™omo overhe—d de funçõesD podendo in™lusive
™—us—r tr—v—mentos no sistem— ™—so não exist— esp—ço su(™iente no st—™kF


2.4     Diretivas de compilação
es diretiv—s de ™ompil—ção são instruções que são d—d—s —o ™ompil—dorF il—s
não serão exe™ut—d—sF „od—s —s diretiv—s de ™ompil—ção ™omeç—m ™om um
sin—l 5D ™onhe™ido ™omo jogo d— velh— ou h—shF

     #include
e diretiv— de ™ompil—ção 5in™lude é — responsável por permitir que o proE
gr—m—dor utilize no seu ™ódigo funções que for—m implement—d—s em outros
—rquivosD sej— por ele próprio ou por outr—s pesso—sF xão é ne™essário posE
suir o ™ódigo fonte d—s funções que se desej— utiliz—rF É ne™essário —pen—s
de um —rquivo que indique os protótipos d—s funções @™omo el—s devem ser
™h—m—d—sA e possuir — função disponível em su— form— ™ompil—d—F

            Notas de Aula ELT024 - Programação para Sistemas Embarcados
16                             Linguagem C para sistemas embarcados




     visting PFIX ‚esumo do dispUsegF™
 I
     static char temp Y
     // v a r i ĂĄ v e l     usada    apenas     dentro      deste       arquivo
 P
 Q
     static char valor Y
     // v a r i ĂĄ v e l     que    serĂĄ    usada     tambĂŠm      fora   do   arquivo
 R
 S
     void MudaDigito @ char
     // f u n ç þ e s      usadas    dentro     e    fora   do    arquivo
 T                                          val A
 U   {
 V        valor a val Y
 W   }
IH   char LerDigito @ void A
II   {
IP     return valor Y
IQ   }
IR   void InicializaDisplays @ void A
IS   {
IT        // c ó d i g o    da    função
IU   }
IV
     void                                   void A
     // f u n ç ã o     usada      apenas    dentro     deste      arquivo
IW             AtualizaDisplay @
PH   {
PI        // c ó d i g o    da    função
PP   }




     visting PFPX ‚esumo do dispUsegFh
I    #ifndef †e‚•r
P      5define VAR_H
Q      void MudaDigito @ char val A Y
R      char LerDigito @ void A Y
S      void InicializaDisplays @ void A Y
T    #endif        //VAR_H




                           Notas de Aula ELT024 - Programação para Sistemas Embarcados
17                    Linguagem C para sistemas embarcados


   im ger—l um —rquivo que possui —pen—s protótipos de funções é denomiE
n—do de re—der e possui — extensão FhF

     #dene
yutr— diretiv— muito ™onhe™id— é — 5de(neF qer—lmente é utiliz—d— p—r—
de(nir um— ™onst—nte m—s pode ser utiliz—d— p—r— que o ™ódigo fonte sej—
modi(™—do —ntes de ser ™ompil—doF


                                                                            ‚esult—do   n—
yrigin—l                             gompil—do
                                                                            „el—


#define gyxƒ„ IS
void main @ void A                   void   main @   void A
{                                    {
                                                                            RS
     printf @ %d D CONST * ←           printf @ %d D IS * Q A Y
         QA Y                        }
}




                                                                            ‚esult—do   n—
punção yrigin—l                      ypções de uso ™om o 5de(ne
                                                                            „el—


void     MostraSaidaPadrao @ A
{
     5ifdef PADRAO Serial           #include `s t d i o F hb
       char   * msg a ←             #define €eh‚ey ƒ e r i — l
            SERIAL  Y             void main @ void A
     5else                           {
                                                                            SERIAL
       char   * msg a  LCD  Y          MostraSaidaPadrao @ A Y
     5endif                          }
     printf @ msg A Y
}




                                    #include `s t d i o F hb
                                    #define €eh‚ey vgh
                                    void main @ void A                      LCD
                                     {
                                         MostraSaidaPadrao @ A Y
                                     }



€elo ™ódigo —present—do per™e˜emos que — mesm— função wostr—ƒ—id—€—E
dr—o@AD —present— result—dos diferentes dependendo de ™omo foi de(nid— —

              Notas de Aula ELT024 - Programação para Sistemas Embarcados
18                      Linguagem C para sistemas embarcados


opção €eh‚eyF
    ys de(nes t—m˜ém —jud—m — f—™ilit—r — lo™—liz—ção dos dispositivos e
—just—r —s ™on(gur—ções no mi™ro™ontrol—dorF „odo periféri™o possui um ou
m—is endereços p—r— os qu—is ele respondeF istes endereços podem v—ri—r
in™lusive dentro de um— mesm— f—míli—F €or exemplo o endereço d— port—
h @onde estão lig—dos os ledsA é HxpVQF €—r— lig—r ou deslig—r um led é
pre™iso —lter—r o v—lor que est— dentro do endereço HxpVQF €—r— f—™ilit—r este
pro™edimentoD é de(nido um ponteiro p—r— este endereço e rotul—do ™om o
nome €y‚„hF he(nir ypp ™omo H e yx ™omo I f—™ilit— — leitur— do ™ódigoF

     #ifdef, #ifndef, #else e #endif
es diretiv—s 5ifdefD 5ifndefD 5else e 5endif são muito utiliz—d—s qu—ndo
queremos ger—r dois progr—m—s que diferem —pen—s num pequeno ped—ço de
™ódigoF €or exemplo dois sistem—s de ™ontrole de temper—tur—F y primeiro
possui um displ—y de vghD ™—p—z de mostr—r — temper—tur— textu—lmenteF y
segundo sistem— exe™ut— — mesm— função que o primeiro m—s é um dispositivo
m—is ˜—r—toD port—nto possui —pen—s um led indi™—tivo de so˜retemper—tur—F
y ™ódigo pode ser es™rito d— seguinte m—neir—

void       ImprimirTemp @   char   valor A
{
    5ifdef LCD
      Imprime_LCD @ valor A
    5else
      if @ valor b Q H A
      {
        led a I Y
      }
       else
       {
        led a H Y
      }
    5endif //LCD
}

    xo momento d— ™ompil—ção o préE™ompil—dor irá veri(™—r se — t—g vgh
foi de(nid— em —lgum lug—rF im ™—so positivo o préE™ompil—dor irá deix—r
tudo que estiver entre o 5ifdef e o 5else e retir—rá tudo que está entre o
5else e o 5endifF
    yutr— função muito utiliz—d— dest—s diretiv—s é p—r— evit—r — referên™i—
™ir™ul—rF ƒupondo dois —rquivosD um responsável pel— ™omuni™—ção seri—l
@seri—lFhA e o segundo responsável pelo ™ontrole de temper—tur— @tempFhAF
y projeto exige que — temper—tur— poss— ser ™ontrol—d— pel— port— seri—l e
tod— vez que — temper—tur— p—ss—r de um determin—do p—t—m—r deve ser
envi—do um —lert— pel— port— seri—lF y —quivo d— port— seri—l @seri—lFhA tem
—s seguintes funçõesD —present—d—s — seguirF

                Notas de Aula ELT024 - Programação para Sistemas Embarcados
19                            Linguagem C para sistemas embarcados




    visting PFQX istrutur— de he—der
I   #ifndef „eq•gyx„‚yvi
P     5define TAG_CONTROLE
Q        // t o d o   o    conteĂşdo    do    arquivo   vem   aqui .


S   #endif       //TAG_CONTROLE




    char      LerSerial @       void A Y
    void      EnviaSerial @       char      val A Y

        y —rquivo de ™ontrole d— temper—tur— @tempFhA possui —s funções —preE
    sent—d—s — seguirF

    char      LerTemperatura @        void A Y
    void      AjustaCalor @        char val A Y
        „od— vez que — função ver„emper—tur—@A for ™h—m—d—D el— deve f—zer um
    teste e se o v—lor for m—ior que um p—t—m—r ™h—m—r — função invi—ƒeri—l@A
    ™om o ™ódigo HxQHF €—r— isso o —rquivo tempFh deve in™luir o —rquivo seri—lFhF

    #include  serial .h
    char LerTemperatura @ void A Y
    void AjustaCalor @ char val A Y
        „od— vez que — função verƒeri—l@A re™e˜er um v—lorD el— deve ™h—m—r —
    função ejust—g—lor@A e rep—ss—r esse v—lorF €—r— isso o —rquivo seri—lFh deve
    in™luir o —rquivo tempFh

    #include  temp .h
    char LerSerial @ void A Y
    void EnviaSerial @ char                 val A Y

        y pro˜lem— é que deste modo é ™ri—d— um— referên™i— ™ir™ul—r sem (mX
    o ™ompil—dor lê o —rquivo seri—lFh e per™e˜e que tem que inserir o —rquivo
    tempFhF snserindo o —rquivo tempFh per™e˜e que tem que inserir o —rquivo
    seri—lFhD ™onforme pode ser visto n— pigur— PFIF
        e solução é ™ri—r um dispositivo que permit— que o ™onteúdo do —rquivo
    sej— lido —pen—s um— vezF iste dispositivo é implement—do —tr—vés d— estruE
    tur— —present—d— no progr—m— PFQF
        ƒegundo o ™ódigo —™im—D o ™onteúdo que estiver entre o 5ifndef e o 5enE
    difD só será m—ntido se — — t—g „eq•gyx„‚yvi xÃy estiver de(nid—F
    gomo isto é verd—de dur—nte — primeir— leitur—D o préE™ompil—dor lê o —rE
    quivo norm—lmenteF ƒe —™onte™er um— referên™i— ™í™li™—D n— segund— vez que
    o —rquivo for lidoD — t—g „eq•gyx„‚yvi já est—rá de(nid— impedindo

                          Notas de Aula ELT024 - Programação para Sistemas Embarcados
20                         Linguagem C para sistemas embarcados




              temp.h

     #include “serial.h”

     char LerTemperatura(void);
     void AjustaCalor(char val);                               serial.h

                                                        #include “temp.h”

                                                        char LerSerial(void);
                                                        void EnviaSerial(char val);
              temp.h

     #include “serial.h”

     char LerTemperatura(void);
     void AjustaCalor(char val);




                pigur— PFIX €ro˜lem— d—s ‚eferên™i—s gir™ul—res




             Notas de Aula ELT024 - Programação para Sistemas Embarcados
21                         Linguagem C para sistemas embarcados


—ssim que o pro™esso ™í™li™o ™ontinueD ™onforme pode ser visto n— pigur— PFPF


                temp.h
      #infdef TEMP_H
         #define TEMP_H
         #include “serial.h”

        char LerTemperatura(void);
        void AjustaCalor(char val);                                    serial.h
      #endif
                                                              #infdef SERIAL_H
                                                                 #define SERIAL_H
                                                                 #include “temp.h”

                temp.h                                          char LerSerial(void);
                                                                void EnviaSerial(char val);
           #infdef TEMP_H                                     #endif

              //tag jĂĄ definida,
              //pula o conteĂşdo

           #endif




           pigur— PFPX ƒolução d—s referên™i—s ™ir™ul—res ™om 5ifndef


   qer—lmente se utiliz— ™omo t—g de ™ontrole o nome do —rquivoF ist— t—g
deve ser úni™— p—r— ™—d— —rquivoF


2.5      Tipos de dados em C
                    19 Jan 2038 at 3:14:07 AM. The end of the world according
                    to Unix (2
                                    32
                                         seconds after Jan 1st 1970)   E …nix d—te system

y tipo de um— v—riávelD inform— — qu—ntid—de de memóri—D em bytesD que est—
irá o™up—r e ™omo est— deve ser interpret—d—X ™om ou sem fr—ção @vírgul—AF
ys tipos ˜ási™os de d—dos n— lingu—gem g são —present—dos n— „—˜el— PFIF


                    „—˜el— PFIX „ipos de d—dos e f—ix— de v—lores
                      Tipo         Bits Bytes       Faixa de valores

                       ™h—r         V      I           EIPU à IPU
                        int        IT      P        EQPFUTV Ă  QPFUTU
                      )o—t         QP      R     QDR x IH-38 à QDR x IH38
                     dou˜le TR             V    QDR x IH-308 à QDR x IH308




                Notas de Aula ELT024 - Programação para Sistemas Embarcados
22                    Linguagem C para sistemas embarcados


    €odemos not—r que —s v—riáveis que possuem m—ior t—m—nho podem —rE
m—zen—r v—lores m—ioresF xot—mos t—m˜ém que —pen—s os tipos )o—t e douE
˜le possuem ™—s—s de™im—isF

     Representação binåria e hexadecimal
e gr—nde m—iori— dos pro™ess—dores tr—˜—lh— ™om d—dos ˜ináriosD ou sej—D
—queles que —pen—s —ssumem v—lores H ou IF €or isso os tipos —present—dos
—nteriormente podem ser represent—dos utiliz—ndo — ˜—se PF …m v—lor do
tipo ™h—r que possui V ˜its será represent—do por um número de V —lg—rismosD
todos H @zerosA ou I @unsAF €—r— re—liz—rmos — ™onversão de um número n—
˜—se de™im—l p—r— — ˜—se P podemos seguir o seguinte —lgoritmoX

     IF Dividir o nĂşmero por 2

     PF Anotar o valor do resto (0 ou 1)

     QF Se o valor ĂŠ maior que 0 voltar ao nĂşmero 1

     RF Escrever os valores obtidos atravĂŠs do passo 2 de trĂĄs para frente.

     SF Apresentar o resultado

€or exemplo o número IVF
    IVGP a WD resto 0
    WGP a RD resto 1
    RGP a PD resto 0
    PGP a ID resto 0
    IGP a HD resto 1
    vendo do último result—do p—r— o primeiro temos que
    IV10 a IHHIH2
    hevido — gr—nde utiliz—ção de números ˜inários n— progr—m—ção de ˜—ixo
nível é muito ™omum es™revemos estes números n— ˜—se IT ou hex—de™im—lF
e v—nt—gem de es™rever o número nest— ˜—se é que existe um— ™onversão
simples de ˜inário p—r— hex—de™im—l e o número result—nte o™up— ˜em menos
esp—ço n— tel—F
    e ˜—se hex—de™im—l possui IT 4unid—des4diferentesF gomo existem —peE
n—s IH —lg—rismos no sistem— de numer—ção —rá˜i™o @HD ID PD QD RD SD TD UD VD
WA utiliz—mos T letr—s p—r— ™omplementáElos @eD fD gD hD iD pAF e ™onversão
entre v—lores ˜ináriosD de™im—is e hex—de™im—is é —present—d— n— „—˜el— PFPF
    €—r— ™onverter de ˜inário p—r— hex—de™im—l ˜—st— dividir o número em
grupos de R em RD da esquerda para a direitaD e utiliz—r — t—˜el— —™im—F
    €or exemplo o número IVF ƒ—˜emos que este número em ˜inário é repreE
sent—do por IHHIH2 F ƒep—r—ndo o número de R em R —lg—rismos temosX
    IEHHIH
    €el— t—˜el—X

              Notas de Aula ELT024 - Programação para Sistemas Embarcados
23                       Linguagem C para sistemas embarcados




          „—˜el— PFPX ‚epresent—ção de™im—l ! ˜inári— E hex—de™im—l
        Decimal BinĂĄrio Hexadecimal Decimal BinĂĄrio Hexadecimal

           H         HHHH           H            V       IHHH           V
           I         HHHI           I            W       IHHI           W
           P         HHIH           P           IH       IHIH           e
           Q         HHII           Q           II       IHII           f
           R         HIHH           R           IP       IIHH           g
           S         HIHI           S           IQ       IIHI           h
           T         HIIH           T           IR       IIIH           i
           U         HIII           U           IS       IIII           p



     I2 a I16
     HHIH2 a P16 F
     vogoX
     IHHIH2 F a IP16 F

     Modicadores de tamanho e sinal
…m modi(™—dor de tipo —lter— o signi(™—do dos tipos ˜—se e produz um novo
tipoF ixistem qu—tro tipos de modi(™—doresD dois p—r— o t—m—nho @long
e shortA e dois p—r— sin—l @unsigned e signedAF …m tipo de™l—r—do ™om o
modi(™—dor long pode ter t—m—nho wesy‚ ou sq…ev —o tipo origin—lF
…m tipo de™l—r—do ™omo short deve ter t—m—nho wixy‚ ou sq…ev —o
tipo origin—lF e de™isão ™—˜e —o ™ompil—dor utiliz—doF
    ys tipos de™l—r—dos ™omo signed possuem um ˜it reserv—do p—r— o sin—lD
deste o v—lor máximo que podem —tingir é menorF ys tipos de™l—r—dos ™omo
unsigned não podem —ssumir v—lores neg—tivosD em ™ompens—ção podem —tinE
gir o do˜ro do v—lor de um tipo signedF x— „—˜el— PFQ são —present—d—s
—lgum—s v—ri—ções possíveisF
    x— lingu—gem gD por p—drão os tipos são sin—liz—dosD ou sej—D possuem
p—rte positiv— e neg—tiv—F €or isso é r—ro en™ontr—r o modi(™—dor signedF

     Modicadores de acesso
hur—nte o pro™esso de ™ompil—çãoD existe um— et—p— de otimiz—ção do proE
gr—m—F hur—nte est— et—p—D o ™ompil—dor pode retir—r p—rtes do ™ódigo ou
desf—zer loops ™om períodos (xosF €or exemplo o ™ódigo —˜—ixoX

#define    ˆ @*@ ne—r     unsigned char * A HxpVQ A
               Notas de Aula ELT024 - Programação para Sistemas Embarcados
24                     Linguagem C para sistemas embarcados




          „—˜el— PFQX elter—ção de t—m—nho e sin—l dos tipos ˜ási™os
                    Tipo           Bytes         ExcursĂŁo mĂĄxima

               unsigned ™h—r        I                    H à PSS
                 signed ™h—r        I                   EIPV à IPU
                 unsigned int       P                   H Ă  TSFSQS
                  signed int        P             EQPFUTV Ă  QPFUTU
                   long int         R      EPFIRUFRVQFTRV Ă  PFIRUFRVQFTRU
              unsigned long int     R            H Ă  RFPWRFWTUFPWS
                  short int         P             EQPFUTV Ă  QPFUTU



void main @ void A     interrupt H
{
  while @ X 3a X A Y
}

     u—ndo ™ompil—do —present— o seguinte ™ódigo em —ssem˜lerX

//    Starting    pCode    block
S_Teste__main code
_main X
  F line  IW // T e s t e . c       while    (X!=X) ;


     RETURN

    inqu—nto — v—riável x for diferente de x o progr—m— não s—i do loopF
y ™ompil—dor entende que est— ™ondição nun™— irá —™onte™er e elimin— o loop
do ™ódigo (n—l ™omo podemos ver no ™ódigo ger—doD — rotin— de return está
logo —pós — ini™i—liz—ção do progr—m— •m—inF €—r— v—riáveis ™omuns o v—lor
só é —lter—do em —tri˜uições diret—s de v—lor ou de outr—s v—riáveisX @x a RYA
ou @x a yYAF
    intret—nto existe um— ™ondição onde — v—riável x pode —lter—r seu v—lor
independentemente do progr—m—F ƒe est— v—riável represent—r um endereço
de memóri— —sso™i—do à um periféri™o físi™oD seu v—lor pode mud—r indepenE
dentemente do )uxo do progr—m—F €—r— indi™—r est— situ—ção —o progr—m—
utiliz—mos — p—l—vr— reserv—d— volatileF

#define ˆ @ * @ volatile n e — r unsigned char * A HxpVQ A
void main @ void A interrupt H
{
  while @ X 3a X A Y
}



               Notas de Aula ELT024 - Programação para Sistemas Embarcados
25                        Linguagem C para sistemas embarcados


qer—ndo o ™ódigo em —ssem˜ler des™rito —˜—ixoX

//    Starting        pCode   block
S_Teste__main code
_main X
_00105_DS_ X
  F line   IW                         //   Teste . c          while       (X != X) ;
  MOVLW    H x83                      // p r i m e i r a    parte    do    endereço
  MOVWF    r0x00
  MOVLW    H x0f                      // s e g u n d a     parte    do    endereço
  MOVWF    r0x01
  MOVFF    r0x00 D FSR0L
  MOVFF    r0x01 D FSR0H
  MOVFF    INDF0 D r0x00              // r e a l i z a     primeira       leitura
  MOVLW    H x83                      // p r i m e i r a    parte    do    endereço
  MOVWF    r0x01
  MOVLW    H x0f                      // s e g u n d a     parte    do    endereço
  MOVWF    r0x02
  MOVFF    r0x01 D FSR0L
  MOVFF    r0x02 D FSR0H
  MOVFF    INDF0 D r0x01              // r e a l i z a     segunda       leitura
  MOVF     r0x00 D W
  XORWF    r0x01 D W
  BNZ      _00105_DS_                 // f a z   o   teste     para       igualdade
  RETURN

€odemos per™e˜er queD deste modoD o ™ompil—dor é forç—do — ler — v—riável
x du—s vezes e re—liz—r o teste p—r— ver se el— perm—ne™e ™om o mesmo v—lorF
   im —lgum—s situ—ções é ne™essário indi™—r que —lgum—s v—riáveis não poE
dem re™e˜er v—lores pelo progr—m—F €—r— isto utiliz—mos — p—l—vr— reserv—d—
constF …tiliz—mos este modi(™—dor p—r— indi™—r que — v—riável represent—
um lo™—l que —pen—s pode ser lido e não modi(™—doD por exemplo um— port—
p—r— entr—d— de d—dosF xest— situ—ção é ™omum utiliz—r —s p—l—vr—s volatile
e const juntoF

#define ˆ @ * @ volatile const               ne—r        unsigned char * A HxpVQ A
void main @ void A interrupt H
// i n i c i o   do   programa


{
     X a QY
}

    ƒe tent—rmos ™ompil—r este ™ódigo —p—re™erá — seguinte mens—gem de
erroX

Teste F c X error Q Q X Attempt to assign value to a constant ←
    variable @aA




                  Notas de Aula ELT024 - Programação para Sistemas Embarcados
26                               Linguagem C para sistemas embarcados


     Modicadores de posicionamento
es v—riáveis podem ser de™l—r—d—s utiliz—ndo os modi(™—dores near e farF isE
tes modi(™—dores indi™—m —o ™ompil—dor em qu—l região de memóri— devem
ser ™olo™—d—s —s v—riáveisF
    e região near ger—lmente se refere à zero p—geF É um— região m—is
fá™il de ser —™ess—d—F e região far exige m—is tempo p—r— exe™ut—r — mesm—
função que — nearF
    €odemos pens—r nest—s regiões ™omo — memóri— ‚ew e — memóri— g—™he
do ™omput—dorF e segund— é m—is rápid—D m—s possui um —lto ™usto e por
isso ger—lmente é menorF im —lgum—s situ—ções é interess—nte que —lgum—s
v—riáveis nun™— s—i—m do ™—™heD pois são utiliz—d—s ™om gr—nde frequên™i—
ou são ™ríti™—s p—r— o sistem—F

     Modicador de persistĂŞncia
im ger—lD —s v—riáveis utiliz—d—s dentro d—s funções perdem seu v—lor —o
término d— funçãoF €—r— que este v—lor não se per™— podemos utiliz—r um
modi(™—dor de persistên™i—X st—ti™F gom esse modi(™—dor — v—riável p—ss—
— possuir um endereço (xo de memóri— d—do pelo ™ompil—dorF elém disso o
™ompil—dor não reutiliz— este endereço em nenhum— outr— p—rte do ™ódigoD
g—r—ntindo que n— próxim— vez que — função for ™h—m—d— o v—lor ™ontinue o
mesmoF

// c r i a   um    contador        persistente     que   ĂŠ


int ContadorPersistente @ int reseta A
// i n c r e m e n t a d o   a   cada   chamada   de   função


{
  static char variavel_persistente Y
  if @ reseta A
     {
         variavel_persistente a H Y
     }
     else
     {
       return @ variavel_persistenteCCA Y
     }
     return −IY
}



2.6          Operaçþes aritmÊticas
                        If people do not believe that mathematics is simple, it is only
                        because they do not realize how complicated life is.    E tohn
                        vouis von xeum—nn



                   Notas de Aula ELT024 - Programação para Sistemas Embarcados
27                       Linguagem C para sistemas embarcados




   visting PFRX yper—ções —ritméti™—s ™om tipos diferentes
 Ivoid       void
        main @      A
 P {
 Q  char  var08 Y
 R  int  var16 Y
 S  long int   var32 Y
 T  float  pont16 Y
 U  double  pont32 Y
 V   var8 a var8 C var16 Y                   //       1
 W   var8 a var8 C var8 Y                    //       2
IH   var16 a var8 * var8 Y                   //       3
II   var32 a var32 G var16 Y                 //       4
IP   var32 a pont32 * var32 Y                //       5
IQ   pont16 a var8 G var16 Y                 //       6
IR   pont16 a pont32 * var32 Y               //       7
IS   pont16 a RH G V H Y                     //       8
IT }



  …m ™uid—do — se tom—rD n— progr—m—ção em g p—r— sistem—s em˜—r™—dosD
  é o result—do de oper—ções —ritméti™—sF €or p—drão n— lingu—gem g o resulE
  t—do de um— oper—ção —ritméti™— possui t—m—nho igu—l —o m—ior oper—ndoF
  y˜serv—ndo o €rogr—m— PFR not—mos —lguns exemplosF
      xo ™—so I @linh— VA um— v—riável ™h—r som—d— — um int ger— ™omo reE
  sult—do um int @m—ior oper—ndoAF xão é possível —rm—zen—r esse result—do
  num ™h—rD h—verá perd— de inform—çãoF

       var32   a var8      C var16 Y     //       1       corrigido


      e som— de dois ™h—rD ™onforme — linh— WD segundo ™—so pode ger—r um
  pro˜lem— se —m˜os forem muito próximo do v—lor limiteF €or exemploX IHH
  C IHH a PHHD que não ™—˜e num ™h—rD já que este só permite —rm—zen—r
  v—lores de EIPV à IPUF

       var16   a var8      C var8 Y     //    2       corrigido


      y ter™eiro ™—so @linh— IHA está ™orretoD — multipli™—ção de dois ™h—r possui
  um v—lor máximo de IPUBIPUaITFIPWF y pro˜lem— é que — multipli™—ção de
  dois ™h—r ger— um outro ™h—rD perdendo inform—çãoF É ne™essário re—liz—r
  um type™—st —ntesF

       var16   a @@   int A var8 A    * var8 Y            //   3   corrigido


      y qu—rto ™—so @linh— IIA pode —present—r um pro˜lem— de pre™isãoF e
  divisão de dois inteiros não —rm—zen— p—rte fr—™ionári—F ƒe isto não for ™ríti™o


                Notas de Aula ELT024 - Programação para Sistemas Embarcados
28                      Linguagem C para sistemas embarcados


p—r— o sistem— está ™orretoF vem˜r—r que — divisão de números inteiros é
m—is rápid— que de números fr—™ionáriosF
    y quinto ™—so @linh— IPA pode —present—r um pro˜lem— de pre™isãoF y
result—do d— ™ont— de um número inteiro ™om um ponto )utu—nte é um
ponto )utu—nteF erm—zen—r esse v—lor num outro número inteiro ger— perd—
de inform—çãoF
    y sexto ™—so @linh— IQA —present— um pro˜lem— muito ™omumF e diviE
são de dois números inteiros ger— um outro número inteiroF xão import—
se —rm—zen—remos o v—lor num— v—riável de ponto )utu—nte h—verá perd—
de inform—ção pois os operandos são inteirosF €—r— evit—r esse pro˜lem— é
ne™essário um type™—stF

     pont16 a @ @   float A var8 A    G var16 Y    //   6   corrigido


    xo sétimo ™—so @linh— IRA pode h—ver perd— de pre™isão pois o result—do
d— oper—ção é um dou˜leD e est—mos —rm—zen—ndo este v—lor num )o—tF
    y oit—vo ™—so @linh— ISA é simil—r —o sextoF ist—mos re—liz—ndo um—
™ont— ™om dois números inteiros esper—ndo que o result—do sej— HDSF gomo
os oper—ndos são inteiros — expressão será —v—li—d— ™omo result—nte em eroF
…m— ˜o— práti™— é sempre us—r 4FH4 ou 4f4 —pós o número p—r— indi™—r
oper—ções ™om vírgul—F

     pont16 a RH f G V H F H Y       //   8   corrigido


   hevemos tom—r ™uid—do t—m˜ém ™om ™omp—r—ções envolvendo números
™om ponto )utu—nteF

float    x a HFIY
while    @ x 3a I F I A {
    printf @ x = %fn D x A Y
    x a x C HFIY
}

    y tre™ho de ™ódigo —™im— —present— um loop in(nitoF gomo existem
restrições de pre™isão nos números de ponto )utu—nte @)o—t e dou˜leA nem
todos os números são represent—dos (elmenteF ys erros de —rredond—mento
podem f—zer ™om que — ™ondição @x 3aIFIA nun™— sej— s—tisfeit—F ƒempre
que houver — ne™essid—de de ™omp—r—ção ™om números de ponto )utu—nte
utiliz—r m—iorD menor ou v—ri—çõesF

float    x a HFIY
while    @x ` IFIA {
    printf @ x = %fn D x A Y
    x a x C HFIY
}



               Notas de Aula ELT024 - Programação para Sistemas Embarcados
29                   Linguagem C para sistemas embarcados


    epes—r de sutis estes tipos de erro podem ™—us—r um m—u fun™ion—mento
do sistem—F x— pigur— PFQ é —present—do um erro ger—do —tr—vés de um loop
in(nitoF




     pigur— PFQX voop in(nito de um devi™e driver ger—ndo erro no sistem—




2.7      Função main()
„odo sistem— ne™essit— de ini™i—r em —lgum lug—rF im ger—lD os mi™ro™onE
trol—doresD —ssim que lig—dosD pro™ur—m por su—s instruções no primeiro ou
último endereço de memóri—D dependendo d— —rquitetur— utiliz—d—F y esp—ço
de memóri— disponível neste endereço é ger—lmente muito pequenoD —pen—s
o ne™essário p—r— inserir um— instrução de pulo e o endereço onde está —
função prin™ip—lF iste esp—ço é ™onhe™ido ™omo posição de resetF ixisE
tem —ind— outros esp—ços de memóri— simil—res — este queD ger—lmenteD são
—lo™—dos próximosF y ™onjunto destes esp—ços é ™onhe™ido ™omo vetor de
interrupção @pigur— PFRAF
    e m—neir— de indi™—r o ponto de iní™io de um progr—m— depende do
™ompil—dorF im ger—l os ™ompil—dores —lo™—m — função m—in@A em —lgum
lug—r d— memóri— onde h—j— esp—ço disponívelF hepois disso dispõem de um—
instrução de pulo p—r— o primeiro endereço de memóri—D onde foi —lo™—d— —
função m—inF
    €—r— o ™ompil—dor ƒhggGq€…tils no w€vef é ne™essário indi™—r que
queremos que — função m—in@A sej— ™h—m—d— tod— vez que o sistem— for
ini™i—doF €or isso é ne™essário que — posição de reset dentro do vetor de

             Notas de Aula ELT024 - Programação para Sistemas Embarcados
30                Linguagem C para sistemas embarcados




                               Endereço Instrução
                                 0x00      Pulo
                                 0x01     0x8A
                                 0x02      Pulo
                                 0x03      0x55
                                 0x04       ...

                                 0x55     Limpa A
                                 0x56     A recebe
                                 0x57        30
                                 0x58     Testa A
                                 0x59        ...

                                 0x8A    A recebe
                                 0x8B       50
                                 0x8C    Salva em
                                 0x8D     Porta B
                                 0x8E        ...

     pigur— PFRX ixemplo de fun™ion—mento do vetor de interrupção




          Notas de Aula ELT024 - Programação para Sistemas Embarcados
31                              Linguagem C para sistemas embarcados


interrupção —ponte p—r— — função m—inF ssto é feito —tr—vés do —tri˜uto
interrupt H logo —pós o nome d— função ™onforme pode ser visto no ™ódigo
—˜—ixoF

void      main @      void A    interrupt H
{
     // a q u i   entra     o   cĂłdigo   do   programa
}

    yutr— ™ois— interess—nte é que p—r— sistem—s em˜—r™—dos — função prinE
™ip—l não re™e˜e nem retorn— n—d—F gomo el— é — primeir— — ser ™h—m—d—
não há ™omo envi—r —lgum v—lor por p—râmetroF il— t—m˜ém não retorn—
n—d— pois —o término dest— o sistem— não está m—is oper—tivoF
    im ger—l sistem—s em˜—r™—dos são projet—dos p—r— ™omeç—rem — fun™iE
on—r —ssim que lig—dos e —pen—s p—r—r su— t—ref— qu—ndo deslig—dosF gomo
tod—s —s fun™ion—lid—des são ™h—m—d—s dentro d— função m—in@A1 esper—Ese
que o progr—m— ™ontinue exe™ut—ndo —s instruções dentro del— —té ser desliE
g—do ou re™e˜er um ™om—ndo p—r— deslig—rF iste ™omport—mento pode ser
o˜tido —tr—vés de um loop in(nitoF e˜—ixo estão —s du—s —ltern—tiv—s m—is
utiliz—d—sF




void main @ void A              interrupt H          void main @ void A            interrupt H
{                                                    {
  for @ Y Y A                                          while @ I A
     {                                                   {
         // a q u i   entra     o                            // a q u i   entra   o
         // c Ăł d i g o    principal                         // c Ăł d i g o   principal
     }                                                   }
}                                                    }




2.8         Rotinas de tempo
                          Time is an illusion, lunchtime doubly so.             E pord €refe™t

É muito ™omum ne™essit—r que o mi™ro™ontrol—dor (que um tempo sem f—zer
n—d—F …m— m—neir— de —tingir esse o˜jetivo é utiliz—r um l—ço FOR 2 F

unsigned char i Y
for @ i aHY i ` I H Y           iCCA Y
     1
     im sistem—s m—is ™omplexos —lgum—s t—ref—s são exe™ut—d—s independentemente d—
função prin™ip—lD tendo su— exe™ução ™ontrol—d— —tr—vés de interrupçõesF
   2
     iste método não é —™onselh—do em sistem—s de m—ior porteF


                   Notas de Aula ELT024 - Programação para Sistemas Embarcados
32                           Linguagem C para sistemas embarcados


    xot—r que não est—mos utiliz—ndo os ™ol™hetesF vogo —pós fe™h—r os p—E
rênteses já existe um ponto e virgul—F €—r— entender ™omo esse pro™edimento
fun™ion—D e estim—r o tempo de esper— é pre™iso entender ™omo o ™ompil—dor
tr—duz ess— função p—r— —ssem˜lerF

// c Ăł d i g o   em    assembler       equivalente           Ă        f o r ( i =0;        i 10;      i ++) ;
     MOVF          r0x00 D W      // i n i c i a l i z a W com                0    (1    ciclo )
     SUBLW         H x0a          // c o l o c a   o    valor         10          (0 x0a )     no    r e g i s t r o W (1←
             ciclo )
  MOVWF    r0x00                  // muda     o    valor         de W para                F    (1    ciclo )
_00107_DS_ X
  DECFSZ r0x00 D F                       // d e c r e m e n t a       F,          se    F  0       executa     a   ←
           prĂłxima       linha    (1   ciclo )
     BRA _00107_DS_                      //  p u l a      para          o       lugar       marcado     como      ←
           _00107_DS_        (2   ciclos )


   €er™e˜emos pelo ™ódigo —™im— que p—r— re—liz—r um for pre™is—mos de Q
p—ssos de ini™i—liz—çãoF g—d— iter—ção exige P p—ssosX um— ™omp—r—ção e um
pulo 3 D tot—liz—ndo Q ™i™los de ini™i—liz—ção e Q ™i™los de inter—çãoF
   ƒe temos um pro™ess—dor tr—˜—lh—ndo — V wrzD ™—d— instrução é exe™uE
t—d— em HFSusF4 €—r— termos um tempo de esper— de HFSs pre™is—mos de I
milhão de instruçõesF ƒe ™olo™—rmos loops en™—de—dos podemos multipli™—r
— qu—ntid—de de instruções que serão exe™ut—d—sF €—r— o˜termos um v—lor
de I milhão de instruções devemos utiliz—r pelo menos Q loops en™—de—dosF
ys v—lores dos loops são o˜tidos de m—neir— iter—tiv—F

unsigned char i D            jD kY
for @ i aHY i ` Q R Y        iCCA // 3      + 34        *   (30.003               + 3) =        1.020.207           ←
         instruçþes
{
     for @ j aHY      j ` I H H Y jCCA     // 3 + 1 0 0          *    (297 + 3) =                   30.003      ←
           instruçþes
     {
         for @ k aHY    k ` W V Y kCCA Y      //       3 + 98         *       (3)       = 297       instruçþes
     }
}

    y ™ódigo —™im— foi projet—do p—r— ger—r um —tr—so de tempo de meio
segundoF gompil—ndo e re—liz—ndo testes práti™os podemos ™on(rm—r que o
tempo re—l é —proxim—d—mente HFSI @sAF ist— dis™repân™i— —™onte™e porque
—gor— temos Q loops en™—de—dos e ™—d— qu—l ™om su— v—riável de ™ontroleF
heste modo o ™ompil—dor pre™is— s—lv—r e ™—rreg—r ™—d— v—riável p—r— re—liz—r
— ™omp—r—çãoF
    €er™e˜emos —ssim que p—r— ™onhe™er ™orret—mente o fun™ion—mento do
sistem— é ne™essárioD em —lgum—s situ—çõesD —˜rir o ™ódigo em —ssem˜ler geE
     3
     iste v—lor só é v—lido qu—ndo est—mos tr—˜—lh—ndo ™om v—riáveis ™h—rF ƒe utiliz—rmos
v—riáveis int o ™ódigo em —ssem˜ler será diferente e teremos que re—liz—r um— nov— —náliseF
   4
     xo €sgD ™—d— instrução pre™is— de R ™i™los de ™lo™kF €—r— VwrzD I ™i™lo a HFSµsF

                   Notas de Aula ELT024 - Programação para Sistemas Embarcados
33                               Linguagem C para sistemas embarcados


r—do pelo ™ompil—dor p—r— entender ™omo o este é exe™ut—doF xem sempre
o ™ompil—dor tom— —s mesm—s de™isões que nósF elém disso ele pode ger—r
otimiz—ções no ™ódigoF ixistem dois tipos de otimiz—çãoX um— vis—ndo diE
minuir o tempo de exe™ução do sistem—D deix—ndoEo m—is rápido e outr— que
reduz o t—m—nho do ™ódigo (n—lD poup—ndo esp—ço n— memóri—F
    e seguir —present—mos um exemplo de função que ger— del—ys ™om tempo
p—r—metriz—doF


void delay @ unsigned int DL A
{
  unsigned char i D j D k Y
  while @ DL −−A            // e x e c u t a   DL   vezes .
  {
    for @ i aHY i ` Q R Y iCCA                  // 3 + 34      *   (30.003    + 3) =       1.020.207     ←
                  instruçþes
          {
              for @ j aHY    j ` I H H Y jCCA         // 3 + 1 0 0   *   (297 + 3) =        30.003   ←
                    instruçþes
              {
                  for @ k aHY    k ` W V Y kCCA Y       //    3 + 98     *   (3)   = 297    instruçþes
              }
          }
     }
}



2.9           Operaçþes com bits
                        All of the books in the world contain no more information
                        than is broadcast as video in a single large American city in
                        a single year. Not all bits have equal value.                 E g—rl ƒ—g—n

xos sistem—s mi™ro™ontrol—dosD existem —lgum—s v—riáveis onde ™—d— ˜it tem
um— interpret—ção ou fun™ion—lid—de diferenteF €or isso é ne™essário re—liz—r
—lgum—s oper—ções que modi(quem —pen—s os ˜its desej—dosD m—ntendo o
rest—nte dos ˜its d— v—riável in—lter—dosF
    es oper—ções d— lingu—gem g que nos permitem tr—˜—lh—r ™om —s v—riáE
veisD lev—ndo em ™ont— os v—lores individu—is de ™—d— ˜itD são ™h—m—d—s de
˜itwise oper—tionF
    É import—nte ress—lt—r que —s oper—ções de ˜itwise possuem fun™ion—liE
d—de semelh—nte — su—s respe™tiv—s oper—ções lógi™—sF e diferenç— é que —
lógi™— oper— em ™im— d— v—riável ™omo um todo5 enqu—nto — ˜itwise oper—
˜it à ˜itF
     5
         vem˜r—r que p—r— lingu—gem g um— v—riável ™om v—lor H @zeroA represent— f—lsoD e
qualquer     outro v—lor represent— verd—deiroF



                     Notas de Aula ELT024 - Programação para Sistemas Embarcados
34                         Linguagem C para sistemas embarcados


     NOT
e oper—ção xy„ lógi™— retorn— um se o v—lor for zero e H se o v—lor for umF

                                           A !A

                                           H I
                                           I H

e oper—ção ˜itwise xy„ @oper—dor £A exe™ut— um— xy„ lógi™—F ssso signi(™—
que — oper—ção é re—liz—d— p—r— ™—d— um dos ˜its d— v—riávelD não m—is p—r—
— v—riável ™omo um todoF x— t—˜el— seguinte é —present—d— — diferenç— entre
—s du—s oper—çõesF

     Declaração                   Lógico                    Bitwise



                                                             result a ~ A Y
     char   A a IPY               result a 3 A Y             //   result    = 243
     // A = 0 b 0 0 0 0 1 1 0 0   //   result   = 0          // A = 0 b 0 0 0 0 1 1 0 0
                                                             //   r = 0 b11110011




     AND
e oper—ção exh lógi™— @oper—dor 88A retorn— H se —lgum dos v—lores for
zeroD e I se os dois v—lores forem diferentes de zeroF

                                        A B AB

                                        H H        H
                                        H I        H
                                        I H        H
                                        I I        I

e oper—ção ˜itwise exh @oper—dor 8A exe™ut— um— exh lógi™— p—r— ™—d—
p—r de ˜its e ™olo™— o result—do n— posição ™orrespondenteX

     Declaração                   Lógico                    Bitwise




     char   A a VY
                                                             result a A 8 B Y
                                                             //   result    = 0
                                  result a A 88 B Y
     char
     // A = 0 b 0 0 0 0 1 0 0 0
                                                             // A = 0 b 0 0 0 0 1 0 0 0
            B a SY                //   result   = 1
                                                             // B = 0 b 0 0 0 0 0 1 0 1
     // B = 0 b 0 0 0 0 0 1 0 1
                                                             //   r = 0 b00000000




                 Notas de Aula ELT024 - Programação para Sistemas Embarcados
35                         Linguagem C para sistemas embarcados


     OR
e oper—ção y‚ lógi™— @oper—dor ||A retorn— I se —lgum dos v—lores for difeE
rente de zeroD e H se os dois v—lores forem zeroF

                                             e f e||f
                                               H H       H
                                               H I       I
                                               I H       I
                                               I I       I

e oper—ção ˜itwise y‚ @oper—dor |A exe™ut— um— y‚ lógi™— p—r— ™—d— p—r
de ˜its e ™olo™— o result—do n— posição ™orrespondenteX

     Declaração                       Lógico                        Bitwise




     char   A a VY
                                                                     result a A | B Y
                                                                     //   result    = 13
                                      result a A | | B Y
     char
     // A = 0 b 0 0 0 0 1 0 0 0
                                                                     // A = 0 b 0 0 0 0 1 0 0 0
            B a SY                    //   result    = 1
                                                                     // B = 0 b 0 0 0 0 0 1 0 1
     // B = 0 b 0 0 0 0 0 1 0 1
                                                                     //   r = 0 b00001101




     XOR
e oper—ção ˆy‚ não possui ™orrespondente lógi™— n— lingu—gem gF ist—
oper—ção pode ser represent—d— ™omo e ˆy‚ f a @e 88 3fA||@3e 88 fA

                    e                 f              e⊕f
                    H                 H              H
                    H                 I              I
                    I                 H              I
                    I                 I              H

e oper—ção ˜itwise ˆy‚ @oper—dor ¢A exe™ut— um— ˆy‚ lógi™— p—r— ™—d—
p—r de ˜its e ™olo™— o result—do n— posição ™orrespondenteX

               Declaração                        Lógico                     Bitwise

         char    A a VY
                                                                    result a A ” B Y
                                                                    //    result   = 15

         char
         // A = 0 b 0 0 0 0 1 0 0 0
                                      //   nĂŁo    existe     em C   // A = 0 b 0 0 0 0 1 0 0 0
                 B a SY
                                                                    // B = 0 b 0 0 0 0 0 1 0 1
         // B = 0 b 0 0 0 0 0 1 0 1
                                                                    //    r = 0 b00001101




                 Notas de Aula ELT024 - Programação para Sistemas Embarcados
36                         Linguagem C para sistemas embarcados


     Shift
e oper—ção shift deslo™— os ˜its p—r— — esquerd— @oper—dor ``A ou direit—
@oper—dor bbAF É ne™essário indi™—r qu—nt—s ™—s—s serão deslo™—d—sF

     Declaração                   Shift Esquerda                      Shift Direita



                                     result a A `` P Y                result a A bb P Y
     char   A a VY                   //    result   = 32              //   result    = 2
     // A = 0 b 0 0 0 0 1 0 0 0      // A = 0 b 0 0 0 0 1 0 0 0       // A = 0 b 0 0 0 0 1 0 0 0
                                     //   r = 0 b00100000             //   r = 0 b00000010




    €—r— v—riáveis unsigned e inteir—sD est— oper—ção fun™ion— ™omo — multiE
pli™—çãoGdivisão por potên™i— de doisF g—d— shift multipli™—Gdivide por P o
v—lorF ist— é um— práti™— muito ™omum p—r— evit—r — divisão que n— m—iori—
dos sistem—s em˜—r™—dos é um— oper—ção ™—r— do ponto de vist— de tempo
de pro™ess—mentoF
      Não utilizar esta operação com o intuito de multiplicar/dividir variåveis
com ponto xo ou utuante nem variĂĄveis sinalizadas (signed).
    im divers—s o™—siões é ne™essário que tr—˜—lhemos ™om os ˜its de m—neir—
individu—lD prin™ip—lmente qu—ndo estes ˜its represent—m s—íd—s ou entr—d—s
digit—isD por exemplo ™h—ves ou ledsF
    ƒupondo que temos V leds lig—dos —o mi™ro™ontrol—dorF g—d— led é reE
present—do —tr—vés de I ˜it de um— v—riávelF €—r— lig—rmos ou deslig—rmos
—pen—s um led por vezD não —lter—ndo o v—lor dos dem—isD devemos nos utiE
liz—r de —lguns p—ssos de álge˜r— digit—lF

     Ligar um bit (bit set)
€—r— lig—r —pen—s um ˜itD utiliz—remos um— oper—ção y…F ƒupondo dois
oper—ndos e e fF ƒe e é I o result—do de @e | fA é I independente de fF ƒe
e é H o result—do é igu—l —o v—lor de fF
   ƒe o o˜jetivo é lig—r —pen—s o ˜it d— posição ˆ devemos ™ri—r um v—lor
onde tod—s —s posições são H's ™om ex™eção d— posição desej—d—F €—r— um—
más™—r— ˜inári— de x ˜its temos @xbaˆAX

                            €osição x F F F ˆCI ˆ ˆEI F F F H
                             †—lor        H FFF     H     I       H   FFF H

ƒe — oper—ção y‚ for exe™ut—d— ™om — más™—r— ™ri—d—D o result—do —preE
sent—rá v—lor I n— posição ˆ e m—nterá os v—lores —ntigos p—r— —s dem—is
posiçõesF ixemploX vig—r —pen—s o ˜it P d— v—riável €y‚„h


                 Notas de Aula ELT024 - Programação para Sistemas Embarcados
37                                     Linguagem C para sistemas embarcados




#define €y‚„h @ * @ volatile                                            unsigned char * A HxpVQ A
// d e f i n e s        para          portas       de    entrada           e    saĂ­da
                                                             ne—r
#define „‚sƒh @ * @ volatile                                 ne—r       unsigned char * A HxpWS A
void main @ void A interrupt
// i n i c i o      do          programa
                                                             H
{
  char mascara Y                                             // v a r i ĂĄ v e l      que       guarda       a   mĂĄscara
     TRISD a H x00 Y                                         // c o n f i g u r a     a    porta         D como    saĂ­da
     PORTD a H x00 Y                                         // l i g a    todos          os    leds       ( lĂłgica     negativa )
     // l i g a     o       primeiro             bit    da       variĂĄvel
     mascara a I Y                                           //    bit    = 0 b00000001
     //   r o t a c i o n a −s e            a    variável          para        que    o    bit       1    chegue   na    posição←
             desejada
     mascara a mascara `` P Y                                //    bit    = 0 b00000100
     // L i g a r       o       bit    2,       desligando          o     2o    led
     PORTD a PORTD | mascara Y

     for @ Y Y A Y
     // mantĂŠm              o    sistema          ligado          indefinidamente


}


     Desligar um bit (bit clear)
€—r— deslig—r —pen—s um ˜it o pro™edimento é simil—r —o utiliz—do p—r— lig—rF
eo invés de utiliz—rmos um— oper—ção y…D utiliz—remos um— oper—ção exhF
e oper—ção exh tem — ™—r—™terísti™— deD d—dos e e f v—lores ˜ináriosD se e
é ID — respost— de @e 8 fA será o próprio v—lor de fD se — eaHD — respost— é
zeroD independente de fF
    xov—mente é ne™essário ger—r um— más™—r—F w—s p—r— est— situ—ção el—
deve possuir todos os ˜its igu—is à um ™om ex™eção de ˆD o ˜it que queremos
deslig—rF

                                        posição x F F F ˆCI ˆ ˆEI F F F H
                                            †—lor       I FFF             I       H       I      FFF I

   ƒe — oper—ção exh for exe™ut—d— ™om — más™—r— ™ri—d—D o result—do
—present—rá v—lor H n— posição ˆ e m—nterá os v—lores —ntigos p—r— —s dem—is
posiçõesF ixemploX heslig—r —pen—s o ˜it P d— v—riável €y‚„hF


#define €y‚„h @ * @ volatile                                            unsigned char * A HxpVQ A
// d e f i n e s        para          portas       de    entrada           e    saĂ­da
                                                             ne—r
#define „‚sƒh @ * @ volatile                                 ne—r       unsigned char * A HxpWS A
void main @ void A interrupt
// i n i c i o      do          programa
                                                             H
{
  char mascara Y                                             // v a r i ĂĄ v e l      que       guarda       a   mĂĄscara
     TRISD a H x00 Y                                         // c o n f i g u r a     a    porta         D como    saĂ­da
     PORTD a H xFF Y                                         // d e s l i g a     todos         os       leds   ( lógica   ←
           negativa )




                        Notas de Aula ELT024 - Programação para Sistemas Embarcados
38                                     Linguagem C para sistemas embarcados


     // l i g a    o    primeiro             bit    da       variĂĄvel
     mascara a I Y                                       //       mascara = 0 b00000001
     //   r o t a c i o n a −s e        a    variável             para         que   o    bit   1   chegue   na   posição←
             desejada
     mascara a mascara `` P Y // m a s c a r a =                                         0 b00000100
     // i n v e r t e −s e o s v a l o r e s d e c a d a b i t
     mascara a ~ mascara Y                  // m a s c a r a =                           0 b11111011
     // D e s l i g a       o    bit    2,    ligando             o   2o       led
     PORTD a PORTD 8 mascara Y

     for @ Y Y A Y
     // mantĂŠm          o       sistema       ligado          indefinidamente


}

    É import—nte not—r que ger—mos — más™—r— de m—neir— idênti™— àquel—
utiliz—d— no ™—so —nteriorD onde todos os v—lores são zero e —pen—s o desej—do é
umF hepois re—liz—mos — inversão dos v—loresF iste pro™edimento é re—liz—do
dest— m—neir— porque não s—˜emos o t—m—nho d— p—l—vr— — ser utiliz—d— no
mi™ro™ontrol—dorX V ou IT ˜itsF wesmo —ssim devemos g—r—ntir que todos os
˜its o˜tenh—m o v—lor ™orretoD o que é g—r—ntido pel— oper—ção de neg—çãoF
e opção de ini™i—liz—r — v—riável ™om —pen—s um zero e rot—™ion—r pode não
fun™ion—r poisD n— m—iori— dos sistem—sD — função de rot—ção insere zeros à
medid— que os ˜its são deslo™—dos e pre™is—mos que —pen—s um v—lor sej—
zeroF

     Trocar o valor de um bit (bit ip)
€—r— tro™—r o v—lor de um ˜it utiliz—remos ™omo —rtifí™io —lgé˜ri™o — oper—ção
ˆy‚F h—do du—s v—riáveis ˜inári—s e e f D se e é ID o v—lor result—nte de
e ˆy‚ f é o oposto do v—lor de fD se eaHD — respost— se m—ntém igu—l —o
v—lor de fF
    €odemos per™e˜er que p—r— tro™—r o v—lor de —pen—s um ˜it — más™—r—
será idênti™— àquel— utiliz—d— p—r— lig—r um ˜itX

                                       posição x F F F ˆCI ˆ ˆEI F F F H
                                        †—lor       H FFF               H        I       H      FFF H

ƒe — oper—ção ˆy‚ for exe™ut—d— ™om — más™—r— ™ri—d—D o v—lor n— posição
ˆ será tro™—doD de zero p—r— um ou de um p—r— zeroF ixemploX „ro™—r o ˜it
P e T d— v—riável €y‚„h


#define €y‚„h @ * @ volatile                                          unsigned char * A HxpVQ A
// d e f i n e s       para       portas       de    entrada               e    saĂ­da
                                                         ne—r
#define „‚sƒh @ * @ volatile                             ne—r         unsigned char * A HxpWS A
void main @ void A interrupt
// i n i c i o     do       programa
                                                         H
{
  char mascara Y                   // v a r i ĂĄ v e l        que       guarda        a    mascara
     TRISD a H x00 Y               // c o n f i g u r a       a       porta     D como          saĂ­da



                       Notas de Aula ELT024 - Programação para Sistemas Embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados
Sistema embarcados

More Related Content

Featured

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by HubspotMarius Sescu
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTExpeed Software
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsPixeldarts
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthThinkNow
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfmarketingartwork
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data ScienceChristy Abraham Joy
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 

Featured (20)

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 

Sistema embarcados

  • 1. Notas de Aula Programação Embarcada Rodrigo Maximiano Antunes de Almeida Instituto de Engenharia de Sistemas e Tecnologia da Informação, Universidade Federal de Ita jubĂĄ, Minas Gerais, Brasil rodrigomax @ unifei.edu.br 2 de Dezembro de 2010
  • 2. ConteĂşdo 1 Introdução 1 1.1 vingu—gem g F F F F F F F F F F F F F F F F F F F F F F F F F F F P 1.2 r—rdw—re utiliz—do F F F F F F F F F F F F F F F F F F F F F F F F Q 1.3 em˜iente de progr—m—ção F F F F F F F F F F F F F F F F F F F F Q snst—l—ção F F F F F F F F F F F F F F F F F F F F F F F F R gon(gur—ção do gr—v—dor sghP F F F F F F F F F F F F U gri—ção de um novo projeto F F F F F F F F F F F F F F W 2 Linguagem C para sistemas embarcados 12 2.1 sndent—ção e p—drĂŁo de es™rit— F F F F F F F F F F F F F F F F F IP 2.2 gomentĂĄrios F F F F F F F F F F F F F F F F F F F F F F F F F F F F IR 2.3 erquivos F™ e Fh F F F F F F F F F F F F F F F F F F F F F F F F F F IS 2.4 hiretiv—s de ™ompil—ção F F F F F F F F F F F F F F F F F F F F F IS 5in™lude F F F F F F F F F F F F F F F F F F F F F F F F F IS 5de(ne F F F F F F F F F F F F F F F F F F F F F F F F F F IU 5ifdefD 5ifndefD 5else e 5endif F F F F F F F F F F F F F IV 2.5 „ipos de d—dos em g F F F F F F F F F F F F F F F F F F F F F F F PI ‚epresent—ção ˜inĂĄri— e hex—de™im—l F F F F F F F F F F PP wodi(™—dores de t—m—nho e sin—l F F F F F F F F F F F F PQ wodi(™—dores de —™esso F F F F F F F F F F F F F F F F F PR wodi(™—dores de posi™ion—mento F F F F F F F F F F F F PT wodi(™—dor de persistĂŞn™i— F F F F F F F F F F F F F F F PT 2.6 yper—ções —ritmĂŠti™—s F F F F F F F F F F F F F F F F F F F F F F PU 2.7 punção m—in@A F F F F F F F F F F F F F F F F F F F F F F F F F F PW 2.8 ‚otin—s de tempo F F F F F F F F F F F F F F F F F F F F F F F F F QI 2.9 yper—ções ™om ˜its F F F F F F F F F F F F F F F F F F F F F F F F QQ xy„ F F F F F F F F F F F F F F F F F F F F F F F F F F F F QR exh F F F F F F F F F F F F F F F F F F F F F F F F F F F F QR y‚ F F F F F F F F F F F F F F F F F F F F F F F F F F F F F QS ˆy‚ F F F F F F F F F F F F F F F F F F F F F F F F F F F F QS ƒhift F F F F F F F F F F F F F F F F F F F F F F F F F F F F QT vig—r um ˜it @˜it setA F F F F F F F F F F F F F F F F F F QT heslig—r um ˜it @˜it ™le—rA F F F F F F F F F F F F F F F F QU i
  • 3. „ro™—r o v—lor de um ˜it @˜it )ipA F F F F F F F F F F F QV †eri(™—r o est—do de um ˜it @˜it testA F F F F F F F F F QW gri—ndo funçþes —tr—vĂŠs de de(nes F F F F F F F F F F F RH 2.10 he˜ug de sistem—s em˜—r™—dos F F F F F F F F F F F F F F F F F RH ixtern—liz—r —s inform—çõesF F F F F F F F F F F F F F F F RQ €rogr—m—ção in™rement—l F F F F F F F F F F F F F F F F RR ghe™—r possĂ­veis pontos de wemoryEle—k F F F F F F F F RR guid—do ™om — fr—gment—ção d— memĂłri— F F F F F F F RR ytimiz—ção de ™ódigo F F F F F F F F F F F F F F F F F F RR ‚eproduzir e isol—r o erro F F F F F F F F F F F F F F F F RS 2.11 €onteiros e endereços de memĂłri— F F F F F F F F F F F F F F F F RS 3 Arquitetura de microcontroladores 48 3.1 e™esso Ă  memĂłri— F F F F F F F F F F F F F F F F F F F F F F F F F RV 3.2 glo™k e tempo de instrução F F F F F F F F F F F F F F F F F F F SI 3.3 isquem— elĂŠtri™o e ™ir™uitos import—ntes F F F F F F F F F F F F SQ wultiplex—ção nos termin—is do mi™ro™ontrol—dor F F F SR 3.4 ‚egistros de ™on(gur—ção do mi™ro™ontrol—dor F F F F F F F F F SR 4 Programação dos PerifĂŠricos 57 4.1 e™esso Ă s 4port—s4 do mi™ro™ontrol—dor F F F F F F F F F F F F SV 4.2 gon(gur—ção dos perifĂŠri™os F F F F F F F F F F F F F F F F F F F SW 4.3 f—rr—mento de ved's F F F F F F F F F F F F F F F F F F F F F F F TQ 4.4 hispl—y de U segmentos F F F F F F F F F F F F F F F F F F F F F F TQ wultiplex—ção de displ—ys F F F F F F F F F F F F F F F F TT gri—ção d— ˜i˜liote™— F F F F F F F F F F F F F F F F F F TU 4.5 veitur— de te™l—s F F F F F F F F F F F F F F F F F F F F F F F F F UH he˜oun™e por softw—re F F F F F F F F F F F F F F F F F F UP err—njo de leitur— por m—triz F F F F F F F F F F F F F F UQ gri—ção d— ˜i˜liote™— F F F F F F F F F F F F F F F F F F F UT 4.6 hispl—y vgh PxIT F F F F F F F F F F F F F F F F F F F F F F F F UT gri—ção d— ˜i˜liote™— F F F F F F F F F F F F F F F F F F VQ 4.7 gomuni™—ção seri—l F F F F F F F F F F F F F F F F F F F F F F F F VV ‚ƒ PQP F F F F F F F F F F F F F F F F F F F F F F F F F F F VV gri—ção d— ˜i˜liote™— F F F F F F F F F F F F F F F F F F F WP 4.8 gonversor eh F F F F F F F F F F F F F F F F F F F F F F F F F F F WS ilementos sensores F F F F F F F F F F F F F F F F F F F F WS €ro™esso de ™onversĂŁo eh F F F F F F F F F F F F F F F F WU gri—ção d— ˜i˜liote™— F F F F F F F F F F F F F F F F F F F IHH 4.9 ƒ—íd—s €‡w F F F F F F F F F F F F F F F F F F F F F F F F F F F IHQ gri—ção d— ˜i˜liote™— F F F F F F F F F F F F F F F F F F F IHR 4.10 „imer F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IHU 4.11 ‚eprodução de ƒons F F F F F F F F F F F F F F F F F F F F F F F IIH 4.12 snterrupção F F F F F F F F F F F F F F F F F F F F F F F F F F F F IIP ii
  • 4. 4.13 ‡—t™hdog F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IIU 5 Arquitetura de desenvolvimento de software 119 5.1 yne single loop F F F F F F F F F F F F F F F F F F F F F F F F F F IIW 5.2 snterrupt ™ontrol system F F F F F F F F F F F F F F F F F F F F F IPI 5.3 gooper—tive multit—sking F F F F F F F F F F F F F F F F F F F F IPQ pix—ção de tempo p—r— exe™ução dos slots F F F F F F F IPS …tiliz—ção do 4tempo livre4 p—r— interrupçþes F F F F F IPV 6 Anexos 129 6.1 ™on(gFh F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IPW 6.2 ˜—si™oFh F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IQH 6.3 snst—l—r gr—v—doresGdepur—dores de €sg em sistem—s xTR F F F IQP iii
  • 5. Lista de Figuras IFI g—m—d—s de —˜str—ção de um sistem— oper—™ion—l F F F F F F F I IFP €esquis— so˜re lingu—gens utiliz—d—s p—r— projetos de softw—re em˜—r™—do F F F F F F F F F F F F F F F F F F F F F F F F F F F F F P IFQ gon(gur—ção d—s ferr—ment—s de ™ompil—ção F F F F F F F F F F T IFR snst—l—ção do sghP F F F F F F F F F F F F F F F F F F F F F F F F U IFS ‚esumo d—s ™on(gur—ções do sghP no w€vef F F F F F F F F V IFT €roje™t ixplorer do w€vef F F F F F F F F F F F F F F F F F F W IFU gomp—r—tivo de ™—r—™terĂ­sti™—s d— f—mĂ­li— €sg IVfxxSx F F F F II PFI €ro˜lem— d—s ‚eferĂŞn™i—s gir™ul—res F F F F F F F F F F F F F F PH PFP ƒolução d—s referĂŞn™i—s ™ir™ul—res ™om 5ifndef F F F F F F F F F PI PFQ voop in(nito de um devi™e driver ger—ndo erro no sistem— F F PW PFR ixemplo de fun™ion—mento do vetor de interrupção F F F F F F QH QFI erquitetur— do mi™ro™ontrol—dor €sg IVpRSSH F F F F F F F F RW QFP wemĂłri— ™omo um —rmĂĄrio F F F F F F F F F F F F F F F F F F F SH QFQ wemĂłri— e perifĂŠri™os ™omo um —rmĂĄrio F F F F F F F F F F F F SH QFR ‚egiĂľes de memĂłri—s disponĂ­veis no €sgIVpRSSH F F F F F F F SI QFS isquem— elĂŠtri™oX wi™ro™ontrol—dor €sg IVpRSSH F F F F F F F SQ QFT ‚egistros de ™on(gur—ção do mi™ro™ontrol—dor €sg IVpRSSH F SS RFI ‚egistros de ™on(gur—ção dos perifĂŠri™os do €sg IVpRSSH F F TH RFP f—rr—mento de ved's F F F F F F F F F F F F F F F F F F F F F F F TQ RFQ hispl—y de U ƒegmentos F F F F F F F F F F F F F F F F F F F F F TR RFR hi—gr—m— elĂŠtri™o p—r— displ—y de U segmentos ™om —nodo ™omum F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F TR RFS vig—ção de R displ—ys de U segmentos multiplex—dos F F F F F F TT RFT gir™uito de leitur— de ™h—ve F F F F F F F F F F F F F F F F F F F UH RFU ys™il—ção do sin—l no momento do ™h—ve—mento F F F F F F F F UI RFV gir™uito de de˜oun™e F F F F F F F F F F F F F F F F F F F F F F F UI RFW …tiliz—ção de (ltro ‚g p—r— de˜oun™e do sin—l F F F F F F F F F UP RFIH „e™l—do em —rr—njo m—tri™i—l F F F F F F F F F F F F F F F F F F US RFII hispl—y elf—numĂŠri™o vgh PxIT F F F F F F F F F F F F F F F F UT RFIP hispl—y elf—numĂŠri™o vgh PxIT E verso F F F F F F F F F F F F UW iv
  • 6. RFIQ g—r—™teres disponĂ­veis p—r— ‚yw eHH F F F F F F F F F F F F F VI RFIR g—r—™teres disponĂ­veis p—r— ‚yw eHP F F F F F F F F F F F F F VP RFIS isquemĂĄti™o de lig—ção do displ—y de vgh F F F F F F F F F F F VR RFIT ƒin—l seri—liz—do p—r— tr—nsmissĂŁo em ‚ƒPQP F F F F F F F F F F VW RFIU vâmp—d— in™—ndes™ente F F F F F F F F F F F F F F F F F F F F F WS RFIV €oten™iĂ´metro F F F F F F F F F F F F F F F F F F F F F F F F F F F WT RFIW €oten™iĂ´metro ™omo divisor de tensĂŁo F F F F F F F F F F F F F WT RFPH gir™uito integr—do vwQS F F F F F F F F F F F F F F F F F F F F F WU RFPI hi—gr—m— de ˜lo™os do vwQS F F F F F F F F F F F F F F F F F F WV RFPP gonversor —n—lĂłgi™o digit—l de P ˜its F F F F F F F F F F F F F F WW RFPQ ƒin—is €‡w ™om v—ri—ção do duty ™y™le F F F F F F F F F F F F IHQ SFI ixemplo de mĂĄquin— de est—dos F F F F F F F F F F F F F F F F F IPQ SFP ixemplo d— mud—nç— de slots no tempo F F F F F F F F F F F F IPS SFQ vinh— de tempo de um sistem— ™om I slot F F F F F F F F F F F IPV SFR gomport—mento d— linh— de tempo ™om interrupçþes F F F F F IPV v
  • 7. Lista de Tabelas IFI ƒoftw—res utiliz—dos no ™urso F F F F F F F F F F F F F F F F F F R PFI „ipos de d—dos e f—ix— de v—lores F F F F F F F F F F F F F F F F PP PFP ‚epresent—ção de™im—l E ˜inĂĄri— E hex—de™im—l F F F F F F F F F PQ PFQ elter—ção de t—m—nho e sin—l dos tipos ˜ási™os F F F F F F F F PR PFR yper—ção ˜it set ™om de(ne F F F F F F F F F F F F F F F F F F F RI PFS yper—ção ˜it ™le—r ™om de(ne F F F F F F F F F F F F F F F F F F RI PFT yper—ção ˜it )ip ™om de(ne F F F F F F F F F F F F F F F F F F F RP PFU yper—ção ˜it test ™om de(ne F F F F F F F F F F F F F F F F F F RP QFI u—ntid—de de oper—ções e t—ref—s F F F F F F F F F F F F F F F SP RFI indereços de memĂłri— p—r— —s port—s do €sg IVpRSSH F F F F SV RFP „—˜el— de ™on(gur—ção do €sg p—r— —s experiĂŞn™i—s F F F F F F TI RFQ gonversĂŁo ˜inĂĄrio E hex—de™im—l p—r— displ—ys de U segmentos TS RFR vist— de ™om—ndos —™eitos pelo o vgh F F F F F F F F F F F F F VQ RFS „—x—s de tr—nsmissĂŁo p—r— diferentes proto™olos F F F F F F F F VV RFT gĂĄl™ulo do v—lor d— t—x— de tr—nsmissĂŁo d— port— seri—l F F F F WH RFU p—ix— de frequĂŞn™i—s mĂĄxim—s e mĂ­nim—s p—r— ™—d— ™on(guE r—ção do pres™—ler F F F F F F F F F F F F F F F F F F F F F F F F F IHR vi
  • 8. Listings PFI ‚esumo do dispUsegF™ F F F F F F F F F F F F F F F F F F F F F F IT PFP ‚esumo do dispUsegFh F F F F F F F F F F F F F F F F F F F F F F IT PFQ istrutur— de he—der F F F F F F F F F F F F F F F F F F F F F F F IW PFR yper—ções —ritmĂŠti™—s ™om tipos diferentes F F F F F F F F F F F PU RFI dispUsegF™ F F F F F F F F F F F F F F F F F F F F F F F F F F F F F TV RFP dispUsegFh F F F F F F F F F F F F F F F F F F F F F F F F F F F F F TW RFQ …tiliz—ndo — ˜i˜liote™— dispUseg F F F F F F F F F F F F F F F F F TW RFR te™l—doF™ F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F UU RFS te™l—doFh F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F UV RFT ixemplo de uso d— ˜i˜liote™— te™l—do F F F F F F F F F F F F F F UV RFU l™dF™ F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F VT RFV l™dFh F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F VU RFW ixemplo de uso d— ˜i˜liote™— de vgh F F F F F F F F F F F F F VU RFIH seri—lF™ F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F WQ RFII seri—lFh F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F WQ RFIP ixemplo de uso d— ˜i˜liote™— de ™omuni™—ção seri—l F F F F F F WR RFIQ —d™F™ F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IHI RFIR —d™Fh F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IHI RFIS ixemplo de uso d— ˜i˜liote™— de ™onversores eh F F F F F F F IHP RFIT pwmF™ F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IHS RFIU pwmFh F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IHT RFIV ixemplo de uso d— ˜i˜liote™— d—s s—íd—s €‡w F F F F F F F F IHT RFIW timerF™ F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IHV RFPH timerFh F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IHV RFPI ixemplo de uso d— ˜i˜liote™— de um temporiz—dor F F F F F F IHW RFPP ‚eprodução de sons F F F F F F F F F F F F F F F F F F F F F F F III RFPQ pontes de snterupção F F F F F F F F F F F F F F F F F F F F F F F IIR RFPR „r—t—mento d—s interrupçþes F F F F F F F F F F F F F F F F F F F IIS RFPS sni™i—liz—ção do sistem— ™om interrupçþes F F F F F F F F F F F IIT RFPT sni™i—liz—ção do sistem— ™om interrupçþes F F F F F F F F F F F IIU SFI ixemplo de —rquitetur— singleEloop F F F F F F F F F F F F F F F IPH SFP €ro˜lem— n— sin™roni— de tempo p—r— o singleEloop F F F F F F IPH SFQ ixemplo de sistem— snterruptEdriven F F F F F F F F F F F F F F IPI SFR ixemplo de sistem— snterruptEdriven ™om ˜—se de tempo F F F IPP vii
  • 9. SFS ixemplo de ™ooper—tive multit—sking F F F F F F F F F F F F F F IPR SFT ixemplo de ™ooper—tive multit—sking ™om uso do top slot F F IPT SFU ixemplo de sistem— gooper—tiveEmultit—sking ™om slot temE poriz—do F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IPU TFI ™on(gFh F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IPW TFP ˜—si™oFh F F F F F F F F F F F F F F F F F F F F F F F F F F F F F F IQI viii
  • 10. CapĂ­tulo 1 Introdução The real danger is not that computers will begin to think like men, but that men will begin to think like computers. E ƒydney tF r—rris €rogr—m—ção p—r— sistem—s em˜—r™—dos exige um— sĂŠrie de ™uid—dos espeE ™i—isD pois estes sistem—s ger—lmente possuem restriçþes de memĂłri— e proE ™ess—mentoF €or se tr—t—r de sistem—s ™om funçþes espe™í(™—sD —s rotin—s e té™ni™—s de progr—m—ção diferem d—quel—s us—d—s p—r— projetos de —pli™—tiE vos p—r— desktopsF „—m˜ém ĂŠ ne™essĂĄrio ™onhe™er m—is — fundo o h—rdw—re que serĂĄ utiE liz—doD pois ™—d— mi™ropro™ess—dor possui um— —rquitetur— diferenteD ™om qu—ntid—de e tipos de instruçþes diversosF €rogr—m—dores volt—dos p—r— desktops nĂŁo pre™is—m se —ter t—nto — estes itensD pois eles progr—m—m p—r— um sistem— oper—™ion—l que re—liz— o p—pel de tr—dutorD disponi˜iliz—ndo um— interf—™e ™omumD independente do h—rdw—re utiliz—do@pigur— IFIAF Aplicação Sistema Operacional Firmware Hardware pigur— IFIX g—m—d—s de —˜str—ção de um sistem— oper—™ion—l €—r— sistem—s em˜—r™—dosD ĂŠ ne™essĂĄrio progr—m—r espe™i(™—mente p—r— I
  • 11. 2 Introdução o h—rdw—re em questĂŁoF …m— opção p—r— se o˜ter —rti(™i—lmente est— ™—E m—d— de —˜str—ção que er— ger—d— pelo sistem— oper—™ion—l ĂŠ — utiliz—ção de dois itensX um ™ompil—dor prĂłprio p—r— o ™omponente em questĂŁo e um— ˜i˜liote™— de funçþesF y ™ompil—dor serĂĄ o responsĂĄvel por tr—duzir — linE gu—gem de —lto nĂ­vel em um— lingu—gem que o mi™ro™ontrol—dor ™onsegue entenderF e ˜i˜liote™— de funçþesD ou fr—meworkD em ger—lD ĂŠ disponi˜iliz—d— pelos f—˜ri™—ntes do mi™ro™ontrol—dorF 1.1 Linguagem C C is quirky, awed, and an enormous success. E hennis wF ‚it™hie xeste ™urso serĂĄ utiliz—d— — lingu—gem gF ist— ĂŠ um— lingu—gem ™om divers—s ™—r—™terĂ­sti™—s que — torn—m um— ˜o— es™olh— p—r— o desenvolvimento de softw—re em˜—r™—doF epes—r de ser um— lingu—gem de —lto nĂ­velD permite —o progr—m—dor um —™esso direto —os dispositivos de h—rdw—reF „—m˜ém ĂŠ — es™olh— d— m—iori— dos progr—m—dores e gerentes de projetos no que ™on™erne —o desenvolvimento de sistem—s em˜—r™—dos ™omo pode ser visto n— pigur— IFPF pigur— IFPX €esquis— so˜re lingu—gens utiliz—d—s p—r— projetos de softw—re em˜—r™—do Fonte: http://www.embedded.com/design/218600142 e des™ontinuid—de depois de PHHR se dĂĄ devido Ă  mud—nç— de metodologi— d— pesquis—F entes de PHHSD — pergunt— formul—d— er—X €—r— o desenvolE vimento d— su— —pli™—ção em˜—r™—d—D qu—is d—s lingu—gens vo™ê usou nos Ăşltimos IP mesescF im PHHS — pergunt— se tornouX weu projeto em˜—rE ™—do —tu—l ĂŠ progr—m—do prin™ip—lmente em ••••••F wĂşltipl—s seleçþes er—m possĂ­veis —ntes de PHHSD permitindo — som— superior — IHH7D sendo o v—lor mĂŠdio de PHW7D o que impli™— que — m—iori— d—s pesso—s es™olheu du—s ou m—is opçþesF Notas de Aula ELT024 - Programação para Sistemas Embarcados
  • 12. 3 Introdução y m—ior imp—™to n— pesquis— pode ser visu—liz—do n— lingu—gem —ssemE ˜lerX —tĂŠ PHHRD est—v— presente em TP7 d—s respost—s @n— mĂŠdi—AF y que ™omprov— que pr—ti™—mente todo projeto de sistem— em˜—r™—do exige um pou™o de —ssem˜lerF ho mesmo modoD per™e˜emos que —tu—lmente pou™os projetos sĂŁo re—liz—dos tot—lmente ou em su— m—iori— em —ssem˜lerD um— mĂŠdi— de —pen—s U7F 1.2 Hardware utilizado People who are really serious about software should make their own hardware. E el—n u—y gomo o enfoque deste ™urso ĂŠ — progr—m—ção de sistem—s em˜—r™—dos e nĂŁo — eletrĂ´ni™—D utiliz—remos um kit de desenvolvimento prontoD ˜—se—do num mi™ro™ontrol—dor €sgF gomo perifĂŠri™os disponĂ­veis temosX ˆ I displ—y vgh P linh—s por IT ™—r—™teres @™omp—tĂ­vel ™om rhUURVHA ˆ R displ—ys de U segmentos ™om ˜—rr—mento de d—dos ™omp—rtilh—dos ˆ V leds lig—dos —o mesmo ˜—rr—mento dos displ—ys ˆ IT mini swit™hes org—niz—d—s em form—to m—tri™i—l RxR ˆ I sensor de temper—tur— vwQSg ˆ I resistĂŞn™i— de —que™imento lig—d— — um— s—íd— €‡w ˆ I motor hg tipo lig—do ventil—dor — um— s—íd— €‡w ˆ I ˜uzzer lig—do — um— s—íd— €‡w ˆ I ™—n—l de ™omuni™—ção seri—l p—drĂŁo ‚ƒEPQP g—d— ™omponente terĂĄ seu fun™ion—mento ˜ási™o expli™—do p—r— permitir o desenvolvimento de rotin—s p—r— estesF 1.3 Ambiente de programação First, solve the problem. Then, write the code. E tohn tohnE son y —m˜iente utiliz—do serĂĄ o w€vef@‚AF iste ĂŠ um —m˜iente de desenvolE vimento disponi˜iliz—do pel— wi™ro™hip@‚A gr—tuit—menteF y ™ompil—dor utiliz—do serĂĄ o ƒhggD os linkers e —ssem˜lers serĂŁo disponi˜iliz—dos pel— ˜i˜liote™— q€…tilsF Notas de Aula ELT024 - Programação para Sistemas Embarcados
  • 13. 4 Introdução gomo o fo™o ĂŠ — —prendiz—gem de ™on™eitos so˜re progr—m—ção em˜—rE ™—d— poderĂĄ ser utiliz—d— qu—lquer pl—t—form— de progr—m—ção e qu—lquer ™ompil—dorGlinkerF g—so sej— utiliz—do qu—lquer ™onjunto de ™ompil—dorGlinE ker diferentes deveEse prest—r —tenção —pen—s n—s diretiv—s p—r— gr—v—çãoF €—r— — progr—m—ção em —m˜iente vinux re™omend—Ese o uso d— suĂ­te €suvef ISFIHF iste progr—m— foi desenvolvido p—r— uhi QFSF elĂŠm de permitir — integr—ção ™om o mesmo ™ompil—dor utiliz—do neste ™urso permite — progr—m—ção do mi™ro™ontrol—dor utiliz—ndo o progr—m—dor sghP vi— …ƒfF Instalação e „—˜el— IFI —present— os softw—res que serĂŁo utiliz—dos no ™ursoF „—˜el— IFIX ƒoftw—res utiliz—dos no ™urso Item VersĂŁo Licença shi w€vef VFSH €roprietĂĄrio gompil—dor ƒhgg PFWFHH @winQPA q€v vinkerGessem˜ler q€…tils HFIQFU @winQPA q€v €lugin w€vef sd™™Empl—˜ HFI q€v „odos os softw—res sĂŁo gr—tuitos e estĂŁo disponĂ­veis n— internetF €—r— ™orE ret— inst—l—ção deveEse inst—l—r os softw—res segundo — sequĂŞn™i— —present—d— n— „—˜el— IFIF enote o diretĂłrio onde ™—d— softw—re foi inst—l—doF epĂłs — inst—l—ção dos softw—res deveEse —˜rir o —rquivo pi™ITdevi™esFtxt @de preferĂŞn™i— no wordp—dA que foi inst—l—do no diretĂłrio do ƒhgg dentro d— p—st— in™lude’pi™IT @por p—drĂŁo gX’erquivos de progr—m—s’ƒhgg’in™lude’pi™ITAF €ro™ure — seguintes linh—sX name 18f4550 using 18f2455 „ro™—r — letr— f minĂşs™ul— d— primeir— linh—D —pen—s do IVfRSSHD p—r— um p m—iĂşs™uloX name 18F4550 using 18f2455 epĂłs isto —˜rir — p—st— onde foi inst—l—do o w€vef @por p—drĂŁoX gX’erquivos de progr—m—s’wi™ro™hip’w€vef shiAF e˜rir — p—st— gore’w„g ƒuitesF e˜rir os —rquivos sd™™linkFmt™ e gplinkFmt™ num editor de textoF ep—E g—r o ™onteĂşdo do —rquivo sd™™linkFmt™F gopi—r todo ™onteĂşdo do —rquivo gplinkFmt™ p—r— o —rquivo sd™™linkFmt™F ƒ—lv—rF Notas de Aula ELT024 - Programação para Sistemas Embarcados
  • 14. 5 Introdução epĂłs o p—sso —™im— o —rquivo sd™™linkFmt™ deverĂĄ ™onter o seguinte textoX // Microchip Language Tools // Configuration File // gplink // Craig Franklin [5] [Tool] Description=Library directories Tool=gplink Switch=-I ScriptExtension=lkr Data=1 DefaultOptions= MultipleOptions=0 MultipleNodes=1 LibrarySwitch=Switch SpaceBetweenSwitchAndData=1 Hidden=1 [0] [6] Description=Output filename Description=Linker script directories Switch=-o Switch=-I Data=1 Data=1 MultipleOptions=0 MultipleOptions=0 OutputNameSwitch=Switch LinkerScriptSwitch=Switch Hidden=1 Hidden=1 [1] [7] Description=Map file Description=Use Shared Memory Switch=-m Switch=-r Data=0 Data=0 MultipleOptions=0 [8] [2] Description=Fill Value Description=COFF File Switch=-f Switch=-c MultipleOptions=0 Data=0 Data=1 MultipleOptions=0 [9] [3] Description=Stack Size Description=Hex Format Switch=-t OptionList=INHX8M;INHX8S;INHX32 MultipleOptions=0 INHX8M=-a INHX8M Data=1 INHX8S=-a INHX8S [10] INHX32=-a INHX32 Description=No List File Data=0 switch=-l [4] Data=0 Description=Quiet mode Switch=-q Data=0 im seguid— —˜rir o progr—m— w€vef e ir —o menu €roje™ts Eb ƒet v—nE gu—ge „ool vo™—tionsF ƒerĂĄ —present—d— um— tel— simil—r — d— pigur— IFQF ƒele™ione — ferr—ment— ƒm—ll hevi™e g gompiler for €sgIT @ƒhggITAF ixp—nd— — opção ixe™ut—˜lesF e ferr—ment— gp—sm e gplink sĂŁo o˜tiE d—s no diretĂłrio ˜in dentro de onde foi inst—l—do o q€…tils @por p—drĂŁoX gX’erquivos de progr—m—s’gputils’˜inAF e ferr—ment— sd™™IT ĂŠ en™ontr—d— Notas de Aula ELT024 - Programação para Sistemas Embarcados
  • 15. 6 Introdução pigur— IFQX gon(gur—ção d—s ferr—ment—s de ™ompil—ção Notas de Aula ELT024 - Programação para Sistemas Embarcados
  • 16. 7 Introdução no diretĂłrio ˜in dentro do diretĂłrio onde foi inst—l—do o ƒhgg @por p—E drĂŁoX gX’erquivos de progr—m—s’ƒhgg’˜in’AF gli™—r em yuF epĂłs estes p—ssos — suĂ­te w€vef estĂĄ pront— p—r— tr—˜—lh—r ™om o ™ompil—dor ƒhggCq€…tilsF Conguração do gravador ICD2 epĂłs inst—l—r o w€vef jĂĄ ĂŠ possĂ­vel f—zer — inst—l—ção e ™on(gur—ção do gr—v—dor ou depur—dor sghPF gone™teEo — qu—lquer port— …ƒf e —gu—rde — tel— de inst—l—ção do ‡indowsF im —lgum—s versĂľes do windows pode —™onte™er de vo™ê ser pergunt—do se desej— inst—l—r um softw—re nĂŁo —ssin—do digit—lmenteD ™erti(queEse que — versĂŁo do (rmw—re ĂŠ pelo menos IFHFHFH d— f—˜ri™—nte wi™ro™hipD ™onforme pode ser visto n— pigur— IFR e —v—n™eF pigur— IFRX snst—l—ção do sghP epĂłs o termino d— inst—l—ção —˜r— o progr—m— w€vef p—r— ™on(gur—r o gr—v—dor ou depur—dorF †á —o menu €rogr—mmer Eb ƒele™t €rogr—mmer Eb w€vef sgh PF †á nov—mente —o menu €rogr—mmer m—s dest— vez es™olh— — opção w€vef sgh P ƒetup ‡iz—rdF xo wiz—rdD es™olh— — ™omuni™—ção ™omo …ƒf e depois dig— que — pl—™— possui —liment—ção independente „—rget h—s own power supplyF heixe —s outr—s opçþes n— seleção p—drĂŁoF entes de ™li™—r em ™on™luir veri(que —o (n—l se o resumo se p—re™e ™om o d— pigur— IFSF Notas de Aula ELT024 - Programação para Sistemas Embarcados
  • 17. 8 Introdução pigur— IFSX ‚esumo d—s ™on(gur—ções do sghP no w€vef Notas de Aula ELT024 - Programação para Sistemas Embarcados
  • 18. 9 Introdução Criação de um novo projeto ‚e™omend—Ese — utiliz—ção do —ssistente disponĂ­vel p—r— — ™ri—ção de um novo projeto @menu €roje™t Eb €roje™t ‡iz—rdAF ile irĂĄ question—r so˜re @entre p—rĂŞnteses os v—lores —dot—dos neste ™ursoAX IF O microcontrolador a ser utilizado (PIC18F4550) PF A suĂ­te de compilação (SDCC 16) QF O diretĂłrio e nome do projeto RF Arquivos jĂĄ existentes cujo programador deseja incluir no projeto epĂłs estes p—ssos o projeto est—rĂĄ ™ri—doF g—so — list— de —rquivos do projeto nĂŁo estej— visĂ­vel vĂĄ —o menu †iew Eb €roje™tF €—r— — ™ri—ção de um novo —rquivo vĂĄ —tĂŠ o menu pile Eb xewF xeste novo —rquivo digite —lgum— ™ois— e s—lveEoF g—so sej— o —rquivo que ™onterĂĄ — função prin™ip—l @m—inA ĂŠ ™ostume s—lvĂĄElo ™om o nome de 4m—inF™4F e ™—d— novo —rquivo ™ri—do ĂŠ ne™essĂĄrio inserĂ­Elo no projetoF €—r— isso deveEse ™li™—r n— p—st— ™orrespondente —o tipo de —rquivo que se desej— in™luir e em seguid— 4edd piles4 ™omo pode ser visu—liz—do n— pigur— IFTF pigur— IFTX €roje™t ixplorer do w€vef elĂŠm dos —rquivos ™ri—dos pelo progr—m—dorD existem trĂŞs —rquivos que devem ser —di™ion—dos —o projetoX um de linker e dois de ˜i˜liote™—sF IF Linker @—A C:Arquivos de programasgputilslkr18f4550.lkr PF Bibliotecas Notas de Aula ELT024 - Programação para Sistemas Embarcados
  • 19. 10 Introdução @—A C:Arquivos de programasSDCClibpic16libdev18f4550.lib @˜A C:Arquivos de programasSDCClibpic1618f4550.lkr y —rquivo de linker ĂŠ o responsĂĄvel por indi™—r qu—is sĂŁo os esp—ços de memĂłri— disponĂ­veis no ™hip utiliz—doD onde ™omeç—m e de que tipo sĂŁo @‚ewD ‚ywD pl—shA et™F // File: 18f4550.lkr // Sample linker script for the PIC18F4550 processor // Not intended for use with MPLAB C18. For C18 projects, // use the linker scripts provided with that product. LIBPATH . CODEPAGE NAME=page START=0x0 END=0x7FFF CODEPAGE NAME=idlocs START=0x200000 END=0x200007 PROTECTED CODEPAGE NAME=config START=0x300000 END=0x30000D PROTECTED CODEPAGE NAME=devid START=0x3FFFFE END=0x3FFFFF PROTECTED CODEPAGE NAME=eedata START=0xF00000 END=0xF000FF PROTECTED ACCESSBANK NAME=accessram START=0x0 END=0x5F DATABANK NAME=gpr0 START=0x60 END=0xFF DATABANK NAME=gpr1 START=0x100 END=0x1FF DATABANK NAME=gpr2 START=0x200 END=0x2FF DATABANK NAME=gpr3 START=0x300 END=0x3FF DATABANK NAME=usb4 START=0x400 END=0x4FF PROTECTED DATABANK NAME=usb5 START=0x500 END=0x5FF PROTECTED DATABANK NAME=usb6 START=0x600 END=0x6FF PROTECTED DATABANK NAME=usb7 START=0x700 END=0x7FF PROTECTED ACCESSBANK NAME=accesssfr START=0xF60 END=0xFFF PROTECTED €er™e˜emos pelo linker —™im— que existem PST ˜ytes de memĂłri— eepromD nĂŁo volĂĄtilD que foi denomin—d— eed—t—F €—r— — memĂłri— ‚ew estĂĄ reserv—do um tot—l de P k˜ytesD divididos1 em R ˜—n™os de memĂłri—D sendo que o primeiro foi dividido em du—s seçþesF istes for—m denomin—dos @—™essr—mE gprHAD gprID gprPD gprQ2 F €—r— o progr—m— temos disponĂ­vel um— regiĂŁo de QP k˜ytes de memĂłri— )—shD que v—i d— posição HxHHHH —tĂŠ HxUpppF iste ĂŠ o mesmo endereço d— memĂłri— ‚ewF xĂŁo existe ™on)itoD pois est—mos tr—˜—lh—ndoD no ™—so do €sgD ™om um— —rquitetur— r—rv—rdF xest— existem dois ˜—rr—mentos e du—s memĂłri—s diferentesX um— p—r— o progr—m—D denomin—d— gyhi€eqi no 1 …m— d—s m—iores di(™uld—des en™ontr—d—s em se ™onstruir um ™ompil—dor de lingu—E gem g ĂŠ o g—sto em termos de re™ursos ™omput—™ion—is que ĂŠ dispendido p—r— tr—t—r estes qu—tro ˜—n™os ™omo sequĂŞn™i—isF x— re—lid—de eles estĂŁo todos so˜re um mesmo endereço de memĂłri—F €—r— —™ess—r ™—d— um deles ĂŠ ne™essĂĄrio —tu—r so˜re um registro no €sgD indi™—ndo qu—l ˜—n™o est—rĂĄ —tivo n—quele momentoF 2 gprˆ signi(™— qener—l €ropouse ‚—m ˜—nk ˆ Notas de Aula ELT024 - Programação para Sistemas Embarcados
  • 20. 11 Introdução linkerD e um— p—r— os d—dosD denomin—d— he„efexuF xot—r que —pes—r d— memĂłri— eeprom ser utiliz—d— p—r— —rm—zen—mento nĂŁo volĂĄtil de d—dosD el— estĂĄ m—pe—d— no ˜—rr—mento de ™ódigoF ssto se deve — ™onstrução intern— do mi™ro™ontrol—dorF ys d—dos —present—dos no linker e des™orridos —nteriormente podem ser veri(™—dos e ™omp—r—dos ™om outros modelos o˜serv—ndo — pigur— IFUF pigur— IFUX gomp—r—tivo de ™—r—™terĂ­sti™—s d— f—mĂ­li— €sg IVfxxSx Notas de Aula ELT024 - Programação para Sistemas Embarcados
  • 21. CapĂ­tulo 2 Linguagem C para sistemas embarcados C is quirky, awed, and an enormous success. E hennis wF ‚it™hie e progr—m—ção p—r— sistem—s em˜—r™—dos possui divers—s ™—r—™terĂ­sti™—s diE ferentes d— progr—m—ção volt—d— p—r— desktopF ho mesmo modoD existem —lguns ™on™eitos que ger—lmente nĂŁo sĂŁo explor—dos nos ™ursos de lingu—gens de progr—m—ção em g m—s que sĂŁo essen™i—is p—r— o ˜om desenvolvimento deste ™ursoF istes ™on™eitos serĂŁo expl—n—dos neste ™—pĂ­tuloF 2.1 Indentação e padrĂŁo de escrita Good programmers use their brains, but good guidelines save us having to think out every case. E pr—n™is ql—ss˜orow É fund—ment—l o˜ede™er um p—drĂŁo p—r— es™rit— de progr—m—sD de modo que — visu—liz—ção do ™ódigo sej— f—™ilit—d—F x— lĂ­ngu— portugues— utiliz—mos p—rĂĄgr—fos p—r— delimit—r ˜lo™os de fr—E ses que possuem — mesm— idei—F im lingu—gem g estes ˜lo™os sĂŁo delimit—dos por ™h—ves { e }F €—r— demonstr—r —o leitor que um p—rĂĄgr—fo ™omeçou utiliz—mos um re™uo Ă  direit— n— primeir— linh—F u—ndo ĂŠ ne™essĂĄrio re—liz—r um— ™it—ção de itens ™olo™—Ese ™—d— um destes itens num— linh— re™u—d— Ă  direit—D —lgum—s vezes ™om um identi(™—dor ™omo um tr—ço E ou set— Eb p—r— f—™ilit—r — identi(™—ção visu—lF gom esse mesmo intuito utiliz—Ese re™uos e esp—ç—mentos p—r— que o ™ódigo sej— m—is f—™ilmente entendidoF gomo todo ˜lo™o de ™om—ndos ĂŠ ini™i—do e termin—do ™om um— ™h—veD tornouEse ™omum que est—s @—s ™h—vesA estej—m no mesmo nĂ­vel e todo ™ódigo interno — el—s sej— deslo™—do Ă  direit—F ƒe existir um segundo ˜lo™o interno IP
  • 22. 13 Linguagem C para sistemas embarcados —o primeiroD este deve ser deslo™—do du—s vezes p—r— indi™—r — hier—rqui— no )uxo do progr—m—F ƒegue —˜—ixo um exemplo de um mesmo ™ódigo ™om diferenç— —pen—s n— indent—çãoF gĂłdigo indent—do gĂłdigo nĂŁo indent—do I void main @ void A interrupt H void main @ void A interrupt H { { unsigned int i Y unsigned int i Y unsigned int temp Y unsigned int temp Y unsigned int teclanova aHY unsigned int teclanova aHY InicializaSerial @ A Y InicializaSerial @ A Y InicializaDisplays @ A Y InicializaDisplays @ A Y InicializaLCD @ A Y InicializaLCD @ A Y InicializaAD @ A Y InicializaAD @ A Y for @YYA for@YYA { { AtualizaDisplay @ A Y AtualizaDisplay @ A Y if @ teclanova 3a Tecla A if @ teclanova 3a Tecla A { { teclanova a Tecla Y teclanova a Tecla Y for @ i aHY i `ITY iCCA for@ i aHY i `ITY iCCA { { if @ BitTst @ Tecla D i A A if @ BitTst @ Tecla D i A A { { EnviaDados @ i CRVA Y EnviaDados @ i CRVA Y } } } } } } for @ i a H Y i ` I H H H Y iCCA Y for@ i a H Y i ` I H H H Y iCCA Y } } } } €odemos not—r pelo ™ódigo —nterior que —quele que possui ident—ção f—™iE lit— n— veri(™—ção de qu—is instruçþesGrotin—s estĂŁo su˜ordin—d—s Ă s dem—isF yutr— ™—r—™terĂ­sti™— de p—droniz—ção est— n— ™ri—ção de nomes de funçþes e de v—riĂĄveisF €el— lingu—gem g um— função ou v—riĂĄvel pode ter qu—lquer nome desde queX sej— ini™i—d— por um— letr—D m—iĂşs™ul— ou minĂşs™ul—D e os dem—is ™—r—™teres sej—m letr—sD nĂşmeros ou unders™ore •F e lingu—gem g permite t—m˜ém que sej—m de™l—r—d—s du—s v—riĂĄveis ™om mesmo nome ™—so possu—m letr—s diferentes —pen—s qu—nto ™—ix— @m—iĂşs™ul— ou minĂşs™ul—AF €or exemploX v—r e ver sĂŁo v—riĂĄveis distint—sD o que pode ger—r erro no desenvolvimento do progr—m— ™—us—ndo dĂşvid—s e erros de digit—çãoF €or isso ™onven™ion—Ese que nome de v—riĂĄveis sej—m es™ritos —pen—s em minĂşs™ul—sF u—ndo o nome ĂŠ ™ompostoD se utiliz— um— m—iĂşs™ul— p—r— Notas de Aula ELT024 - Programação para Sistemas Embarcados
  • 23. 14 Linguagem C para sistemas embarcados diferen™iĂĄElos ™omo por exemplo —s v—riĂĄveis ™ont€os e ™ont„ot—lF xomes de função serĂŁo es™ritos ™om — primeir— letr— m—iĂşs™ul— e no ™—so de nome ™ompostoD ™—d— ini™i—l serĂĄ gr—f—d— em m—iĂşs™uloX sni™i—liz—„eE ™l—do@AD €—r—ƒistem—@AF „—gs de de(niçþes @utiliz—dos em ™onjunto ™om — diretiv— 5de(neA serĂŁo gr—f—dos ex™lusiv—mente em m—iĂşs™uloX x…wi‚yhi†yv„eƒD gyxƒ„E q‚e†s„egsyxevF g—d— ™h—ve serĂĄ ™olo™—d— num— Ăşni™— linh—D ™onforme exemplo —nteriorD evit—ndoEse ™onstruçþes do tipoX if @ PORTA aa H x30 A { PORTB a H x10 Y } yu if @ PORTA aa H x30 A { PORTB a H x10 Y } es regr—s —present—d—s vis—m forne™er um— identid—de visu—l —o ™ódigoF „—is regr—s nĂŁo sĂŁo —˜solut—sD servem —pen—s p—r— o ™ontexto dest— —postil—F im ger—lD ™—d— instituição ou projeto possui seu prĂłprio ™onjunto de norm—sF É import—nte ter ™onhe™imento deste ™onjunto e —pli™áElo em seu ™ódigoF y estilo —dot—do nest— —postil— ĂŠ ™onhe™ido t—m˜ém ™omo estilo ellm—nD ˜sd @no em—™sA ou exƒsD jĂĄ que todos os do™umentos do p—drĂŁo exƒs g utiliz—m este estiloF epes—r disto o p—drĂŁo exƒs g nĂŁo espe™i(™— um estilo p—r— ser us—doF 2.2 ComentĂĄrios If the code and the comments disagree, then both are probably wrong. E xorm Īhryer gomentĂĄrios sĂŁo textos que introduzimos no meio do progr—m— fonte ™om — intenção de tornĂĄElo m—is ™l—roF É um— ˜o— prĂĄti™— em progr—m—ção inserir ™omentĂĄrios no meio dos nossos progr—m—sF €odeEse ™oment—r —pen—s um— linh— us—ndo o sĂ­m˜olo GG @du—s ˜—rr—sAF €—r— ™oment—r m—is de um— linh— us—Ese o sĂ­m˜olo GB @˜—rr— e —steris™oA —ntes do ™omentĂĄrio e BG @—steris™o e ˜—rr—A p—r— indi™—r o (n—l do ™omentĂĄrioF #include `s t d i o F hb #define hsƒ„ PTH int main @ int argc D char * // distancia entre SP e Ita argv ‘ “ A { /* esse programa serve para mostrar como se insere comentĂĄrios */ printf @ SĂŁo Paulo estĂĄ %d Km de ItajubĂĄ D DIST A Y return HY Notas de Aula ELT024 - Programação para Sistemas Embarcados
  • 24. 15 Linguagem C para sistemas embarcados } 2.3 Arquivos .c e .h x— progr—m—ção em lingu—gem g utiliz—mos dois tipos de —rquivos ™om funE çþes distint—sF „od— implement—ção de ™ódigo ĂŠ feit— no —rquivo ™om exE tensĂŁo F™ @code AF É nele que ™ri—mos —s funçþesD de(nimos —s v—riĂĄveis e re—liz—mos — progr—m—ção do ™ódigoF ƒe existem dois —rquivos F™ no projeto e queremos que um deles poss— us—r —s funçþes do outro —rquivoD ĂŠ ne™essĂĄrio re—liz—r um 5in™ludeF ys —rquivos Fh @header A tem ™omo função ser um espelho dos —rquivos F™ disponi˜iliz—ndo —s funçþes de um —rquivo F™ p—r— serem utiliz—d—s em outros —rquivosF xele ™olo™—mos todos os protĂłtipos d—s funçþes que queremos que os outros —rquivos usemF ƒe quisermos que um— função sĂł poss— ser utiliz—d— dentro do prĂłprio —rE quivoD por motivo de segur—nç— ou org—niz—çãoD ˜—st— de™l—r—r seu protĂłtipo e€ixeƒ no —rquivo F™F ƒe for ne™essĂĄrio que um —rquivo lei— eGou gr—ve num— v—riĂĄvel de outro —rquivo ĂŠ re™omend—do ™ri—r funçþes espe™í(™—s p—r— t—l (n—lid—deF y progr—m— PFI —present— um exemplo de um —rquivo de ™ódigo F™ e o progr—m— PFP —present— o respe™tivo —rquivo de he—der FhF €odemos not—r que no —rquivo Fh — função etu—liz—hispl—y@A nĂŁo estĂĄ presenteD deste modo el— nĂŁo est—rĂĄ disponĂ­vel p—r— os outros —rquivosF €oE demos not—r t—m˜ém que p—r— ler ou gr—v—r — v—riĂĄvel digito ĂŠ ne™essĂĄrio utiliz—r —s funçþes wud—rhigito@A e verhigito@AF xot—r que nĂŁo existe —™esso direto Ă s v—riĂĄveisF iste tipo de —˜ord—gem insere —tr—sos no pro™ess—mento devido Ă  um efeito ™onhe™ido ™omo overhe—d de funçþesD podendo in™lusive ™—us—r tr—v—mentos no sistem— ™—so nĂŁo exist— esp—ço su(™iente no st—™kF 2.4 Diretivas de compilação es diretiv—s de ™ompil—ção sĂŁo instruçþes que sĂŁo d—d—s —o ™ompil—dorF il—s nĂŁo serĂŁo exe™ut—d—sF „od—s —s diretiv—s de ™ompil—ção ™omeç—m ™om um sin—l 5D ™onhe™ido ™omo jogo d— velh— ou h—shF #include e diretiv— de ™ompil—ção 5in™lude ĂŠ — responsĂĄvel por permitir que o proE gr—m—dor utilize no seu ™ódigo funçþes que for—m implement—d—s em outros —rquivosD sej— por ele prĂłprio ou por outr—s pesso—sF xĂŁo ĂŠ ne™essĂĄrio posE suir o ™ódigo fonte d—s funçþes que se desej— utiliz—rF É ne™essĂĄrio —pen—s de um —rquivo que indique os protĂłtipos d—s funçþes @™omo el—s devem ser ™h—m—d—sA e possuir — função disponĂ­vel em su— form— ™ompil—d—F Notas de Aula ELT024 - Programação para Sistemas Embarcados
  • 25. 16 Linguagem C para sistemas embarcados visting PFIX ‚esumo do dispUsegF™ I static char temp Y // v a r i ĂĄ v e l usada apenas dentro deste arquivo P Q static char valor Y // v a r i ĂĄ v e l que serĂĄ usada tambĂŠm fora do arquivo R S void MudaDigito @ char // f u n ç Ăľ e s usadas dentro e fora do arquivo T val A U { V valor a val Y W } IH char LerDigito @ void A II { IP return valor Y IQ } IR void InicializaDisplays @ void A IS { IT // c Ăł d i g o da função IU } IV void void A // f u n ç ĂŁ o usada apenas dentro deste arquivo IW AtualizaDisplay @ PH { PI // c Ăł d i g o da função PP } visting PFPX ‚esumo do dispUsegFh I #ifndef †e‚•r P 5define VAR_H Q void MudaDigito @ char val A Y R char LerDigito @ void A Y S void InicializaDisplays @ void A Y T #endif //VAR_H Notas de Aula ELT024 - Programação para Sistemas Embarcados
  • 26. 17 Linguagem C para sistemas embarcados im ger—l um —rquivo que possui —pen—s protĂłtipos de funçþes ĂŠ denomiE n—do de re—der e possui — extensĂŁo FhF #dene yutr— diretiv— muito ™onhe™id— ĂŠ — 5de(neF qer—lmente ĂŠ utiliz—d— p—r— de(nir um— ™onst—nte m—s pode ser utiliz—d— p—r— que o ™ódigo fonte sej— modi(™—do —ntes de ser ™ompil—doF ‚esult—do n— yrigin—l gompil—do „el— #define gyxƒ„ IS void main @ void A void main @ void A { { RS printf @ %d D CONST * ← printf @ %d D IS * Q A Y QA Y } } ‚esult—do n— punção yrigin—l ypçþes de uso ™om o 5de(ne „el— void MostraSaidaPadrao @ A { 5ifdef PADRAO Serial #include `s t d i o F hb char * msg a ← #define €eh‚ey ƒ e r i — l SERIAL Y void main @ void A 5else { SERIAL char * msg a LCD Y MostraSaidaPadrao @ A Y 5endif } printf @ msg A Y } #include `s t d i o F hb #define €eh‚ey vgh void main @ void A LCD { MostraSaidaPadrao @ A Y } €elo ™ódigo —present—do per™e˜emos que — mesm— função wostr—ƒ—id—€—E dr—o@AD —present— result—dos diferentes dependendo de ™omo foi de(nid— — Notas de Aula ELT024 - Programação para Sistemas Embarcados
  • 27. 18 Linguagem C para sistemas embarcados opção €eh‚eyF ys de(nes t—m˜ém —jud—m — f—™ilit—r — lo™—liz—ção dos dispositivos e —just—r —s ™on(gur—ções no mi™ro™ontrol—dorF „odo perifĂŠri™o possui um ou m—is endereços p—r— os qu—is ele respondeF istes endereços podem v—ri—r in™lusive dentro de um— mesm— f—mĂ­li—F €or exemplo o endereço d— port— h @onde estĂŁo lig—dos os ledsA ĂŠ HxpVQF €—r— lig—r ou deslig—r um led ĂŠ pre™iso —lter—r o v—lor que est— dentro do endereço HxpVQF €—r— f—™ilit—r este pro™edimentoD ĂŠ de(nido um ponteiro p—r— este endereço e rotul—do ™om o nome €y‚„hF he(nir ypp ™omo H e yx ™omo I f—™ilit— — leitur— do ™ódigoF #ifdef, #ifndef, #else e #endif es diretiv—s 5ifdefD 5ifndefD 5else e 5endif sĂŁo muito utiliz—d—s qu—ndo queremos ger—r dois progr—m—s que diferem —pen—s num pequeno ped—ço de ™ódigoF €or exemplo dois sistem—s de ™ontrole de temper—tur—F y primeiro possui um displ—y de vghD ™—p—z de mostr—r — temper—tur— textu—lmenteF y segundo sistem— exe™ut— — mesm— função que o primeiro m—s ĂŠ um dispositivo m—is ˜—r—toD port—nto possui —pen—s um led indi™—tivo de so˜retemper—tur—F y ™ódigo pode ser es™rito d— seguinte m—neir— void ImprimirTemp @ char valor A { 5ifdef LCD Imprime_LCD @ valor A 5else if @ valor b Q H A { led a I Y } else { led a H Y } 5endif //LCD } xo momento d— ™ompil—ção o prĂŠE™ompil—dor irĂĄ veri(™—r se — t—g vgh foi de(nid— em —lgum lug—rF im ™—so positivo o prĂŠE™ompil—dor irĂĄ deix—r tudo que estiver entre o 5ifdef e o 5else e retir—rĂĄ tudo que estĂĄ entre o 5else e o 5endifF yutr— função muito utiliz—d— dest—s diretiv—s ĂŠ p—r— evit—r — referĂŞn™i— ™ir™ul—rF ƒupondo dois —rquivosD um responsĂĄvel pel— ™omuni™—ção seri—l @seri—lFhA e o segundo responsĂĄvel pelo ™ontrole de temper—tur— @tempFhAF y projeto exige que — temper—tur— poss— ser ™ontrol—d— pel— port— seri—l e tod— vez que — temper—tur— p—ss—r de um determin—do p—t—m—r deve ser envi—do um —lert— pel— port— seri—lF y —quivo d— port— seri—l @seri—lFhA tem —s seguintes funçþesD —present—d—s — seguirF Notas de Aula ELT024 - Programação para Sistemas Embarcados
  • 28. 19 Linguagem C para sistemas embarcados visting PFQX istrutur— de he—der I #ifndef „eq•gyx„‚yvi P 5define TAG_CONTROLE Q // t o d o o conteĂşdo do arquivo vem aqui . S #endif //TAG_CONTROLE char LerSerial @ void A Y void EnviaSerial @ char val A Y y —rquivo de ™ontrole d— temper—tur— @tempFhA possui —s funçþes —preE sent—d—s — seguirF char LerTemperatura @ void A Y void AjustaCalor @ char val A Y „od— vez que — função ver„emper—tur—@A for ™h—m—d—D el— deve f—zer um teste e se o v—lor for m—ior que um p—t—m—r ™h—m—r — função invi—ƒeri—l@A ™om o ™ódigo HxQHF €—r— isso o —rquivo tempFh deve in™luir o —rquivo seri—lFhF #include serial .h char LerTemperatura @ void A Y void AjustaCalor @ char val A Y „od— vez que — função verƒeri—l@A re™e˜er um v—lorD el— deve ™h—m—r — função ejust—g—lor@A e rep—ss—r esse v—lorF €—r— isso o —rquivo seri—lFh deve in™luir o —rquivo tempFh #include temp .h char LerSerial @ void A Y void EnviaSerial @ char val A Y y pro˜lem— ĂŠ que deste modo ĂŠ ™ri—d— um— referĂŞn™i— ™ir™ul—r sem (mX o ™ompil—dor lĂŞ o —rquivo seri—lFh e per™e˜e que tem que inserir o —rquivo tempFhF snserindo o —rquivo tempFh per™e˜e que tem que inserir o —rquivo seri—lFhD ™onforme pode ser visto n— pigur— PFIF e solução ĂŠ ™ri—r um dispositivo que permit— que o ™onteĂşdo do —rquivo sej— lido —pen—s um— vezF iste dispositivo ĂŠ implement—do —tr—vĂŠs d— estruE tur— —present—d— no progr—m— PFQF ƒegundo o ™ódigo —™im—D o ™onteĂşdo que estiver entre o 5ifndef e o 5enE difD sĂł serĂĄ m—ntido se — — t—g „eq•gyx„‚yvi xÃy estiver de(nid—F gomo isto ĂŠ verd—de dur—nte — primeir— leitur—D o prĂŠE™ompil—dor lĂŞ o —rE quivo norm—lmenteF ƒe —™onte™er um— referĂŞn™i— ™í™li™—D n— segund— vez que o —rquivo for lidoD — t—g „eq•gyx„‚yvi jĂĄ est—rĂĄ de(nid— impedindo Notas de Aula ELT024 - Programação para Sistemas Embarcados
  • 29. 20 Linguagem C para sistemas embarcados temp.h #include “serial.h” char LerTemperatura(void); void AjustaCalor(char val); serial.h #include “temp.h” char LerSerial(void); void EnviaSerial(char val); temp.h #include “serial.h” char LerTemperatura(void); void AjustaCalor(char val); pigur— PFIX €ro˜lem— d—s ‚eferĂŞn™i—s gir™ul—res Notas de Aula ELT024 - Programação para Sistemas Embarcados
  • 30. 21 Linguagem C para sistemas embarcados —ssim que o pro™esso ™í™li™o ™ontinueD ™onforme pode ser visto n— pigur— PFPF temp.h #infdef TEMP_H #define TEMP_H #include “serial.h” char LerTemperatura(void); void AjustaCalor(char val); serial.h #endif #infdef SERIAL_H #define SERIAL_H #include “temp.h” temp.h char LerSerial(void); void EnviaSerial(char val); #infdef TEMP_H #endif //tag jĂĄ definida, //pula o conteĂşdo #endif pigur— PFPX ƒolução d—s referĂŞn™i—s ™ir™ul—res ™om 5ifndef qer—lmente se utiliz— ™omo t—g de ™ontrole o nome do —rquivoF ist— t—g deve ser Ăşni™— p—r— ™—d— —rquivoF 2.5 Tipos de dados em C 19 Jan 2038 at 3:14:07 AM. The end of the world according to Unix (2 32 seconds after Jan 1st 1970) E …nix d—te system y tipo de um— v—riĂĄvelD inform— — qu—ntid—de de memĂłri—D em bytesD que est— irĂĄ o™up—r e ™omo est— deve ser interpret—d—X ™om ou sem fr—ção @vĂ­rgul—AF ys tipos ˜ási™os de d—dos n— lingu—gem g sĂŁo —present—dos n— „—˜el— PFIF „—˜el— PFIX „ipos de d—dos e f—ix— de v—lores Tipo Bits Bytes Faixa de valores ™h—r V I EIPU Ă  IPU int IT P EQPFUTV Ă  QPFUTU )o—t QP R QDR x IH-38 Ă  QDR x IH38 dou˜le TR V QDR x IH-308 Ă  QDR x IH308 Notas de Aula ELT024 - Programação para Sistemas Embarcados
  • 31. 22 Linguagem C para sistemas embarcados €odemos not—r que —s v—riĂĄveis que possuem m—ior t—m—nho podem —rE m—zen—r v—lores m—ioresF xot—mos t—m˜ém que —pen—s os tipos )o—t e douE ˜le possuem ™—s—s de™im—isF Representação binĂĄria e hexadecimal e gr—nde m—iori— dos pro™ess—dores tr—˜—lh— ™om d—dos ˜inĂĄriosD ou sej—D —queles que —pen—s —ssumem v—lores H ou IF €or isso os tipos —present—dos —nteriormente podem ser represent—dos utiliz—ndo — ˜—se PF …m v—lor do tipo ™h—r que possui V ˜its serĂĄ represent—do por um nĂşmero de V —lg—rismosD todos H @zerosA ou I @unsAF €—r— re—liz—rmos — ™onversĂŁo de um nĂşmero n— ˜—se de™im—l p—r— — ˜—se P podemos seguir o seguinte —lgoritmoX IF Dividir o nĂşmero por 2 PF Anotar o valor do resto (0 ou 1) QF Se o valor ĂŠ maior que 0 voltar ao nĂşmero 1 RF Escrever os valores obtidos atravĂŠs do passo 2 de trĂĄs para frente. SF Apresentar o resultado €or exemplo o nĂşmero IVF IVGP a WD resto 0 WGP a RD resto 1 RGP a PD resto 0 PGP a ID resto 0 IGP a HD resto 1 vendo do Ăşltimo result—do p—r— o primeiro temos que IV10 a IHHIH2 hevido — gr—nde utiliz—ção de nĂşmeros ˜inĂĄrios n— progr—m—ção de ˜—ixo nĂ­vel ĂŠ muito ™omum es™revemos estes nĂşmeros n— ˜—se IT ou hex—de™im—lF e v—nt—gem de es™rever o nĂşmero nest— ˜—se ĂŠ que existe um— ™onversĂŁo simples de ˜inĂĄrio p—r— hex—de™im—l e o nĂşmero result—nte o™up— ˜em menos esp—ço n— tel—F e ˜—se hex—de™im—l possui IT 4unid—des4diferentesF gomo existem —peE n—s IH —lg—rismos no sistem— de numer—ção —rá˜i™o @HD ID PD QD RD SD TD UD VD WA utiliz—mos T letr—s p—r— ™omplementĂĄElos @eD fD gD hD iD pAF e ™onversĂŁo entre v—lores ˜inĂĄriosD de™im—is e hex—de™im—is ĂŠ —present—d— n— „—˜el— PFPF €—r— ™onverter de ˜inĂĄrio p—r— hex—de™im—l ˜—st— dividir o nĂşmero em grupos de R em RD da esquerda para a direitaD e utiliz—r — t—˜el— —™im—F €or exemplo o nĂşmero IVF ƒ—˜emos que este nĂşmero em ˜inĂĄrio ĂŠ repreE sent—do por IHHIH2 F ƒep—r—ndo o nĂşmero de R em R —lg—rismos temosX IEHHIH €el— t—˜el—X Notas de Aula ELT024 - Programação para Sistemas Embarcados
  • 32. 23 Linguagem C para sistemas embarcados „—˜el— PFPX ‚epresent—ção de™im—l ! ˜inĂĄri— E hex—de™im—l Decimal BinĂĄrio Hexadecimal Decimal BinĂĄrio Hexadecimal H HHHH H V IHHH V I HHHI I W IHHI W P HHIH P IH IHIH e Q HHII Q II IHII f R HIHH R IP IIHH g S HIHI S IQ IIHI h T HIIH T IR IIIH i U HIII U IS IIII p I2 a I16 HHIH2 a P16 F vogoX IHHIH2 F a IP16 F Modicadores de tamanho e sinal …m modi(™—dor de tipo —lter— o signi(™—do dos tipos ˜—se e produz um novo tipoF ixistem qu—tro tipos de modi(™—doresD dois p—r— o t—m—nho @long e shortA e dois p—r— sin—l @unsigned e signedAF …m tipo de™l—r—do ™om o modi(™—dor long pode ter t—m—nho wesy‚ ou sq…ev —o tipo origin—lF …m tipo de™l—r—do ™omo short deve ter t—m—nho wixy‚ ou sq…ev —o tipo origin—lF e de™isĂŁo ™—˜e —o ™ompil—dor utiliz—doF ys tipos de™l—r—dos ™omo signed possuem um ˜it reserv—do p—r— o sin—lD deste o v—lor mĂĄximo que podem —tingir ĂŠ menorF ys tipos de™l—r—dos ™omo unsigned nĂŁo podem —ssumir v—lores neg—tivosD em ™ompens—ção podem —tinE gir o do˜ro do v—lor de um tipo signedF x— „—˜el— PFQ sĂŁo —present—d—s —lgum—s v—ri—ções possĂ­veisF x— lingu—gem gD por p—drĂŁo os tipos sĂŁo sin—liz—dosD ou sej—D possuem p—rte positiv— e neg—tiv—F €or isso ĂŠ r—ro en™ontr—r o modi(™—dor signedF Modicadores de acesso hur—nte o pro™esso de ™ompil—çãoD existe um— et—p— de otimiz—ção do proE gr—m—F hur—nte est— et—p—D o ™ompil—dor pode retir—r p—rtes do ™ódigo ou desf—zer loops ™om perĂ­odos (xosF €or exemplo o ™ódigo —˜—ixoX #define ˆ @*@ ne—r unsigned char * A HxpVQ A Notas de Aula ELT024 - Programação para Sistemas Embarcados
  • 33. 24 Linguagem C para sistemas embarcados „—˜el— PFQX elter—ção de t—m—nho e sin—l dos tipos ˜ási™os Tipo Bytes ExcursĂŁo mĂĄxima unsigned ™h—r I H Ă  PSS signed ™h—r I EIPV Ă  IPU unsigned int P H Ă  TSFSQS signed int P EQPFUTV Ă  QPFUTU long int R EPFIRUFRVQFTRV Ă  PFIRUFRVQFTRU unsigned long int R H Ă  RFPWRFWTUFPWS short int P EQPFUTV Ă  QPFUTU void main @ void A interrupt H { while @ X 3a X A Y } u—ndo ™ompil—do —present— o seguinte ™ódigo em —ssem˜lerX // Starting pCode block S_Teste__main code _main X F line IW // T e s t e . c while (X!=X) ; RETURN inqu—nto — v—riĂĄvel x for diferente de x o progr—m— nĂŁo s—i do loopF y ™ompil—dor entende que est— ™ondição nun™— irĂĄ —™onte™er e elimin— o loop do ™ódigo (n—l ™omo podemos ver no ™ódigo ger—doD — rotin— de return estĂĄ logo —pĂłs — ini™i—liz—ção do progr—m— •m—inF €—r— v—riĂĄveis ™omuns o v—lor sĂł ĂŠ —lter—do em —tri˜uiçþes diret—s de v—lor ou de outr—s v—riĂĄveisX @x a RYA ou @x a yYAF intret—nto existe um— ™ondição onde — v—riĂĄvel x pode —lter—r seu v—lor independentemente do progr—m—F ƒe est— v—riĂĄvel represent—r um endereço de memĂłri— —sso™i—do Ă  um perifĂŠri™o fĂ­si™oD seu v—lor pode mud—r indepenE dentemente do )uxo do progr—m—F €—r— indi™—r est— situ—ção —o progr—m— utiliz—mos — p—l—vr— reserv—d— volatileF #define ˆ @ * @ volatile n e — r unsigned char * A HxpVQ A void main @ void A interrupt H { while @ X 3a X A Y } Notas de Aula ELT024 - Programação para Sistemas Embarcados
  • 34. 25 Linguagem C para sistemas embarcados qer—ndo o ™ódigo em —ssem˜ler des™rito —˜—ixoX // Starting pCode block S_Teste__main code _main X _00105_DS_ X F line IW // Teste . c while (X != X) ; MOVLW H x83 // p r i m e i r a parte do endereço MOVWF r0x00 MOVLW H x0f // s e g u n d a parte do endereço MOVWF r0x01 MOVFF r0x00 D FSR0L MOVFF r0x01 D FSR0H MOVFF INDF0 D r0x00 // r e a l i z a primeira leitura MOVLW H x83 // p r i m e i r a parte do endereço MOVWF r0x01 MOVLW H x0f // s e g u n d a parte do endereço MOVWF r0x02 MOVFF r0x01 D FSR0L MOVFF r0x02 D FSR0H MOVFF INDF0 D r0x01 // r e a l i z a segunda leitura MOVF r0x00 D W XORWF r0x01 D W BNZ _00105_DS_ // f a z o teste para igualdade RETURN €odemos per™e˜er queD deste modoD o ™ompil—dor ĂŠ forç—do — ler — v—riĂĄvel x du—s vezes e re—liz—r o teste p—r— ver se el— perm—ne™e ™om o mesmo v—lorF im —lgum—s situ—ções ĂŠ ne™essĂĄrio indi™—r que —lgum—s v—riĂĄveis nĂŁo poE dem re™e˜er v—lores pelo progr—m—F €—r— isto utiliz—mos — p—l—vr— reserv—d— constF …tiliz—mos este modi(™—dor p—r— indi™—r que — v—riĂĄvel represent— um lo™—l que —pen—s pode ser lido e nĂŁo modi(™—doD por exemplo um— port— p—r— entr—d— de d—dosF xest— situ—ção ĂŠ ™omum utiliz—r —s p—l—vr—s volatile e const juntoF #define ˆ @ * @ volatile const ne—r unsigned char * A HxpVQ A void main @ void A interrupt H // i n i c i o do programa { X a QY } ƒe tent—rmos ™ompil—r este ™ódigo —p—re™erĂĄ — seguinte mens—gem de erroX Teste F c X error Q Q X Attempt to assign value to a constant ← variable @aA Notas de Aula ELT024 - Programação para Sistemas Embarcados
  • 35. 26 Linguagem C para sistemas embarcados Modicadores de posicionamento es v—riĂĄveis podem ser de™l—r—d—s utiliz—ndo os modi(™—dores near e farF isE tes modi(™—dores indi™—m —o ™ompil—dor em qu—l regiĂŁo de memĂłri— devem ser ™olo™—d—s —s v—riĂĄveisF e regiĂŁo near ger—lmente se refere Ă  zero p—geF É um— regiĂŁo m—is fá™il de ser —™ess—d—F e regiĂŁo far exige m—is tempo p—r— exe™ut—r — mesm— função que — nearF €odemos pens—r nest—s regiĂľes ™omo — memĂłri— ‚ew e — memĂłri— g—™he do ™omput—dorF e segund— ĂŠ m—is rĂĄpid—D m—s possui um —lto ™usto e por isso ger—lmente ĂŠ menorF im —lgum—s situ—ções ĂŠ interess—nte que —lgum—s v—riĂĄveis nun™— s—i—m do ™—™heD pois sĂŁo utiliz—d—s ™om gr—nde frequĂŞn™i— ou sĂŁo ™rĂ­ti™—s p—r— o sistem—F Modicador de persistĂŞncia im ger—lD —s v—riĂĄveis utiliz—d—s dentro d—s funçþes perdem seu v—lor —o tĂŠrmino d— funçãoF €—r— que este v—lor nĂŁo se per™— podemos utiliz—r um modi(™—dor de persistĂŞn™i—X st—ti™F gom esse modi(™—dor — v—riĂĄvel p—ss— — possuir um endereço (xo de memĂłri— d—do pelo ™ompil—dorF elĂŠm disso o ™ompil—dor nĂŁo reutiliz— este endereço em nenhum— outr— p—rte do ™ódigoD g—r—ntindo que n— prĂłxim— vez que — função for ™h—m—d— o v—lor ™ontinue o mesmoF // c r i a um contador persistente que ĂŠ int ContadorPersistente @ int reseta A // i n c r e m e n t a d o a cada chamada de função { static char variavel_persistente Y if @ reseta A { variavel_persistente a H Y } else { return @ variavel_persistenteCCA Y } return −IY } 2.6 Operaçþes aritmĂŠticas If people do not believe that mathematics is simple, it is only because they do not realize how complicated life is. E tohn vouis von xeum—nn Notas de Aula ELT024 - Programação para Sistemas Embarcados
  • 36. 27 Linguagem C para sistemas embarcados visting PFRX yper—ções —ritmĂŠti™—s ™om tipos diferentes Ivoid void main @ A P { Q char var08 Y R int var16 Y S long int var32 Y T float pont16 Y U double pont32 Y V var8 a var8 C var16 Y // 1 W var8 a var8 C var8 Y // 2 IH var16 a var8 * var8 Y // 3 II var32 a var32 G var16 Y // 4 IP var32 a pont32 * var32 Y // 5 IQ pont16 a var8 G var16 Y // 6 IR pont16 a pont32 * var32 Y // 7 IS pont16 a RH G V H Y // 8 IT } …m ™uid—do — se tom—rD n— progr—m—ção em g p—r— sistem—s em˜—r™—dosD ĂŠ o result—do de oper—ções —ritmĂŠti™—sF €or p—drĂŁo n— lingu—gem g o resulE t—do de um— oper—ção —ritmĂŠti™— possui t—m—nho igu—l —o m—ior oper—ndoF y˜serv—ndo o €rogr—m— PFR not—mos —lguns exemplosF xo ™—so I @linh— VA um— v—riĂĄvel ™h—r som—d— — um int ger— ™omo reE sult—do um int @m—ior oper—ndoAF xĂŁo ĂŠ possĂ­vel —rm—zen—r esse result—do num ™h—rD h—verĂĄ perd— de inform—çãoF var32 a var8 C var16 Y // 1 corrigido e som— de dois ™h—rD ™onforme — linh— WD segundo ™—so pode ger—r um pro˜lem— se —m˜os forem muito prĂłximo do v—lor limiteF €or exemploX IHH C IHH a PHHD que nĂŁo ™—˜e num ™h—rD jĂĄ que este sĂł permite —rm—zen—r v—lores de EIPV Ă  IPUF var16 a var8 C var8 Y // 2 corrigido y ter™eiro ™—so @linh— IHA estĂĄ ™orretoD — multipli™—ção de dois ™h—r possui um v—lor mĂĄximo de IPUBIPUaITFIPWF y pro˜lem— ĂŠ que — multipli™—ção de dois ™h—r ger— um outro ™h—rD perdendo inform—çãoF É ne™essĂĄrio re—liz—r um type™—st —ntesF var16 a @@ int A var8 A * var8 Y // 3 corrigido y qu—rto ™—so @linh— IIA pode —present—r um pro˜lem— de pre™isĂŁoF e divisĂŁo de dois inteiros nĂŁo —rm—zen— p—rte fr—™ionĂĄri—F ƒe isto nĂŁo for ™rĂ­ti™o Notas de Aula ELT024 - Programação para Sistemas Embarcados
  • 37. 28 Linguagem C para sistemas embarcados p—r— o sistem— estĂĄ ™orretoF vem˜r—r que — divisĂŁo de nĂşmeros inteiros ĂŠ m—is rĂĄpid— que de nĂşmeros fr—™ionĂĄriosF y quinto ™—so @linh— IPA pode —present—r um pro˜lem— de pre™isĂŁoF y result—do d— ™ont— de um nĂşmero inteiro ™om um ponto )utu—nte ĂŠ um ponto )utu—nteF erm—zen—r esse v—lor num outro nĂşmero inteiro ger— perd— de inform—çãoF y sexto ™—so @linh— IQA —present— um pro˜lem— muito ™omumF e diviE sĂŁo de dois nĂşmeros inteiros ger— um outro nĂşmero inteiroF xĂŁo import— se —rm—zen—remos o v—lor num— v—riĂĄvel de ponto )utu—nte h—verĂĄ perd— de inform—ção pois os operandos sĂŁo inteirosF €—r— evit—r esse pro˜lem— ĂŠ ne™essĂĄrio um type™—stF pont16 a @ @ float A var8 A G var16 Y // 6 corrigido xo sĂŠtimo ™—so @linh— IRA pode h—ver perd— de pre™isĂŁo pois o result—do d— oper—ção ĂŠ um dou˜leD e est—mos —rm—zen—ndo este v—lor num )o—tF y oit—vo ™—so @linh— ISA ĂŠ simil—r —o sextoF ist—mos re—liz—ndo um— ™ont— ™om dois nĂşmeros inteiros esper—ndo que o result—do sej— HDSF gomo os oper—ndos sĂŁo inteiros — expressĂŁo serĂĄ —v—li—d— ™omo result—nte em eroF …m— ˜o— prĂĄti™— ĂŠ sempre us—r 4FH4 ou 4f4 —pĂłs o nĂşmero p—r— indi™—r oper—ções ™om vĂ­rgul—F pont16 a RH f G V H F H Y // 8 corrigido hevemos tom—r ™uid—do t—m˜ém ™om ™omp—r—ções envolvendo nĂşmeros ™om ponto )utu—nteF float x a HFIY while @ x 3a I F I A { printf @ x = %fn D x A Y x a x C HFIY } y tre™ho de ™ódigo —™im— —present— um loop in(nitoF gomo existem restriçþes de pre™isĂŁo nos nĂşmeros de ponto )utu—nte @)o—t e dou˜leA nem todos os nĂşmeros sĂŁo represent—dos (elmenteF ys erros de —rredond—mento podem f—zer ™om que — ™ondição @x 3aIFIA nun™— sej— s—tisfeit—F ƒempre que houver — ne™essid—de de ™omp—r—ção ™om nĂşmeros de ponto )utu—nte utiliz—r m—iorD menor ou v—ri—çõesF float x a HFIY while @x ` IFIA { printf @ x = %fn D x A Y x a x C HFIY } Notas de Aula ELT024 - Programação para Sistemas Embarcados
  • 38. 29 Linguagem C para sistemas embarcados epes—r de sutis estes tipos de erro podem ™—us—r um m—u fun™ion—mento do sistem—F x— pigur— PFQ ĂŠ —present—do um erro ger—do —tr—vĂŠs de um loop in(nitoF pigur— PFQX voop in(nito de um devi™e driver ger—ndo erro no sistem— 2.7 Função main() „odo sistem— ne™essit— de ini™i—r em —lgum lug—rF im ger—lD os mi™ro™onE trol—doresD —ssim que lig—dosD pro™ur—m por su—s instruçþes no primeiro ou Ăşltimo endereço de memĂłri—D dependendo d— —rquitetur— utiliz—d—F y esp—ço de memĂłri— disponĂ­vel neste endereço ĂŠ ger—lmente muito pequenoD —pen—s o ne™essĂĄrio p—r— inserir um— instrução de pulo e o endereço onde estĂĄ — função prin™ip—lF iste esp—ço ĂŠ ™onhe™ido ™omo posição de resetF ixisE tem —ind— outros esp—ços de memĂłri— simil—res — este queD ger—lmenteD sĂŁo —lo™—dos prĂłximosF y ™onjunto destes esp—ços ĂŠ ™onhe™ido ™omo vetor de interrupção @pigur— PFRAF e m—neir— de indi™—r o ponto de iní™io de um progr—m— depende do ™ompil—dorF im ger—l os ™ompil—dores —lo™—m — função m—in@A em —lgum lug—r d— memĂłri— onde h—j— esp—ço disponĂ­velF hepois disso dispĂľem de um— instrução de pulo p—r— o primeiro endereço de memĂłri—D onde foi —lo™—d— — função m—inF €—r— o ™ompil—dor ƒhggGq€…tils no w€vef ĂŠ ne™essĂĄrio indi™—r que queremos que — função m—in@A sej— ™h—m—d— tod— vez que o sistem— for ini™i—doF €or isso ĂŠ ne™essĂĄrio que — posição de reset dentro do vetor de Notas de Aula ELT024 - Programação para Sistemas Embarcados
  • 39. 30 Linguagem C para sistemas embarcados Endereço Instrução 0x00 Pulo 0x01 0x8A 0x02 Pulo 0x03 0x55 0x04 ... 0x55 Limpa A 0x56 A recebe 0x57 30 0x58 Testa A 0x59 ... 0x8A A recebe 0x8B 50 0x8C Salva em 0x8D Porta B 0x8E ... pigur— PFRX ixemplo de fun™ion—mento do vetor de interrupção Notas de Aula ELT024 - Programação para Sistemas Embarcados
  • 40. 31 Linguagem C para sistemas embarcados interrupção —ponte p—r— — função m—inF ssto ĂŠ feito —tr—vĂŠs do —tri˜uto interrupt H logo —pĂłs o nome d— função ™onforme pode ser visto no ™ódigo —˜—ixoF void main @ void A interrupt H { // a q u i entra o cĂłdigo do programa } yutr— ™ois— interess—nte ĂŠ que p—r— sistem—s em˜—r™—dos — função prinE ™ip—l nĂŁo re™e˜e nem retorn— n—d—F gomo el— ĂŠ — primeir— — ser ™h—m—d— nĂŁo hĂĄ ™omo envi—r —lgum v—lor por p—râmetroF il— t—m˜ém nĂŁo retorn— n—d— pois —o tĂŠrmino dest— o sistem— nĂŁo estĂĄ m—is oper—tivoF im ger—l sistem—s em˜—r™—dos sĂŁo projet—dos p—r— ™omeç—rem — fun™iE on—r —ssim que lig—dos e —pen—s p—r—r su— t—ref— qu—ndo deslig—dosF gomo tod—s —s fun™ion—lid—des sĂŁo ™h—m—d—s dentro d— função m—in@A1 esper—Ese que o progr—m— ™ontinue exe™ut—ndo —s instruçþes dentro del— —tĂŠ ser desliE g—do ou re™e˜er um ™om—ndo p—r— deslig—rF iste ™omport—mento pode ser o˜tido —tr—vĂŠs de um loop in(nitoF e˜—ixo estĂŁo —s du—s —ltern—tiv—s m—is utiliz—d—sF void main @ void A interrupt H void main @ void A interrupt H { { for @ Y Y A while @ I A { { // a q u i entra o // a q u i entra o // c Ăł d i g o principal // c Ăł d i g o principal } } } } 2.8 Rotinas de tempo Time is an illusion, lunchtime doubly so. E pord €refe™t É muito ™omum ne™essit—r que o mi™ro™ontrol—dor (que um tempo sem f—zer n—d—F …m— m—neir— de —tingir esse o˜jetivo ĂŠ utiliz—r um l—ço FOR 2 F unsigned char i Y for @ i aHY i ` I H Y iCCA Y 1 im sistem—s m—is ™omplexos —lgum—s t—ref—s sĂŁo exe™ut—d—s independentemente d— função prin™ip—lD tendo su— exe™ução ™ontrol—d— —tr—vĂŠs de interrupçþesF 2 iste mĂŠtodo nĂŁo ĂŠ —™onselh—do em sistem—s de m—ior porteF Notas de Aula ELT024 - Programação para Sistemas Embarcados
  • 41. 32 Linguagem C para sistemas embarcados xot—r que nĂŁo est—mos utiliz—ndo os ™ol™hetesF vogo —pĂłs fe™h—r os p—E rĂŞnteses jĂĄ existe um ponto e virgul—F €—r— entender ™omo esse pro™edimento fun™ion—D e estim—r o tempo de esper— ĂŠ pre™iso entender ™omo o ™ompil—dor tr—duz ess— função p—r— —ssem˜lerF // c Ăł d i g o em assembler equivalente Ă  f o r ( i =0; i 10; i ++) ; MOVF r0x00 D W // i n i c i a l i z a W com 0 (1 ciclo ) SUBLW H x0a // c o l o c a o valor 10 (0 x0a ) no r e g i s t r o W (1← ciclo ) MOVWF r0x00 // muda o valor de W para F (1 ciclo ) _00107_DS_ X DECFSZ r0x00 D F // d e c r e m e n t a F, se F 0 executa a ← prĂłxima linha (1 ciclo ) BRA _00107_DS_ // p u l a para o lugar marcado como ← _00107_DS_ (2 ciclos ) €er™e˜emos pelo ™ódigo —™im— que p—r— re—liz—r um for pre™is—mos de Q p—ssos de ini™i—liz—çãoF g—d— iter—ção exige P p—ssosX um— ™omp—r—ção e um pulo 3 D tot—liz—ndo Q ™i™los de ini™i—liz—ção e Q ™i™los de inter—çãoF ƒe temos um pro™ess—dor tr—˜—lh—ndo — V wrzD ™—d— instrução ĂŠ exe™uE t—d— em HFSusF4 €—r— termos um tempo de esper— de HFSs pre™is—mos de I milhĂŁo de instruçþesF ƒe ™olo™—rmos loops en™—de—dos podemos multipli™—r — qu—ntid—de de instruçþes que serĂŁo exe™ut—d—sF €—r— o˜termos um v—lor de I milhĂŁo de instruçþes devemos utiliz—r pelo menos Q loops en™—de—dosF ys v—lores dos loops sĂŁo o˜tidos de m—neir— iter—tiv—F unsigned char i D jD kY for @ i aHY i ` Q R Y iCCA // 3 + 34 * (30.003 + 3) = 1.020.207 ← instruçþes { for @ j aHY j ` I H H Y jCCA // 3 + 1 0 0 * (297 + 3) = 30.003 ← instruçþes { for @ k aHY k ` W V Y kCCA Y // 3 + 98 * (3) = 297 instruçþes } } y ™ódigo —™im— foi projet—do p—r— ger—r um —tr—so de tempo de meio segundoF gompil—ndo e re—liz—ndo testes prĂĄti™os podemos ™on(rm—r que o tempo re—l ĂŠ —proxim—d—mente HFSI @sAF ist— dis™repân™i— —™onte™e porque —gor— temos Q loops en™—de—dos e ™—d— qu—l ™om su— v—riĂĄvel de ™ontroleF heste modo o ™ompil—dor pre™is— s—lv—r e ™—rreg—r ™—d— v—riĂĄvel p—r— re—liz—r — ™omp—r—çãoF €er™e˜emos —ssim que p—r— ™onhe™er ™orret—mente o fun™ion—mento do sistem— ĂŠ ne™essĂĄrioD em —lgum—s situ—çõesD —˜rir o ™ódigo em —ssem˜ler geE 3 iste v—lor sĂł ĂŠ v—lido qu—ndo est—mos tr—˜—lh—ndo ™om v—riĂĄveis ™h—rF ƒe utiliz—rmos v—riĂĄveis int o ™ódigo em —ssem˜ler serĂĄ diferente e teremos que re—liz—r um— nov— —nĂĄliseF 4 xo €sgD ™—d— instrução pre™is— de R ™i™los de ™lo™kF €—r— VwrzD I ™i™lo a HFSÂľsF Notas de Aula ELT024 - Programação para Sistemas Embarcados
  • 42. 33 Linguagem C para sistemas embarcados r—do pelo ™ompil—dor p—r— entender ™omo o este ĂŠ exe™ut—doF xem sempre o ™ompil—dor tom— —s mesm—s de™isĂľes que nĂłsF elĂŠm disso ele pode ger—r otimiz—ções no ™ódigoF ixistem dois tipos de otimiz—çãoX um— vis—ndo diE minuir o tempo de exe™ução do sistem—D deix—ndoEo m—is rĂĄpido e outr— que reduz o t—m—nho do ™ódigo (n—lD poup—ndo esp—ço n— memĂłri—F e seguir —present—mos um exemplo de função que ger— del—ys ™om tempo p—r—metriz—doF void delay @ unsigned int DL A { unsigned char i D j D k Y while @ DL −−A // e x e c u t a DL vezes . { for @ i aHY i ` Q R Y iCCA // 3 + 34 * (30.003 + 3) = 1.020.207 ← instruçþes { for @ j aHY j ` I H H Y jCCA // 3 + 1 0 0 * (297 + 3) = 30.003 ← instruçþes { for @ k aHY k ` W V Y kCCA Y // 3 + 98 * (3) = 297 instruçþes } } } } 2.9 Operaçþes com bits All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value. E g—rl ƒ—g—n xos sistem—s mi™ro™ontrol—dosD existem —lgum—s v—riĂĄveis onde ™—d— ˜it tem um— interpret—ção ou fun™ion—lid—de diferenteF €or isso ĂŠ ne™essĂĄrio re—liz—r —lgum—s oper—ções que modi(quem —pen—s os ˜its desej—dosD m—ntendo o rest—nte dos ˜its d— v—riĂĄvel in—lter—dosF es oper—ções d— lingu—gem g que nos permitem tr—˜—lh—r ™om —s v—riĂĄE veisD lev—ndo em ™ont— os v—lores individu—is de ™—d— ˜itD sĂŁo ™h—m—d—s de ˜itwise oper—tionF É import—nte ress—lt—r que —s oper—ções de ˜itwise possuem fun™ion—liE d—de semelh—nte — su—s respe™tiv—s oper—ções lĂłgi™—sF e diferenç— ĂŠ que — lĂłgi™— oper— em ™im— d— v—riĂĄvel ™omo um todo5 enqu—nto — ˜itwise oper— ˜it Ă  ˜itF 5 vem˜r—r que p—r— lingu—gem g um— v—riĂĄvel ™om v—lor H @zeroA represent— f—lsoD e qualquer outro v—lor represent— verd—deiroF Notas de Aula ELT024 - Programação para Sistemas Embarcados
  • 43. 34 Linguagem C para sistemas embarcados NOT e oper—ção xy„ lĂłgi™— retorn— um se o v—lor for zero e H se o v—lor for umF A !A H I I H e oper—ção ˜itwise xy„ @oper—dor ÂŁA exe™ut— um— xy„ lĂłgi™—F ssso signi(™— que — oper—ção ĂŠ re—liz—d— p—r— ™—d— um dos ˜its d— v—riĂĄvelD nĂŁo m—is p—r— — v—riĂĄvel ™omo um todoF x— t—˜el— seguinte ĂŠ —present—d— — diferenç— entre —s du—s oper—çõesF Declaração LĂłgico Bitwise result a ~ A Y char A a IPY result a 3 A Y // result = 243 // A = 0 b 0 0 0 0 1 1 0 0 // result = 0 // A = 0 b 0 0 0 0 1 1 0 0 // r = 0 b11110011 AND e oper—ção exh lĂłgi™— @oper—dor 88A retorn— H se —lgum dos v—lores for zeroD e I se os dois v—lores forem diferentes de zeroF A B AB H H H H I H I H H I I I e oper—ção ˜itwise exh @oper—dor 8A exe™ut— um— exh lĂłgi™— p—r— ™—d— p—r de ˜its e ™olo™— o result—do n— posição ™orrespondenteX Declaração LĂłgico Bitwise char A a VY result a A 8 B Y // result = 0 result a A 88 B Y char // A = 0 b 0 0 0 0 1 0 0 0 // A = 0 b 0 0 0 0 1 0 0 0 B a SY // result = 1 // B = 0 b 0 0 0 0 0 1 0 1 // B = 0 b 0 0 0 0 0 1 0 1 // r = 0 b00000000 Notas de Aula ELT024 - Programação para Sistemas Embarcados
  • 44. 35 Linguagem C para sistemas embarcados OR e oper—ção y‚ lĂłgi™— @oper—dor ||A retorn— I se —lgum dos v—lores for difeE rente de zeroD e H se os dois v—lores forem zeroF e f e||f H H H H I I I H I I I I e oper—ção ˜itwise y‚ @oper—dor |A exe™ut— um— y‚ lĂłgi™— p—r— ™—d— p—r de ˜its e ™olo™— o result—do n— posição ™orrespondenteX Declaração LĂłgico Bitwise char A a VY result a A | B Y // result = 13 result a A | | B Y char // A = 0 b 0 0 0 0 1 0 0 0 // A = 0 b 0 0 0 0 1 0 0 0 B a SY // result = 1 // B = 0 b 0 0 0 0 0 1 0 1 // B = 0 b 0 0 0 0 0 1 0 1 // r = 0 b00001101 XOR e oper—ção ˆy‚ nĂŁo possui ™orrespondente lĂłgi™— n— lingu—gem gF ist— oper—ção pode ser represent—d— ™omo e ˆy‚ f a @e 88 3fA||@3e 88 fA e f e⊕f H H H H I I I H I I I H e oper—ção ˜itwise ˆy‚ @oper—dor ¢A exe™ut— um— ˆy‚ lĂłgi™— p—r— ™—d— p—r de ˜its e ™olo™— o result—do n— posição ™orrespondenteX Declaração LĂłgico Bitwise char A a VY result a A ” B Y // result = 15 char // A = 0 b 0 0 0 0 1 0 0 0 // nĂŁo existe em C // A = 0 b 0 0 0 0 1 0 0 0 B a SY // B = 0 b 0 0 0 0 0 1 0 1 // B = 0 b 0 0 0 0 0 1 0 1 // r = 0 b00001101 Notas de Aula ELT024 - Programação para Sistemas Embarcados
  • 45. 36 Linguagem C para sistemas embarcados Shift e oper—ção shift deslo™— os ˜its p—r— — esquerd— @oper—dor ``A ou direit— @oper—dor bbAF É ne™essĂĄrio indi™—r qu—nt—s ™—s—s serĂŁo deslo™—d—sF Declaração Shift Esquerda Shift Direita result a A `` P Y result a A bb P Y char A a VY // result = 32 // result = 2 // A = 0 b 0 0 0 0 1 0 0 0 // A = 0 b 0 0 0 0 1 0 0 0 // A = 0 b 0 0 0 0 1 0 0 0 // r = 0 b00100000 // r = 0 b00000010 €—r— v—riĂĄveis unsigned e inteir—sD est— oper—ção fun™ion— ™omo — multiE pli™—çãoGdivisĂŁo por potĂŞn™i— de doisF g—d— shift multipli™—Gdivide por P o v—lorF ist— ĂŠ um— prĂĄti™— muito ™omum p—r— evit—r — divisĂŁo que n— m—iori— dos sistem—s em˜—r™—dos ĂŠ um— oper—ção ™—r— do ponto de vist— de tempo de pro™ess—mentoF NĂŁo utilizar esta operação com o intuito de multiplicar/dividir variĂĄveis com ponto xo ou utuante nem variĂĄveis sinalizadas (signed). im divers—s o™—siĂľes ĂŠ ne™essĂĄrio que tr—˜—lhemos ™om os ˜its de m—neir— individu—lD prin™ip—lmente qu—ndo estes ˜its represent—m s—íd—s ou entr—d—s digit—isD por exemplo ™h—ves ou ledsF ƒupondo que temos V leds lig—dos —o mi™ro™ontrol—dorF g—d— led ĂŠ reE present—do —tr—vĂŠs de I ˜it de um— v—riĂĄvelF €—r— lig—rmos ou deslig—rmos —pen—s um led por vezD nĂŁo —lter—ndo o v—lor dos dem—isD devemos nos utiE liz—r de —lguns p—ssos de ĂĄlge˜r— digit—lF Ligar um bit (bit set) €—r— lig—r —pen—s um ˜itD utiliz—remos um— oper—ção y…F ƒupondo dois oper—ndos e e fF ƒe e ĂŠ I o result—do de @e | fA ĂŠ I independente de fF ƒe e ĂŠ H o result—do ĂŠ igu—l —o v—lor de fF ƒe o o˜jetivo ĂŠ lig—r —pen—s o ˜it d— posição ˆ devemos ™ri—r um v—lor onde tod—s —s posiçþes sĂŁo H's ™om ex™eção d— posição desej—d—F €—r— um— mĂĄs™—r— ˜inĂĄri— de x ˜its temos @xbaˆAX €osição x F F F ˆCI ˆ ˆEI F F F H †—lor H FFF H I H FFF H ƒe — oper—ção y‚ for exe™ut—d— ™om — mĂĄs™—r— ™ri—d—D o result—do —preE sent—rĂĄ v—lor I n— posição ˆ e m—nterĂĄ os v—lores —ntigos p—r— —s dem—is posiçþesF ixemploX vig—r —pen—s o ˜it P d— v—riĂĄvel €y‚„h Notas de Aula ELT024 - Programação para Sistemas Embarcados
  • 46. 37 Linguagem C para sistemas embarcados #define €y‚„h @ * @ volatile unsigned char * A HxpVQ A // d e f i n e s para portas de entrada e saĂ­da ne—r #define „‚sƒh @ * @ volatile ne—r unsigned char * A HxpWS A void main @ void A interrupt // i n i c i o do programa H { char mascara Y // v a r i ĂĄ v e l que guarda a mĂĄscara TRISD a H x00 Y // c o n f i g u r a a porta D como saĂ­da PORTD a H x00 Y // l i g a todos os leds ( lĂłgica negativa ) // l i g a o primeiro bit da variĂĄvel mascara a I Y // bit = 0 b00000001 // r o t a c i o n a −s e a variĂĄvel para que o bit 1 chegue na posição← desejada mascara a mascara `` P Y // bit = 0 b00000100 // L i g a r o bit 2, desligando o 2o led PORTD a PORTD | mascara Y for @ Y Y A Y // mantĂŠm o sistema ligado indefinidamente } Desligar um bit (bit clear) €—r— deslig—r —pen—s um ˜it o pro™edimento ĂŠ simil—r —o utiliz—do p—r— lig—rF eo invĂŠs de utiliz—rmos um— oper—ção y…D utiliz—remos um— oper—ção exhF e oper—ção exh tem — ™—r—™terĂ­sti™— deD d—dos e e f v—lores ˜inĂĄriosD se e ĂŠ ID — respost— de @e 8 fA serĂĄ o prĂłprio v—lor de fD se — eaHD — respost— ĂŠ zeroD independente de fF xov—mente ĂŠ ne™essĂĄrio ger—r um— mĂĄs™—r—F w—s p—r— est— situ—ção el— deve possuir todos os ˜its igu—is Ă  um ™om ex™eção de ˆD o ˜it que queremos deslig—rF posição x F F F ˆCI ˆ ˆEI F F F H †—lor I FFF I H I FFF I ƒe — oper—ção exh for exe™ut—d— ™om — mĂĄs™—r— ™ri—d—D o result—do —present—rĂĄ v—lor H n— posição ˆ e m—nterĂĄ os v—lores —ntigos p—r— —s dem—is posiçþesF ixemploX heslig—r —pen—s o ˜it P d— v—riĂĄvel €y‚„hF #define €y‚„h @ * @ volatile unsigned char * A HxpVQ A // d e f i n e s para portas de entrada e saĂ­da ne—r #define „‚sƒh @ * @ volatile ne—r unsigned char * A HxpWS A void main @ void A interrupt // i n i c i o do programa H { char mascara Y // v a r i ĂĄ v e l que guarda a mĂĄscara TRISD a H x00 Y // c o n f i g u r a a porta D como saĂ­da PORTD a H xFF Y // d e s l i g a todos os leds ( lĂłgica ← negativa ) Notas de Aula ELT024 - Programação para Sistemas Embarcados
  • 47. 38 Linguagem C para sistemas embarcados // l i g a o primeiro bit da variĂĄvel mascara a I Y // mascara = 0 b00000001 // r o t a c i o n a −s e a variĂĄvel para que o bit 1 chegue na posição← desejada mascara a mascara `` P Y // m a s c a r a = 0 b00000100 // i n v e r t e −s e o s v a l o r e s d e c a d a b i t mascara a ~ mascara Y // m a s c a r a = 0 b11111011 // D e s l i g a o bit 2, ligando o 2o led PORTD a PORTD 8 mascara Y for @ Y Y A Y // mantĂŠm o sistema ligado indefinidamente } É import—nte not—r que ger—mos — mĂĄs™—r— de m—neir— idĂŞnti™— Ă quel— utiliz—d— no ™—so —nteriorD onde todos os v—lores sĂŁo zero e —pen—s o desej—do ĂŠ umF hepois re—liz—mos — inversĂŁo dos v—loresF iste pro™edimento ĂŠ re—liz—do dest— m—neir— porque nĂŁo s—˜emos o t—m—nho d— p—l—vr— — ser utiliz—d— no mi™ro™ontrol—dorX V ou IT ˜itsF wesmo —ssim devemos g—r—ntir que todos os ˜its o˜tenh—m o v—lor ™orretoD o que ĂŠ g—r—ntido pel— oper—ção de neg—çãoF e opção de ini™i—liz—r — v—riĂĄvel ™om —pen—s um zero e rot—™ion—r pode nĂŁo fun™ion—r poisD n— m—iori— dos sistem—sD — função de rot—ção insere zeros Ă  medid— que os ˜its sĂŁo deslo™—dos e pre™is—mos que —pen—s um v—lor sej— zeroF Trocar o valor de um bit (bit ip) €—r— tro™—r o v—lor de um ˜it utiliz—remos ™omo —rtifí™io —lgé˜ri™o — oper—ção ˆy‚F h—do du—s v—riĂĄveis ˜inĂĄri—s e e f D se e ĂŠ ID o v—lor result—nte de e ˆy‚ f ĂŠ o oposto do v—lor de fD se eaHD — respost— se m—ntĂŠm igu—l —o v—lor de fF €odemos per™e˜er que p—r— tro™—r o v—lor de —pen—s um ˜it — mĂĄs™—r— serĂĄ idĂŞnti™— Ă quel— utiliz—d— p—r— lig—r um ˜itX posição x F F F ˆCI ˆ ˆEI F F F H †—lor H FFF H I H FFF H ƒe — oper—ção ˆy‚ for exe™ut—d— ™om — mĂĄs™—r— ™ri—d—D o v—lor n— posição ˆ serĂĄ tro™—doD de zero p—r— um ou de um p—r— zeroF ixemploX „ro™—r o ˜it P e T d— v—riĂĄvel €y‚„h #define €y‚„h @ * @ volatile unsigned char * A HxpVQ A // d e f i n e s para portas de entrada e saĂ­da ne—r #define „‚sƒh @ * @ volatile ne—r unsigned char * A HxpWS A void main @ void A interrupt // i n i c i o do programa H { char mascara Y // v a r i ĂĄ v e l que guarda a mascara TRISD a H x00 Y // c o n f i g u r a a porta D como saĂ­da Notas de Aula ELT024 - Programação para Sistemas Embarcados