Sistemas embarcados: motivação e primeiros passos

5,823 views
5,657 views

Published on

Sistemas embarcados: motivação e primeiros passos;
Palestra apresentada em 10/nov/2009 em Limeira, para a turma de engenharia elétrica da faculdade Einsten.

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
5,823
On SlideShare
0
From Embeds
0
Number of Embeds
314
Actions
Shares
0
Downloads
187
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide
  • http://teteraconsultoria.com.br/blog/a-historia-dos-videogames-anos-90/
  • Segundo a tradição estaria inscrito nos pórticos do Templo de Apolo em Delfos, na Antiga Grécia. Platão dizia que era algo muito citado por Sócrates. Ou seja, o que Sócrates pregava era que nós devemos nos ocupar menos com as coisas (riqueza, fama, poder) e passarmos a nos ocupar com nós mesmos. É esse ato de conhecimento, capaz de promover nossa autotranscendência, de que fala Sócrates. Conhecer a mim mesmo para saber como modificar minha relação para comigo, com os outros e com o mundo. http://educacao.uol.com.br/filosofia/conhece-te-a-ti-mesmo.jhtm
  • Os jovens adoram se sentir injustiçados, não é verdade ? Mas, do ponto de vista de tecnologia, isto parece não ser verdade !
  • http://www.gamevicio.com.br/i/noticias/32/32285-a-evolucao-do-celular/index.html http://tecnologia.terra.com.br/interna/0,,OI3266753-EI4796,00.html
  • http://www.gamevicio.com.br/i/noticias/32/32285-a-evolucao-do-celular/index.html http://tecnologia.terra.com.br/interna/0,,OI3266753-EI4796,00.html
  • Sistemas embarcados: motivação e primeiros passos

    1. 1. Faculdades integradas Einstein de Limeira Eletrônica embarcada Marcelo Barros de Almeida [email_address]
    2. 2. Marcelo Barros ? <ul><li>Formação: </li><ul><li>Engenheiro eletrônico (UNIFEI, 1996)
    3. 3. Mestre (UFMG, 1998)
    4. 4. Doutor (UFMG, 2002) </li></ul><li>Atualmente: </li><ul><li>Engenheiro de P&D (Smar Equip. Industriais LTDA)
    5. 5. Professor do Centro Univ. Barão de Mauá </li></ul><li>Detalhes: </li><ul><li>http://linuxabordo.com.br/wiki/index.php?title=Marcelo_Barros
    6. 6. http://wiki.forum.nokia.com/index.php/User:Marcelobarrosalmeida
    7. 7. http://buscatextual.cnpq.br/buscatextual/visualizacv.jsp?id=K4795354H9
    8. 8. http://www.twitter.com/marcelobarros
    9. 9. http://jedizone.wordpress.com
    10. 10. http://blog.nokiabr.com.br </li></ul></ul>smar
    11. 11. O que você vai ser quando crescer ? <ul><li>”Conhece-te a ti mesmo” - Sócrates (479-399 a.C.)
    12. 12. Direcione-se durante a graduação, não somente depois </li><ul><li>Decida a área de atuação
    13. 13. Faça cursos
    14. 14. Disciplinas alternativas
    15. 15. Estágios
    16. 16. Iniciação científica
    17. 17. Tenha ”projetos paralelos” </li></ul><li>Errar é possível, permita-se </li><ul><li>Aprenda com seus erro
    18. 18. Aprenda com os erros dos outros </li></ul></ul>Imagem: http://mel-melica.blogspot.com/2007/02/conhece-te-ti-mesmo.html
    19. 19. Formação universitária ajuda bastante <ul><li>Engenharia elétrica ou de computação saem na frente: </li><ul><li>Melhor base de hardware e eletrônica digital
    20. 20. Maior afinidade com microcontroladores e arquitetura de computadores
    21. 21. Foco em C e linguagens de baixo nível
    22. 22. Principais disciplinas correlacionadas: </li><ul><li>Eletrônica e eletrônica digital
    23. 23. Arquitetura de computadores
    24. 24. Algoritmos e estrutura de dados e programação em geral
    25. 25. Microcontroladores
    26. 26. Processamento de sinais </li></ul><li>Desejável: </li><ul><li>Sistemas operacionais, compiladores, engenharia de software e linguagens de alto nível </li></ul></ul></ul>
    27. 27. Possíveis áreas de atuação <ul><li>Indústria automobilística
    28. 28. Eletrônica de consumo
    29. 29. Telefonia móvel
    30. 30. Controle e automação industrial
    31. 31. Telecomunicações
    32. 32. Redes de computadores
    33. 33. Segurança
    34. 34. Entretenimento
    35. 35. Aero-espacial
    36. 36. Rastreamento, posicionamento </li></ul><ul><li>Automação comercial
    37. 37. Robótica
    38. 38. Aparelhos médicos
    39. 39. Processamento de sinais
    40. 40. Sistemas operacionais
    41. 41. Bibliotecas para sistemas embarcados
    42. 42. Design house (hardware e software)
    43. 43. Treinamento
    44. 44. Consultor
    45. 45. ... </li></ul>
    46. 46. Uma geração privilegiada Novas formas de distribuição de conteúdo Imagens: http://pt.wikipedia.org/wiki/Disco_de_vinil e http://pt.wikipedia.org/wiki/CD
    47. 47. Uma geração privilegiada Processadores e placas gráficas
    48. 48. Uma geração privilegiada Dispositivos móveis
    49. 49. Uma geração privilegiada Internet Imagem: http://www.rbt.com.br/
    50. 50. Novas fronteiras após a Internet: vocês estão aproveitando tudo isso ? <ul><li>Wikinomics, a força coletiva
    51. 51. Free and open source software
    52. 52. Virtualização
    53. 53. Novos meios de comunicação
    54. 54. Ampla documentação
    55. 55. Novas posturas: </li><ul><li>Criar e compartilhar
    56. 56. Trabalho coletivo
    57. 57. Pesquise, não arquive </li></ul></ul>
    58. 58. Sistemas embarcados microcontrolados <ul><li>Sistemas embarcados × Propósito geral </li><ul><li>“ Um sistema embarcado é sistema computadorizado projetado para realizar uma ou poucas funções dedicadas, geralmente com restrições de computação de tempo real ” - Wikipedia </li></ul><li>Microcontroladores × Microprocessadores </li><ul><li>“ P equeno computador em um CI consistindo de uma CPU relativamente simples combinada com funções de suporte tais como osciladores, timers, watchdogs, I/O serial e analógico, etc. Memória de programa em flash NOR ou ROM é frequentemente incluída assim como tipicamente uma pequena quantidade de RAM ” - Wikipedia </li></ul><li>Firmware × programa </li><ul><li>“ Termo usada para denotar programas e estruturas de dados, geralmente fixos e pequenos, que controlam internamente vários dispositivos eletrônicos ” - Wikipedia </li></ul></ul>
    59. 59. Eles estão por toda parte !
    60. 60. Evolução da eletrônica embarcada <ul><li>90's: 68HC11 </li><ul><li>8 bits
    61. 61. 1kb RAM, 512b EEPROM
    62. 62. Até 4MHz
    63. 63. A/D (10bits), PWM, UART, SPI, timer
    64. 64. Emulador </li></ul></ul><ul><li>2k's: S08QE </li><ul><li>8 bits
    65. 65. Até 8kb RAM e 128kb flash interna
    66. 66. Até 50MHz
    67. 67. A/D (12bits), PWM, SPI, timer
    68. 68. BDM interface </li></ul></ul><ul><li>2009: STM32F </li><ul><li>32 bits, ARM Cortex M3
    69. 69. Até 64kb RAM, 256kb de flash interna
    70. 70. Até 72MHz
    71. 71. MAC Ethernet 10/100 com suporte a IEEE 1588
    72. 72. CAN, USB, SPI, UART, timer, A/D (12bits), PWM, jtag </li></ul></ul>
    73. 73. Evolução da eletrônica embarcada Debug <ul><li>90's: 68HC11 </li></ul><ul><li>2k's: S08QE </li></ul><ul><li>2009: STM32F </li></ul>
    74. 74. Evolução da eletrônica embarcada <ul><li>Relativamente complexo escolher um microcontrolador hoje. Muitas opções entre 8 e 32bits. </li><ul><li>AVR, AVR32, ARM, 8051 (atmel)
    75. 75. MSP430, C2000, Arm M3 (Texas)
    76. 76. PIC (Microchip)
    77. 77. STM8, STM32 (ST)
    78. 78. Rabbit (Rabbit)
    79. 79. HC08, RS08, S12, HC16, Coldfire, ARM (Freescale)
    80. 80. eZ80 (Zilog)
    81. 81. 80C51, XA, ARM7, ARM9, ARM M0/M3 (NXP)
    82. 82. ARM7, ARM9, ARM11 (Digi)
    83. 83. 8051 (vários fabricantes)
    84. 84. R8, H8, SuperH, M16, R32 (Renesas)
    85. 85. SAM8, ARM M3, ARM R4 (Samsung)
    86. 86. ....... </li></ul></ul>
    87. 87. Alguns parâmetros na hora da escolha <ul><li>Disponibilidade de ferramentas de desenvolvimento (compiladores, bibliotecas, jtags/DBM)
    88. 88. Comunidade ao redor do projeto
    89. 89. Facilidade de programação, gravação e debug
    90. 90. Suporte local e facilidade de importação
    91. 91. Faixa de temperatura operação
    92. 92. Periféricos disponíveis no controlador
    93. 93. Custo e estimativa de tempo de vida no mercado
    94. 94. Encapsulamento
    95. 95. Consumo </li></ul>
    96. 96. Mas nem tudo mudou ... <ul><li>Vivemos num mundo finito ! Mesmo que o PC não nos ajude a pensar assim... </li><ul><li>Armazenamento é finito
    97. 97. Processamento é finito
    98. 98. Alimentação é finita
    99. 99. Tempo para executar operações é finito </li></ul><li>Além disso, programação e arquitetura de computadores andam juntas
    100. 100. Sistemas operacionais também existem para os pequenos </li></ul>
    101. 101. Armazenamento volátil Stacks e memória global <ul><li>Qual a diferença ? </li></ul>#define TAM_VETOR 256 void funcao(void) { char vetor[TAM_VETOR]; vetor[0] = 1; vetor[TAM_VETOR-1]=TAM_VETOR-1; } int main(int argc, char *argv[]) { funcao(); return 0; } #define TAM_VETOR 256 char vetor[TAM_VETOR]; void funcao(void) { vetor[0] = 1; vetor[TAM_VETOR-1]=TAM_VETOR-1; } int main(int argc, char *argv[]) { funcao(); return 0; }
    102. 102. Vetor no heap
    103. 103. Vetor na memória global
    104. 104. Armazenamento volátil Stacks e memória global <ul><li>Qual é o seu mapa de memória ? </li><ul><li>Em PCs ninguém se preocupa, mas em sistemas embarcados é algo obrigatório </li></ul><li>Deve-se ficar atento ao uso de stacks e heaps
    105. 105. Variáveis no escopo de uma função são alocadas no stack.
    106. 106. Solução: use static. </li></ul>0x0000 0x0280 0x0200 0x0300 0x037f 1kb de RAM Variáveis globais (512) Stack (128) Outros Heap (128) Interrup. (128) #define TAM_VETOR 256 void funcao(void) { static char vetor[TAM_VETOR]; vetor[0] = 1; vetor[TAM_VETOR-1]=TAM_VETOR-1; }
    107. 107. Armazenamento volátil Heap <ul><li>Em geral, alocação dinâmica pode ser usada, desde que na inicialização apenas
    108. 108. Durante a execução leva à fragmentação da memória, mesmo quando todo malloc() tem um free() correspondente
    109. 109. Neste caso, prefira pools de memória: </li><ul><li>O pool é uma coleção de buffers de memória, todos do mesmo tamanho
    110. 110. Cada pool tem gerenciamento próprio
    111. 111. Não irá ocorrer fragmentação </li></ul></ul>Pool de memória (gerenciamento) buffer 1 buffer 2 buffer 3 buffer 4 buffer 5 buffer 6 ... buffer n
    112. 112. Armazenamento não volátil Uso da flash <ul><li>Mantenha seu código sob controle no quesito tamanho
    113. 113. Tenha uma estimativa do uso de flash em termos de bytes/SLOC (SLOC = linhas de código fonte)
    114. 114. A eficiência irá depender da arquitetura e do compilador, considerando-se o mesmo programa </li></ul>
    115. 115. Armazenamento não volátil Uso da flash <ul><li>Kit caseiro com MSP430F2274
    116. 116. 32kb flash, 1kb RAM
    117. 117. Módulo de GPS externo (serial)
    118. 118. Display 16x2 externo
    119. 119. Objetivo: mostrar as coordenadas, data/ e hora no display
    120. 120. 406 linhas de código C (sloccount) </li><ul><li>1324 bytes de flash
    121. 121. 263 bytes de RAM
    122. 122. ~3,18 kb/KSLOC </li></ul></ul>
    123. 123. Processamento <ul><li>Escolha um processador adequado para o processo
    124. 124. Valores fornecidos de MIPS ou DMIPS podem ajudar a definir o processador (MIPS = milhões de instruções por segundo)
    125. 125. Use mais de um processador, se for o caso, ou FPGAs, se o consumo permitir.
    126. 126. Processadores com ponto flutuante e operações em hardware (criptografia, por exemplo) podem viabilizar vários projetos. </li></ul>
    127. 127. Processamento <ul><li>Loops infinitos podem ser um problema em ambientes multi-tarefa: </li><ul><li>Crie tarefas com ”time slice”
    128. 128. Use ”sleeps” quando necessário
    129. 129. Sincronize adequadamente suas tarefas </li></ul><li>Crie sistemas com watchdog </li></ul>int tarefa(int argc) { while(1) { if(recebe_dados()) { envia_dados(); sleep(10); } else { /* indicar erro aqui */ sleep(10); } } } int tarefa(int argc) { while(1) { if(recebe_dados()) { envia_dados(); sleep(10); } } }
    130. 130. Alimentação <ul><li>Projetos com restrições de consumo devem ter tratamento especial, cada componente deve ser analisado.
    131. 131. Escolha processadores com ”sleep modes” adequados.
    132. 132. Se alimentado por bateria, crie circuitos de supervisão da carga da bateria e formas de indicar que ela está fraca.
    133. 133. Tente operar por interrupção, nunca por polling, para economizar bateria </li><ul><li>interrupção: um evento gera uma interrupção que tira o processador do modo de economia de energia e realiza uma tarefa
    134. 134. polling: fica-se executando continuamente, procurando por novos eventos </li></ul></ul>
    135. 135. Tempo de execução <ul><li>Suas rotinas levam um determinado tempo para serem executadas, é sério !
    136. 136. Isto é especialmente crítico no tratamento de interrupções.
    137. 137. Exemplo: </li><ul><li>Seu processador está recebendo bytes na serial a uma taxa de 115200bps (config. 8N1 = start bit, 8 bits, stop bit = 10 bits)
    138. 138. O clock do sistema é de 5MHz e o controlador executa uma instrução por ciclo (5MIPS)
    139. 139. Isto significa 432 ciclos de clock entre bytes. Se a sua rotina de tratamento de interrupção for muito lenta, você irá perder bytes ! </li></ul></ul>
    140. 140. Alinhamento de memória e endianess <ul><li>Nem todas as plataformas alinham dados na memória da mesma forma.
    141. 141. Considere o seguinte código e assuma um processador ARM (32 bits). Como a variável var estará na memória ? </li></ul>typedef struct SData { unsigned char flags; unsigned long len; unsigned char opt; unsigned short optval; } TData; TData var = { 0x11, 0x22334455, 0x66, 0x7788 };
    142. 142. Alinhamento de memória e endianess BIG ENDIAN 0xXXXXXXX0 (múltiplo de 4) 0 1 2 3 LITTLE ENDIAN 0xXXXXXXX0 (múltiplo de 4) 0 1 2 3 <ul><li>Endianess: </li><ul><li>big endian: byte mais significativo na menor posição de memória
    143. 143. little endian: byte mais significativo na maior posição de memória </li></ul><li>A arquiterura ARM usa alinhamento no acesso da memória: </li><ul><li>longs se alinham a cada 4 bytes
    144. 144. shorts se alinham a cada 2 bytes
    145. 145. Logo, sizeof(var) = 12 !
    146. 146. Tratamento de buffers deve ser feito com cuidado, ainda mais se proveniente de uma plataforma com endianess diferente </li></ul></ul>11 22 33 44 55 66 77 88 11 55 44 33 22 66 88 77
    147. 147. Sistemas operacionais Opções <ul><ul><li>FreeRTOS
    148. 148. eCos
    149. 149. Contiki
    150. 150. TinyOS
    151. 151. TNkernel
    152. 152. XMK
    153. 153. FreeOSEC
    154. 154. uClinux/Linux
    155. 155. Symbian
    156. 156. QNX
    157. 157. ... </li></ul></ul><ul><ul><li>MQX/Freescale
    158. 158. ThreadX
    159. 159. uC/OS II
    160. 160. Fusion
    161. 161. Nucleus
    162. 162. WinCE
    163. 163. CMX
    164. 164. safeRTOS
    165. 165. VelOSity, Integrity
    166. 166. PowerPac
    167. 167. ... </li></ul></ul>
    168. 168. Sistemas operacionais Tamanhos SISTEMA FreeRTOS CMX ThreadX eCosPro Integrity uClinux ROM < 4.3k < 10k < 5k < 2k < 95k < 512k RAM < 1k < 1k < 5k < 1k < 40k < 2MB (se não for XIP) <ul><li>Algumas medidas de footprint para um STR7 e STR9 (da STM, ARM) </li></ul>Fonte: http://www.st.com/mcu/contentid-90.html
    169. 169. Sistemas embarcados em softcore <ul><li>Existem vários projetos de controladores em FPGAs ( http://www.opencores.org/ ). Interessante para projetos com necessidades específicas.
    170. 170. A Altera disponibiliza o NIOS II (32 bits) e lista vários outros softcores para 8, 16 e 32 bits. Existe um Coldfire V1 listado como gratuito.
    171. 171. Xilinx também possui estratégia similar: </li><ul><li>PicoBlaze (8 bits, pode ser colocado num CPLD)
    172. 172. MicroBlaze (32 bits) </li></ul></ul>
    173. 173. Dando o chute inicial <ul><li>Adquira um kit de desenvolvimento ou monte o seu próprio kit (veja o site www.olimex.com)
    174. 174. Envolva-se em um projeto da faculdade ou estágio
    175. 175. Controladores interessantes para começar: </li><ul><li>MSP430, AVR, PIC, ... </li></ul><li>Participe de comunidades relacionadas (Arduino, AVRFreaks)
    176. 176. Tenha um projeto e divulgue: </li><ul><li>Blog
    177. 177. Grupos de discussão
    178. 178. Página do projeto </li></ul></ul>http://www.arduino.cc
    179. 179. Dúvidas, comentários, sugestões ? Imagem: cena do filme Madagascar, da DreamWorks
    180. 180. Direitos de cópia Créditos - ShareAlike 2.0 Você é livre para <ul><li>copiar, distribuir, apresentar e executar trabalhos
    181. 181. fazer trabalhos derivados
    182. 182. fazer uso comercial deste trabalho </li></ul>Sob as seguintes condições Créditos. Você deve dar crédito ao autor original. Compartilhe do mesmo modo . Se você alterar, mudar, ou realizar trabalhos usando este como base,você deve redistribuir o trabalhos resultante sob uma licença idêntica a esta. <ul><li>Para qualquer reuso ou distribuição você deve deixar claro os termos de licença deste trabalho.
    183. 183. Qualquer uma destas condições podem ser abandonadas se você obtiver uma permissão do detentor dos direitos autorais. </li></ul>Faça uso justo e o direitos dos outros não serão afetados de forma alguma pelas restrições acima. Texto da licença: http://creativecommons.org/licenses/by-sa/2.0/legalcode © Copyright 2009 Marcelo Barros [email_address] Correções, sugestões e traduções são bem vindas!

    ×