Chapter 12 Sistemas embarcados: explore sua criatividade construindo Hardware e Software Thiago Moratori Peixoto, Tiago Machado, Luciano Jerez Chaves, Eduardo Pagani Julio Abstract This course aims to present embedded systems and its several applications on science and technologies fields. It will present some basic concepts about embedded systems and digital microelectronics. Moreover, this course will focus on the platforms Arduino and Mbed, both used for digital systems prototyping. It will also describe the hardware of these devices, as well as the basics principles for programming their middleware. The conceptscoveredwillbeexercisedinapplicationsdevelopedduringpracticalworkshops. Resumo Este minicurso tem como objetivo geral apresentar sistemas embarcados e suas infinitas aplicações no campo da ciência e tecnologia. Serão apresentados conceitos básicos de sistemas embarcados e microeletrônica digital. Além disto, o minicurso dará ênfase no desenvolvimentoparaasplataformasdeprototipagemArduinoeMbed,utilizadasnopro- jeto de sistemas digitais. O minicurso apresentará tanto o hardware destes dispositivos, quanto os fundamentos para a programação do middleware. Os conceitos abordados serãoexercitadosemaplicaçõesreaisdesenvolvidasduranteoficinaspráticas. 12.1. Introdução Os sistemas digitais tornaram-se parte do nosso dia-a-dia devido ao modo intenso pelo qual os circuitos digitais e as técnicas digitais passaram a ser utilizados em quase todas as áreas: computadores, automação, robôs, tecnologias e ciências médicas, transportes, telecomunicações,entretenimento,eassimpordiante[Toccietal. 2011]. Para chegarmos onde estamos hoje, a construção de sistemas digitais evoluíram desde o uso das grandes válvulas eletrônicas, passando pelos transistores até chegamos nos atuais circuitos integrados (CI) digitais. Essa evolução foi responsável por permitir a implementaçãodesistemasdigitaiscadavezmaiscomplexosemummenorespaçofísico, utilizando técnicas precisas e sofisticadas durante a fabricação dos CIs [Moore1998]. O baixo custo de fabricação até mesmo dos complexos circuitos integrados (como é o ca- sos dos microprocessadores que usamos em nossos computadores, notebooks e smart- phones), permite que os projetistas incluam cada vez mais funcionalidades nestes sis- temas, tornando-os adequados para as mais diversas aplicações. Entretanto, esse baixo custo de fabricação está associado à produção em larga escala, o que inviabiliza o pro- jeto e fabricação de alguns poucos CIs apenas para fins de teste, ou para utilização em aplicaçõesmuitoespecíficasempequenaescala. Neste contexto, surgiram os Dispositivos Lógicos Programáveis (PLDs em in- glês), que são componentes eletrônicos usados para construir circuitos digitais reconfig- uráveis. Diferente dos circuitos lógicos tradicionais, que possuem um funcionamento lógico fixo definido durante o projeto, os PLDs saem das fábricas sem nenhum compor- tamento fixo, podendo ser programados posteriormente pelos desenvolvedores de acordo com suas necessidades e se tornando propícios para o uso em casos de aprendizagem, prototipagemetestesempequenaescala. O uso dos PLDs levou à criação de microcontroladores. Também conhecidos como MCU, são um computador num chip, contêm um processador, memória e periféri- cos de entrada e saída (E/S). O microcontrolador é como um microprocessador que pode ser programado para funções específicas, em contraste com outros microprocessadores de propósito geral, como os utilizados em computadores. Diferente dos PLDs, os mi- crocontroladoresnãosãoapenasumcircuitoprogramável,masumsistemacompletoque já oferece funcionalidades básicas como gerência de memória e acesso a dispositivos de E/S. Para facilitar ainda mais o desenvolvimento de sistemas utilizando microcon- troladores, eles normalmente são acoplados à plataformas de prototipagem, como é o caso do Arduino [Arduino2012a] e do Mbed [Holdings2011]. Essas plataformas ofer- ecem não somente o microcontrolador, mas também outros componentes para realizar a interface com computadores (como portas USB, Ethernet, RS-232, etc.), componentes de microeletrônica básicos (LEDs e botões), além de outros dispositivos de E/S. Toda a programação destas plataformas é feita através de softwares que são instalados em com- putadores. Através dos ambientes desenvolvidos pelos próprios fabricantes, é possível programar todo o funcionamento desses microcontroladores, além de enviar o código já compiladoparaodispositivo,normalmenteatravésdeumainterfaceUSB. Nestecontexto,esteminicursovisaapresentarduasdasváriasplataformasdepro- totipagem disponíveis: o Arduino e o Mbed. Ambas são plataformas com bom poder de processamento e recursos, que permitem a implementação desde aplicações didáti- cas simples até projetos de pequeno e médio porte, criados a partir da imaginação dos desenvolvedores mais aventureiros. Uma análise com maior precisão classificaria o Ar- duino como uma plataforma voltada principalmente para uso educacional, pois é uma plataforma OpenSource própria para a integração com dispositivos eletrônicos básicos, além de apresentar uma interface de programação simplificada com um conjunto de bib- liotecas básicas já disponíveis para uso. Por sua vez, o Mbed apresenta um hardware mais rápido e potente, incluindo também mais recursos embutidos (como controladores derede)ebibliotecasdesoftwareaindamaissofisticadas,viabilizandoprojetosmaiores. OrestantedesteminicursoapresentaaoleitorasplataformasdeprototipagemAr- duinoeMbed,incluindoalgumasatividadespráticasnousodestesdispositivos. Paraisso, a Seção 12.2 apresenta alguns conceitos de microeletrônica básica, necessários para que possamos entender até mesmo as aplicações mais simples. A Seção 12.3 apresenta as plataformasdeprototipagemeletrônicasMbedeArduino,destacandosuascaracterísticas técnicas. A Seção 12.4 apresenta os ambientes de desenvolvimento e as bibliotecas uti- lizadasparaaprogramaçãodeambosdispositivos. ASeção12.5trazalgunsexemplosde aplicações que podem ser construídas com estes equipamentos e descreve as atividades didáticaspropostascomooficinaprática. Porfim,aSeção12.6apresentaasconsiderações finais. 12.2. Microeletrônica básica Parapodermontarumsistemadigitalinterativoéprecisoalgumtipodeinterfacedecomu- nicaçãocomosusuários. Estainterfaceénormalmenteconstruídaatravésdedispositivos eletrônicos, que são conectados à plataforma de prototipagem. Os componentes eletrôni- cosbásicosmaisutilizadosserãoapresentadosnestaunidade. 12.3. Plataformas de prototipagem Esta unidade visa apresentar em detalhes as plataformas de prototipagem abordadas: Mbed e Arduino. São discutidos as especificações técnicas e os recursos oferecidos por cadaumdosdispositivos. 12.3.1. Mbed Os microcontroladores Mbed consistem de uma série de microcontroladores elaborados paraprototipagemrápida. SãoprojetadoscomencapsulamentoDIP(dualin-linepackage) paramontagememplacasprotoboardsemsolda,stripboardsetrough-hole. Existemduas variantes da plataforma Mbed: a NXP LPC11U24 e a NXP LPC1768, sendo esta última queseráutilizadanessemini-cursodetalformaquetodasasreferênciassãorelacionadas aela[Mbed2012c]. AFigura12.1ilustraoMbedmodeloNXPLPC1768[Mbed2012b]. Figure12.1. VisãofrontaldoMbedNXPLPC1768. EssesmicrocontroladoresincluemumainterfaceUSBdeacessoparaprogramação. Para uso, basta se conectar o dispositivo a uma porta USB do computador, copiar o pro- grama ARM binário para a memória flash para que o processador seja capaz de executar o código. Essa interface é compatível com os sistemas Windows, Mac OS X e Linux, destaformaaplataformaéindiferenteaosistemadoMbed. Oprogramabináriopodeser obtido utilizando-se um compilador em “nuvem”, disponível através do site do próprio fabricante[Holdings2011]. O Mbed possui inúmeras portas de conexões. No total, são 25 pinos disponíveis para o LPC1768. Através destes pinos podem ser incorporados dispositivos e funcionali- dades como interface de rede Ethernet, leitores e gravadores RFID, leitores biométricos, câmeras, teclados numéricos, telas LCD touch screen, entre outros. Além disto, esses microcontroladores podem ser alimentados através da interface USB de um computador ou através de fontes externas com voltagem operando entre 4.5V e 12V. A Figura 12.2 ressaltaasprincipaiscaracterísticasdestemodelodemicrocontrolador. Característica Valor Aplicaçõesalvo Ethernet,USBedealtodesempenho Núcleodeprocessamento ARMCortex-M3 Frequênciadeoperação 96MHz MemóriaFlash 512KB MemóriaRAM 32KB Alimentação 60-120mA Figure12.2. PrincipaiscaracterísticasdehardwaredoNXPLPC1768. Esse modelo também oferece as seguintes interfaces periférica: suporte para con- trolador Ethernet, USBHost e USBDevices, SPI, I2C, CAN, AnalogIn, PwmOut, Analo- gOut,DigitalIneDigitalOut. Cadaumadelassãodetalhadaslogoabaixo. • Ethernet: permitequeosmicrocontroladoresMbedseconectemesecomuniquem com uma rede Ethernet, podendo ser utilizado para conversar com outros disposi- tivosnarede,incluindocomunicaçãocomcomputadoresatravésdaweb,servidores deemailouatuarcomumwebserver(utilizadanospinosp33/34/p35/p36); • USB: com essa interface é possível utilizar o Mbed para, por exemplo, emular mouse e teclado, emular uma porta serial, enviar e receber mensagens MIDI, to- car músicas ao ser reconhecido como um dispositivo de áudio e receber pacotes de áudiovindosdocomputador(utilizadanospinosp31ep32); • SPI(SerialPeripheralInterface): forneceumainterfaceperiféricaserialmestreque permite a comunicação com dispositivos SPI escravos, como memória flash, telas LCD e outros módulos ou circuitos integrados (utilizada nos pinos p5/p6/p7 ou p11/p12/p13); • I2C (Inter-Integrated Circuit): fornece funcionalidade mestre I2C, que por sua vez propicia a comunicação com dispositivos I2C escravos, como memória serial, sensores e outros módulos ou circuitos integrados (utilizada nos pinos p9/p10 ou p27/p28); • CAN ou Controlador de Área de Rede: é um padrão de barramento projetado para permitir que os microcontroladores e dispositivos se comuniquem uns com os out- rossemumcomputadorhost(utilizadanospinosp9/p10oup29/p30); • AnalogIn: usada para ler a tensão aplicada a um pino de entrada analógica (pode utilizarqualquerpinodep15ap20); • PwmOut: utilizadaparacontrolarafrequênciadeumasequênciadepulsosdigitais (podeutilizarqualquerpinodep21ap26); • AnalogOut: utilizadaparaajustaratensãodeumpinodesaídaanalógica(sópode utilizaropinop18); • DigitalIn: utilizada para ler o valor de um pino de entrada digital (pode utilizar qualquerpinodep5ap30); • DigitalOut: utilizada para configurar e controlar um pino de saída digital (pode utilizarqualquerpinodep5ap30). A Figura 12.3 pode ser utilizada como um guia, pois mostra a numeração dos pinosesuasfuncionalidades. Figure12.3. DiagramadeconexõesdoMbedNXPLPC1768. 12.3.2. Arduino O Arduino é uma plataforma Open Source de prototipagem eletrônica baseada em hard- ware e software flexíveis e fáceis de usar [Culkin2012]. O Arduino é capaz de “in- teragir” com o ambiente através de sinais de entrada provenientes de uma variedade de sensores e modificá-lo através de sinais de saídas para atuadores, motores, luzes con- troladoras (acendendo ou apagando um LED por exemplo), etc. O microcontrolador na placaéprogramadousandoalinguagemdeprogramaçãodoArduino(baseadonoframe- work Wiring [Barragán2012], essencialmente C/C++) e o ambiente de desenvolvimento Arduino (baseada no ambiente de desenvolvimento Processing [Fry2012]). Projetos Ar- duino podem ser independentes ou podem comunicar com outros softwares que estejam rodando em um computador. As placas podem ser compradas com facilidade, e o soft- ware de desenvolvimento pode ser baixado gratuitamente. Existem inúmeros projetos de referência do Arduino disponíveis na Web, o usuário é livre para adaptá-los às suas necessidades. Ao contrário do Mbed, o Arduino possui vários modelos diferentes, que variam na capacidade de processamento e quantidade de pinos para conexões externas. Esse minicurso irá tratar apenas da versão UNO, de tal forma que referências posteriores devem ser relacionadas a essa versão. A Figura 12.4 ilustra a visão frontal do Arduino UNO,identificandoaindasuasprincipaisconexões. Figure12.4. VisãofrontaldoArduinoUNOrev3. O Arduino Uno é uma plataforma de prototipagem baseada no microcontrolador ATmega328. A plataforma possui 14 pinos digitais que podem funcionar como pinos de entrada ou saída digital, 6 entradas analógicas, um cristal oscilador de 16MHz, uma portadeconexãoUSB,umconectordealimentação,eumbotãodereset. Estaplataforma contém tudo o que é necessário para suportar o microcontrolador. Basta conectá-la a um computador com um cabo USB ou ligá-la em uma fonte de energia para que a mesma comece a funcionar. A Figura 12.5 abaixo lista as principais características de hardware doArduino. Característica Valor Microcontrolador ATmega328 VoltagemdeOperação 5V Voltagemrecomendada 7-12V Voltagemmáxima 6-20V PinosDigitaisdeE/S 14 PinosAnalógicos 6 CorrentepinodeE/S 40mA Correntepinode3.3V 50mA MemóriaFlash 32KB(ATmega328) SRAM 2KB(ATmega328) EEPROM 1KB(ATmega328) VelocidadedeClock 16MHz Figure12.5. PrincipaiscaracterísticasdehardwaredoArduinoUNO. Cada um dos 14 pinos digitais do Arduino Uno podem ser utilizados tanto como pinos de entrada ou de saída. Essa configuração é feita em software, durante o desen- volvimentodoaplicativo. Todosospinosoperamcom5Voltseumacorrentemáximade 40 mA. Cada pino tem um resistor pull-up interno (desconectado por padrão) de 20-50 kOhms. Alémdisso,algunspinostêmfunçõesespecializadas,comoosindicadosabaixo: • Pinosseriais0(RX)e1(TX)podemserusadosparareceber(RX)etransmitir(TX) dadosseriais; • Pinosdeinterrupçõesexternas2e3,quepodemserconfiguradosparadispararuma interrupçãoporumalgumavariaçãoespecíficaemseussinaisdeentrada; • PinoLEDnúmero13,ondeháumLEDbuilt-inqueacendequandoopinoestácom valoralto,eapagacasocontrário. O Arduino Uno tem também 6 entradas analógicas, rotuladas de A0 a A5, que podem ser conectadas em sensores como termômetros, sensores de luminosidade, etc. Cadaumprovê10bitsderesolução(1024valoresdiferentes). Alémdissohátambémum botão de reset, usado para reiniciar o microcontrolador reiniciando toda a placa quando acontecealgumproblemaquebloqueiaofuncionamentodamesma. Uma das principais características do Arduino é que ele é um projeto livre, onde todas as especificações estão publicamente disponíveis na Web. Isso permite que desen- volvedorespossamconstruirsuasprópriasplataformas,oumesmomodificarasexistentes para atender às suas necessidades. A Figura 12.6 ilustra o projeto de referência do Ar- duinoUno. (cid:1)(cid:50)(cid:51)(cid:21)(cid:52)(cid:18)(cid:53)(cid:2)(cid:54)(cid:3)(cid:54)(cid:35)(cid:14)(cid:25)(cid:54)(cid:22)(cid:55)(cid:56)(cid:55)(cid:50)(cid:55)(cid:18)(cid:57)(cid:55)(cid:54)(cid:15)(cid:55)(cid:58)(cid:52)(cid:59)(cid:18) (cid:22)(cid:22)(cid:55)(cid:4)(cid:56)(cid:5)(cid:55)(cid:50)(cid:1)(cid:55)(cid:22)(cid:18)(cid:57)(cid:15)(cid:55)(cid:7)(cid:14)(cid:54)(cid:15)(cid:5)(cid:55)(cid:54)(cid:58)(cid:10)(cid:52)(cid:59)(cid:22)(cid:18)(cid:25)(cid:58)(cid:54)(cid:15)(cid:1)(cid:35)(cid:22)(cid:8)(cid:4)(cid:2)(cid:54)(cid:10)(cid:9)(cid:22)(cid:63)(cid:54)(cid:25)(cid:7)(cid:14)(cid:13)(cid:8)(cid:7)(cid:15)(cid:24)(cid:35)(cid:4)(cid:15)(cid:15)(cid:7)(cid:54)(cid:14)(cid:62)(cid:1)(cid:5)(cid:9)(cid:54)(cid:54)(cid:38)(cid:7)(cid:9)(cid:35)(cid:62)(cid:2)(cid:54)(cid:1)(cid:54)(cid:14)(cid:14)(cid:25)(cid:15)(cid:2)(cid:54)(cid:62)(cid:54)(cid:26)(cid:24)(cid:7)(cid:7)(cid:3)(cid:2)(cid:7)(cid:36)(cid:2)(cid:54)(cid:4)(cid:1)(cid:15)(cid:24)(cid:24)(cid:54)(cid:2)(cid:54)(cid:34)(cid:25)(cid:1)(cid:63)(cid:54)(cid:35)(cid:1)(cid:24)(cid:14)(cid:2)(cid:23)(cid:9)(cid:54)(cid:7)(cid:62)(cid:3)(cid:32)(cid:54)(cid:1)(cid:10)(cid:50)(cid:24)(cid:51)(cid:7)(cid:21)(cid:4)(cid:52)(cid:15)(cid:18)(cid:53)(cid:54)(cid:26)(cid:54)(cid:15)(cid:1)(cid:7)(cid:9)(cid:22)(cid:8)(cid:22)(cid:24)(cid:1)(cid:1)(cid:14)(cid:7)(cid:3)(cid:2)(cid:7)(cid:9)(cid:4)(cid:54)(cid:9)(cid:1)(cid:54)(cid:24)(cid:25)(cid:24)(cid:34)(cid:54)(cid:25)(cid:54)(cid:3)(cid:2)(cid:4)(cid:36)(cid:22)(cid:4)(cid:8)(cid:22)(cid:36)(cid:54)(cid:26)(cid:1)(cid:1)(cid:14)(cid:22)(cid:2)(cid:22)(cid:1)(cid:38)(cid:1)(cid:7)(cid:14)(cid:24)(cid:2)(cid:7)(cid:2)(cid:7)(cid:4)(cid:23)(cid:9)(cid:54)(cid:25)(cid:63)(cid:54)(cid:22)(cid:4)(cid:54)(cid:43)(cid:34)(cid:10)(cid:7)(cid:2)(cid:22)(cid:14)(cid:4)(cid:4)(cid:9)(cid:9)(cid:9)(cid:9)(cid:54)(cid:25)(cid:54)(cid:34)(cid:22)(cid:25)(cid:54)(cid:7)(cid:22)(cid:3)(cid:54)(cid:1)(cid:10)(cid:54)(cid:24)(cid:10)(cid:7)(cid:4)(cid:1)(cid:15)(cid:22)(cid:63)(cid:2)(cid:7)(cid:8)(cid:35)(cid:24)(cid:1)(cid:22)(cid:54)(cid:10)(cid:35)(cid:22)(cid:10)(cid:25)(cid:9)(cid:4) (cid:1)(cid:50)(cid:61)(cid:2)(cid:67)(cid:55)(cid:67)(cid:50)(cid:55)(cid:69)(cid:51)(cid:65)(cid:55)(cid:58)(cid:21)(cid:54)(cid:54)(cid:53)(cid:55)(cid:40)(cid:52)(cid:18)(cid:18)(cid:54)(cid:50)(cid:56)(cid:53)(cid:53)(cid:54)(cid:53)(cid:61)(cid:54)(cid:51)(cid:67)(cid:50)(cid:33)(cid:54)(cid:21)(cid:55)(cid:56)(cid:21)(cid:64)(cid:57)(cid:54)(cid:64)(cid:61)(cid:61)(cid:65)(cid:21)(cid:54)(cid:60)(cid:54)(cid:52)(cid:50)(cid:18)(cid:33)(cid:58)(cid:55)(cid:56)(cid:55)(cid:53)(cid:64)(cid:54)(cid:51)(cid:18)(cid:50)(cid:66)(cid:55)(cid:33)(cid:57)(cid:55)(cid:56)(cid:55)(cid:54)(cid:52)(cid:64)(cid:57)(cid:18)(cid:54)(cid:61)(cid:53)(cid:67)(cid:52)(cid:52)(cid:61)(cid:53)(cid:50)(cid:52)(cid:64)(cid:53)(cid:54)(cid:18)(cid:57)(cid:18)(cid:18)(cid:54)(cid:67)(cid:59)(cid:53)(cid:54)(cid:64)(cid:64)(cid:55)(cid:18)(cid:50)(cid:18)(cid:58)(cid:54)(cid:64)(cid:61)(cid:51)(cid:54)(cid:67)(cid:61)(cid:57)(cid:54)(cid:53)(cid:55)(cid:61)(cid:58)(cid:55)(cid:54)(cid:54)(cid:67)(cid:58)(cid:26)(cid:50)(cid:64)(cid:40)(cid:52)(cid:58)(cid:69)(cid:55)(cid:55)(cid:69)(cid:61)(cid:54)(cid:52)(cid:60)(cid:57)(cid:67)(cid:57)(cid:52)(cid:54)(cid:58)(cid:64)(cid:56)(cid:9)(cid:52)(cid:54)(cid:57)(cid:70)(cid:53)(cid:52)(cid:61)(cid:64)(cid:55)(cid:55)(cid:56)(cid:61)(cid:54)(cid:54)(cid:54)(cid:52)(cid:64)(cid:18)(cid:53)(cid:53)(cid:18)(cid:53)(cid:18)(cid:50)(cid:65)(cid:54)(cid:54)(cid:58)(cid:50)(cid:3)(cid:54)(cid:55)(cid:54)(cid:56)(cid:64)(cid:55)(cid:64)(cid:58)(cid:18)(cid:64)(cid:61)(cid:40)(cid:55)(cid:51)(cid:61)(cid:53)(cid:21)(cid:50)(cid:54)(cid:18)(cid:52)(cid:40)(cid:50)(cid:64)(cid:55)(cid:58)(cid:50)(cid:69)(cid:53)(cid:58)(cid:52)(cid:58)(cid:60)(cid:11)(cid:5)(cid:54)(cid:6)(cid:19)(cid:51)(cid:54)(cid:52)(cid:52)(cid:53)(cid:12)(cid:58)(cid:69)(cid:21)(cid:14)(cid:52)(cid:50)(cid:61)(cid:13)(cid:54)(cid:57)(cid:65)(cid:54)(cid:58)(cid:15)(cid:52)(cid:61)(cid:54)(cid:18)(cid:21)(cid:54)(cid:68)(cid:51)(cid:58)(cid:60)(cid:67)(cid:55)(cid:61)(cid:71)(cid:50)(cid:55)(cid:64)(cid:58)(cid:21)(cid:57)(cid:57)(cid:61)(cid:57)(cid:58)(cid:61)(cid:50)(cid:54)(cid:61)(cid:53)(cid:52)(cid:61)(cid:52)(cid:16)(cid:40)(cid:53)(cid:53)(cid:8)(cid:55)(cid:17)(cid:61)(cid:18)(cid:54)(cid:52)(cid:70)(cid:57)(cid:16)(cid:53)(cid:17)(cid:58)(cid:55)(cid:67)(cid:18)(cid:18)(cid:54)(cid:50)(cid:33)(cid:64)(cid:58)(cid:54)(cid:56)(cid:18)(cid:54)(cid:53)(cid:64)(cid:64)(cid:59)(cid:50)(cid:50)(cid:61)(cid:55)(cid:54)(cid:66)(cid:54)(cid:57)(cid:64)(cid:55)(cid:54)(cid:53)(cid:68)(cid:18)(cid:51)(cid:13)(cid:18)(cid:65)(cid:52)(cid:54)(cid:61)(cid:7)(cid:56)(cid:62)(cid:54)(cid:67)(cid:14)(cid:69)(cid:61)(cid:50)(cid:52)(cid:52)(cid:55)(cid:53)(cid:57)(cid:33)(cid:16)(cid:17)(cid:39)(cid:22)(cid:14)(cid:16)(cid:1)(cid:61)(cid:58)(cid:21)(cid:58)(cid:5)(cid:55)(cid:16)(cid:6)(cid:28)(cid:20)(cid:55)(cid:61)(cid:54)(cid:54)(cid:63)(cid:53)(cid:50)(cid:14)(cid:18)(cid:54)(cid:70)(cid:68)(cid:50)(cid:53)(cid:16)(cid:17)(cid:39)(cid:22)(cid:14)(cid:16)(cid:38)(cid:15)(cid:55)(cid:54)(cid:52)(cid:61)(cid:52)(cid:18)(cid:51)(cid:61)(cid:52)(cid:57)(cid:67)(cid:57)(cid:62)(cid:55)(cid:53)(cid:54)(cid:53)(cid:53)(cid:32)(cid:21)(cid:33)(cid:54)(cid:50)(cid:15)(cid:61)(cid:54)(cid:54)(cid:62)(cid:40)(cid:18)(cid:53)(cid:21)(cid:35)(cid:64)(cid:53)(cid:54)(cid:18)(cid:18)(cid:61)(cid:61)(cid:9)(cid:52)(cid:51)(cid:52)(cid:53)(cid:60)(cid:57)(cid:11)(cid:38)(cid:55)(cid:61)(cid:52)(cid:55)(cid:27)(cid:69)(cid:54)(cid:56)(cid:8)(cid:13)(cid:52)(cid:56)(cid:32)(cid:52)(cid:61)(cid:13)(cid:52)(cid:18)(cid:54)(cid:52)(cid:18)(cid:8)(cid:3)(cid:55)(cid:2)(cid:55)(cid:27)(cid:64)(cid:58)(cid:8)(cid:67)(cid:10)(cid:51)(cid:69)(cid:54)(cid:55)(cid:52)(cid:64)(cid:32)(cid:37)(cid:62)(cid:54)(cid:50)(cid:55)(cid:54)(cid:8)(cid:52)(cid:1)(cid:58)(cid:54)(cid:28)(cid:27)(cid:21)(cid:64)(cid:50)(cid:52)(cid:18)(cid:51)(cid:58)(cid:54)(cid:51)(cid:59)(cid:61)(cid:21)(cid:53)(cid:55)(cid:54)(cid:52)(cid:56)(cid:18)(cid:33)(cid:58)(cid:50)(cid:53)(cid:53)(cid:52)(cid:59)(cid:55)(cid:54)(cid:33)(cid:18)(cid:50)(cid:50)(cid:24)(cid:35)(cid:55)(cid:54)(cid:54)(cid:54)(cid:33)(cid:68)(cid:56)(cid:3)(cid:58)(cid:16)(cid:21)(cid:55)(cid:16)(cid:21)(cid:52)(cid:1)(cid:61)(cid:27)(cid:61)(cid:11)(cid:50)(cid:21)(cid:67)(cid:58)(cid:12)(cid:70)(cid:5)(cid:12)(cid:50)(cid:61)(cid:54)(cid:55)(cid:6)(cid:54)(cid:55)(cid:61)(cid:13)(cid:18)(cid:1)(cid:67)(cid:58)(cid:15)(cid:54)(cid:53)(cid:57)(cid:52)(cid:2)(cid:58)(cid:67)(cid:61)(cid:4)(cid:54)(cid:52)(cid:64)(cid:18)(cid:49)(cid:18)(cid:56)(cid:8)(cid:53)(cid:59)(cid:50)(cid:3)(cid:55)(cid:33)(cid:58)(cid:15)(cid:11)(cid:54)(cid:64)(cid:61)(cid:12)(cid:53)(cid:61)(cid:52)(cid:53)(cid:13)(cid:54)(cid:61)(cid:18)(cid:67)(cid:32)(cid:55)(cid:54)(cid:33)(cid:32)(cid:5)(cid:14)(cid:15) (cid:29)(cid:12) (cid:24)(cid:35)(cid:3)(cid:16)(cid:20)(cid:38)(cid:27)(cid:12)(cid:6)(cid:15) (cid:16)(cid:16) (cid:28)(cid:28)(cid:27)(cid:10)(cid:26)(cid:22)(cid:27)(cid:7)(cid:14) (cid:19)(cid:3)(cid:10)(cid:15)(cid:20)(cid:8)(cid:16)(cid:20)(cid:21)(cid:16)(cid:11) (cid:13)(cid:7)(cid:14) (cid:27)(cid:27)(cid:3)(cid:7)(cid:7)(cid:8)(cid:8)(cid:8)(cid:13)(cid:7)(cid:28)(cid:16)(cid:16)(cid:14)(cid:7)(cid:27)(cid:27)(cid:16)(cid:1)(cid:25)(cid:28)(cid:15)(cid:35)(cid:5)(cid:29)(cid:46)(cid:3)(cid:2)(cid:30)(cid:14)(cid:13)(cid:15)(cid:8)(cid:25)(cid:15)(cid:31)(cid:27)(cid:19)(cid:28)(cid:12)(cid:27)(cid:32)(cid:28)(cid:28)(cid:17)(cid:29)(cid:30)(cid:9)(cid:11)(cid:2)(cid:31)(cid:12)(cid:19)(cid:32)(cid:10)(cid:17)(cid:20)(cid:8)(cid:2)(cid:11)(cid:21)(cid:27)(cid:28)(cid:12)(cid:16)(cid:8)(cid:11)(cid:13)(cid:17)(cid:12)(cid:28)(cid:17)(cid:13)(cid:18) (cid:5)(cid:14)(cid:15) (cid:5)(cid:14)(cid:15) (cid:5)(cid:14)(cid:15) (cid:5)(cid:14)(cid:15) (cid:5)(cid:14)(cid:15) (cid:16) (cid:7)(cid:14) (cid:25)(cid:35)(cid:2) (cid:12)(cid:11)(cid:27)(cid:13)(cid:27) (cid:10)(cid:45)(cid:28)(cid:10)(cid:45)(cid:28)(cid:35)(cid:9)(cid:38)(cid:10)(cid:45)(cid:16)(cid:10)(cid:45)(cid:16)(cid:43)(cid:28)(cid:16)(cid:28)(cid:27)(cid:19)(cid:35)(cid:9)(cid:36)(cid:43)(cid:7)(cid:4)(cid:35)(cid:24)(cid:35)(cid:5)(cid:14)(cid:15)(cid:9)(cid:15)(cid:38)(cid:44)(cid:16)(cid:24)(cid:16) (cid:38)(cid:24)(cid:3)(cid:28)(cid:16)(cid:10)(cid:5)(cid:38)(cid:16)(cid:17)(cid:16)(cid:17)(cid:29)(cid:17)(cid:19)(cid:12)(cid:34)(cid:15)(cid:15)(cid:17)(cid:16)(cid:44)(cid:28)(cid:17)(cid:31)(cid:11)(cid:33)(cid:16)(cid:1)(cid:17)(cid:8)(cid:17)(cid:35)(cid:10)(cid:5)(cid:38)(cid:16)(cid:17)(cid:16)(cid:17)(cid:29)(cid:17)(cid:19)(cid:28)(cid:28)(cid:20)(cid:18)(cid:9)(cid:28)(cid:28)(cid:5)(cid:22)(cid:22)(cid:38)(cid:6)(cid:12)(cid:14)(cid:13)(cid:22)(cid:22)(cid:15)(cid:8)(cid:14)(cid:14)(cid:8)(cid:27)(cid:27)(cid:16)(cid:19)(cid:15)(cid:1)(cid:22)(cid:22)(cid:8)(cid:7)(cid:7)(cid:16)(cid:15)(cid:15)(cid:8)(cid:8)(cid:6)(cid:21)(cid:31)(cid:11)(cid:9)(cid:9)(cid:16)(cid:27)(cid:12)(cid:22)(cid:16)(cid:10)(cid:10)(cid:3)(cid:16)(cid:16) (cid:5)(cid:14)(cid:15)(cid:28)(cid:19)(cid:29)(cid:11)(cid:5)(cid:22)(cid:12)(cid:5)(cid:4)(cid:14)(cid:16)(cid:13)(cid:22)(cid:9)(cid:15)(cid:29)(cid:35)(cid:43)(cid:43)(cid:4)(cid:25)(cid:3)(cid:35)(cid:13)(cid:22)(cid:22)(cid:28)(cid:2)(cid:2)(cid:2)(cid:5)(cid:35)(cid:35)(cid:36)(cid:9)(cid:15)(cid:15)(cid:28)(cid:16)(cid:28)(cid:8)(cid:30)(cid:14)(cid:14)(cid:38)(cid:8)(cid:37)(cid:16)(cid:17)(cid:39)(cid:22)(cid:14)(cid:16)(cid:8)(cid:31)(cid:11)(cid:11)(cid:27)(cid:29)(cid:15)(cid:13)(cid:15)(cid:1)(cid:28)(cid:28)(cid:40)(cid:12)(cid:8)(cid:10)(cid:13)(cid:16)(cid:8)(cid:5)(cid:23)(cid:22)(cid:27)(cid:16)(cid:14)(cid:28)(cid:20)(cid:22)(cid:15)(cid:43)(cid:4)(cid:2)(cid:43)(cid:43)(cid:27)(cid:27)(cid:28)(cid:28)(cid:28)(cid:27)(cid:28)(cid:16)(cid:10)(cid:28)(cid:16)(cid:19)(cid:6)(cid:20)(cid:17)(cid:30)(cid:27)(cid:19)(cid:16)(cid:28)(cid:2)(cid:16)(cid:22)(cid:1)(cid:35)(cid:2)(cid:27)(cid:5)(cid:13)(cid:1)(cid:35)(cid:43)(cid:43)(cid:22)(cid:35)(cid:10)(cid:35)(cid:15)(cid:15)(cid:3)(cid:8)(cid:13)(cid:2)(cid:2)(cid:1)(cid:13)(cid:4)(cid:5)(cid:8)(cid:31)(cid:11)(cid:14)(cid:1)(cid:1)(cid:8)(cid:15)(cid:4)(cid:8)(cid:8)(cid:9)(cid:1)(cid:15)(cid:14)(cid:24)(cid:24)(cid:8)(cid:4)(cid:8)(cid:10)(cid:5)(cid:15)(cid:16)(cid:28)(cid:2)(cid:41)(cid:1)(cid:41)(cid:10)(cid:10)(cid:6)(cid:8)(cid:8)(cid:35)(cid:17)(cid:16)(cid:42)(cid:41)(cid:28)(cid:47)(cid:8)(cid:15)(cid:31)(cid:2)(cid:16)(cid:3)(cid:2)(cid:26)(cid:9)(cid:41)(cid:10)(cid:35)(cid:34)(cid:15)(cid:14)(cid:27)(cid:17)(cid:19)(cid:13)(cid:42)(cid:41)(cid:47)(cid:36)(cid:43)(cid:41)(cid:8)(cid:41)(cid:10)(cid:10)(cid:8)(cid:26)(cid:7)(cid:41)(cid:15)(cid:14)(cid:41)(cid:15)(cid:22)(cid:39)(cid:7)(cid:38)(cid:41)(cid:17)(cid:14)(cid:2)(cid:22)(cid:41)(cid:7)(cid:43)(cid:47)(cid:41)(cid:41)(cid:41)(cid:47)(cid:47)(cid:47)(cid:1)(cid:1)(cid:20)(cid:10)(cid:25)(cid:2)(cid:9)(cid:1)(cid:3)(cid:3)(cid:15)(cid:2)(cid:47)(cid:7)(cid:7)(cid:8)(cid:19)(cid:8)(cid:8)(cid:25)(cid:7)(cid:14)(cid:14)(cid:9)(cid:16)(cid:7)(cid:25)(cid:41)(cid:41)(cid:14)(cid:41)(cid:41)(cid:47)(cid:9)(cid:7)(cid:25)(cid:9)(cid:16)(cid:41)(cid:41)(cid:24)(cid:2)(cid:7)(cid:47)(cid:47)(cid:2)(cid:19)(cid:8)(cid:28)(cid:14)(cid:9)(cid:8)(cid:1)(cid:7)(cid:1)(cid:29)(cid:1)(cid:25)(cid:1)(cid:39)(cid:41)(cid:9)(cid:43)(cid:47)(cid:14)(cid:47)(cid:8)(cid:16)(cid:17)(cid:2)(cid:47)(cid:10)(cid:10)(cid:10)(cid:7)(cid:7)(cid:7)(cid:7)(cid:10)(cid:41)(cid:41)(cid:2)(cid:47)(cid:47)(cid:47)(cid:47)(cid:47)(cid:47)(cid:15)(cid:14)(cid:14)(cid:14)(cid:2)(cid:1)(cid:17)(cid:30)(cid:10)(cid:10)(cid:10)(cid:10)(cid:10)(cid:10)(cid:10)(cid:10)(cid:8)(cid:8)(cid:8)(cid:16)(cid:25)(cid:38)(cid:12)(cid:16)(cid:16)(cid:17)(cid:12)(cid:47)(cid:47)(cid:8)(cid:8)(cid:8)(cid:8)(cid:8)(cid:8)(cid:8)(cid:8)(cid:47)(cid:7)(cid:25)(cid:7)(cid:7)(cid:25)(cid:43)(cid:47)(cid:8)(cid:47)(cid:47)(cid:47)(cid:47)(cid:47)(cid:47)(cid:14)(cid:14)(cid:14)(cid:1)(cid:7)(cid:7)(cid:7)(cid:7)(cid:7)(cid:7)(cid:7)(cid:7)(cid:7)(cid:7)(cid:7)(cid:7)(cid:7)(cid:7)(cid:8)(cid:8)(cid:14)(cid:14)(cid:14)(cid:14)(cid:14)(cid:14)(cid:14)(cid:14)(cid:14)(cid:14)(cid:14)(cid:14)(cid:14)(cid:14)(cid:2)(cid:24)(cid:2)(cid:2)(cid:2)(cid:7)(cid:14)(cid:39)(cid:16)(cid:16)(cid:2)(cid:2)(cid:2)(cid:2)(cid:2)(cid:2)(cid:2)(cid:2)(cid:2)(cid:16)(cid:2)(cid:2)(cid:2)(cid:2)(cid:16)(cid:16)(cid:2)(cid:1)(cid:8)(cid:38)(cid:27)(cid:28)(cid:28)(cid:17)(cid:27)(cid:16)(cid:20)(cid:29)(cid:17)(cid:16)(cid:6)(cid:17)(cid:16)(cid:19)(cid:12)(cid:29)(cid:27)(cid:28)(cid:17)(cid:24)(cid:42)(cid:42)(cid:42)(cid:42)(cid:42)(cid:42)(cid:42)(cid:42)(cid:42)(cid:42)(cid:42)(cid:42)(cid:42)(cid:42)(cid:42)(cid:42)(cid:42)(cid:42)(cid:42)(cid:42)(cid:42)(cid:10)(cid:10)(cid:10)(cid:10)(cid:10)(cid:10)(cid:10)(cid:10)(cid:10)(cid:10)(cid:10)(cid:10)(cid:10)(cid:16)(cid:10)(cid:10)(cid:10)(cid:10)(cid:10)(cid:10)(cid:10)(cid:10)(cid:15)(cid:15)(cid:15)(cid:8)(cid:15)(cid:15)(cid:15)(cid:15)(cid:8)(cid:8)(cid:8)(cid:8)(cid:15)(cid:38)(cid:38)(cid:38)(cid:38)(cid:38)(cid:38)(cid:38)(cid:38)(cid:16)(cid:27)(cid:28)(cid:19)(cid:12)(cid:12)(cid:29)(cid:20)(cid:19)(cid:16)(cid:20)(cid:27)(cid:28)(cid:29)(cid:20)(cid:19)(cid:28)(cid:12)(cid:29)(cid:17)(cid:17)(cid:8)(cid:16)(cid:17)(cid:28)(cid:28)(cid:40)(cid:28)(cid:28)(cid:28)(cid:28)(cid:12)(cid:16)(cid:16)(cid:16)(cid:16)(cid:16)(cid:16)(cid:16)(cid:16)(cid:16)(cid:16)(cid:30)(cid:6)(cid:20)(cid:29)(cid:28)(cid:28)(cid:5)(cid:12)(cid:29)(cid:28)(cid:27)(cid:30)(cid:6)(cid:20)(cid:29)(cid:12)(cid:19)(cid:27)(cid:28)(cid:16)(cid:17)(cid:17)(cid:16)(cid:14)(cid:15)(cid:3)(cid:3)(cid:3)(cid:3)(cid:9)(cid:22)(cid:2)(cid:8)(cid:6)(cid:6)(cid:7)(cid:25)(cid:9)(cid:43)(cid:43)(cid:22)(cid:2)(cid:39)(cid:9)(cid:25)(cid:24)(cid:24)(cid:43)(cid:28)(cid:43)(cid:7)(cid:4)(cid:4)(cid:28)(cid:28)(cid:15)(cid:15)(cid:15)(cid:15)(cid:27)(cid:28) (cid:4)(cid:5)(cid:14)(cid:14)(cid:15)(cid:14)(cid:8)(cid:23)(cid:23)(cid:22)(cid:2)(cid:47)(cid:43)(cid:4)(cid:4)(cid:15)(cid:2)(cid:22)(cid:43)(cid:35)(cid:34)(cid:24)(cid:24)(cid:38)(cid:9)(cid:5)(cid:24)(cid:24)(cid:38)(cid:25)(cid:25)(cid:14)(cid:8)(cid:12)(cid:54)(cid:19)(cid:60)(cid:26)(cid:26)(cid:16)(cid:15)(cid:53)(cid:35)(cid:53)(cid:38)(cid:16)(cid:16)(cid:61)(cid:16)(cid:17)(cid:17)(cid:18)(cid:54)(cid:39)(cid:39)(cid:25)(cid:29)(cid:12)(cid:4)(cid:16)(cid:28)(cid:25)(cid:18)(cid:22)(cid:22)(cid:16)(cid:29)(cid:2)(cid:22)(cid:14)(cid:14)(cid:3)(cid:4)(cid:28)(cid:28)(cid:36)(cid:5)(cid:23)(cid:27)(cid:19)(cid:8)(cid:15)(cid:9)(cid:37)(cid:28)(cid:14)(cid:4)(cid:28)(cid:15)(cid:2)(cid:11)(cid:8)(cid:31)(cid:12)(cid:4)(cid:22)(cid:16)(cid:27)(cid:16)(cid:16)(cid:13)(cid:8)(cid:14)(cid:3)(cid:28)(cid:17)(cid:21)(cid:29)(cid:11)(cid:5)(cid:43)(cid:43)(cid:17)(cid:12)(cid:18)(cid:2)(cid:2)(cid:14)(cid:11)(cid:13)(cid:1)(cid:1)(cid:15)(cid:12)(cid:24)(cid:24)(cid:22)(cid:13)(cid:28)(cid:16)(cid:1)(cid:4)(cid:11)(cid:22)(cid:9)(cid:12)(cid:22)(cid:4)(cid:9)(cid:4)(cid:2)(cid:4)(cid:5)(cid:4)(cid:13)(cid:19)(cid:12)(cid:34)(cid:2)(cid:9)(cid:19)(cid:28)(cid:2)(cid:14)(cid:16)(cid:17)(cid:39)(cid:22)(cid:14)(cid:16)(cid:15)(cid:15)(cid:16)(cid:27)(cid:28)(cid:28)(cid:16)(cid:28)(cid:6)(cid:20)(cid:30)(cid:16)(cid:17)(cid:16)(cid:17)(cid:28)(cid:22)(cid:13)(cid:3)(cid:3)(cid:11)(cid:19)(cid:28)(cid:27)(cid:7)(cid:4)(cid:6)(cid:6)(cid:14)(cid:1)(cid:44)(cid:13)(cid:12)(cid:9)(cid:22)(cid:2)(cid:7)(cid:2)(cid:27)(cid:8)(cid:4)(cid:5)(cid:13)(cid:1)(cid:1)(cid:43)(cid:43)(cid:22)(cid:1)(cid:43)(cid:43)(cid:3)(cid:8)(cid:13)(cid:22)(cid:2)(cid:2)(cid:5)(cid:2)(cid:4)(cid:14)(cid:16)(cid:15)(cid:15)(cid:1)(cid:1)(cid:8)(cid:4)(cid:8)(cid:4)(cid:9)(cid:14)(cid:15)(cid:24)(cid:24)(cid:8)(cid:34)(cid:4)(cid:5)(cid:15)(cid:16)(cid:28)(cid:2)(cid:10)(cid:1)(cid:25)(cid:6)(cid:16)(cid:28)(cid:27)(cid:19)(cid:12)(cid:29)(cid:16)(cid:16)(cid:26)(cid:5)(cid:39)(cid:39)(cid:41)(cid:6)(cid:20)(cid:1)(cid:41)(cid:41)(cid:41)(cid:41)(cid:41)(cid:41)(cid:41)(cid:14)(cid:4)(cid:1)(cid:1)(cid:1)(cid:1)(cid:1)(cid:41)(cid:41)(cid:3)(cid:3)(cid:41)(cid:41)(cid:41)(cid:41)(cid:41)(cid:41)(cid:15)(cid:1)(cid:1)(cid:7)(cid:7)(cid:22)(cid:22)(cid:22)(cid:9)(cid:25)(cid:2)(cid:15)(cid:15)(cid:15)(cid:15)(cid:15)(cid:15)(cid:7)(cid:7)(cid:22)(cid:41)(cid:14)(cid:14)(cid:7)(cid:25)(cid:8)(cid:8)(cid:8)(cid:7)(cid:41)(cid:7)(cid:7)(cid:41)(cid:41)(cid:9)(cid:43)(cid:43)(cid:8)(cid:8)(cid:14)(cid:14)(cid:14)(cid:14)(cid:8)(cid:8)(cid:8)(cid:8)(cid:8)(cid:9)(cid:8)(cid:2)(cid:2)(cid:2)(cid:2)(cid:9)(cid:17)(cid:9)(cid:9)(cid:25)(cid:15)(cid:15)(cid:16)(cid:27)(cid:12)(cid:39)(cid:10)(cid:9)(cid:16)(cid:17)(cid:16)(cid:17)(cid:12)(cid:19)(cid:27)(cid:28)(cid:16)(cid:16)(cid:17)(cid:16)(cid:19)(cid:19)(cid:42)(cid:7)(cid:16)(cid:28)(cid:10)(cid:10)(cid:42)(cid:42)(cid:42)(cid:42)(cid:42)(cid:42)(cid:10)(cid:42)(cid:42)(cid:42)(cid:42)(cid:42)(cid:42)(cid:42)(cid:42)(cid:42)(cid:42)(cid:42)(cid:42)(cid:42)(cid:1)(cid:38)(cid:10)(cid:10)(cid:10)(cid:10)(cid:10)(cid:10)(cid:10)(cid:10)(cid:10)(cid:10)(cid:10)(cid:10)(cid:10)(cid:10)(cid:10)(cid:10)(cid:10)(cid:10)(cid:10)(cid:8)(cid:15)(cid:15)(cid:15)(cid:15)(cid:15)(cid:15)(cid:8)(cid:8)(cid:8)(cid:8)(cid:8)(cid:15)(cid:15)(cid:38)(cid:38)(cid:38)(cid:38)(cid:38)(cid:38)(cid:17)(cid:19)(cid:27)(cid:20)(cid:29)(cid:27)(cid:28)(cid:17)(cid:12)(cid:16)(cid:16)(cid:17)(cid:12)(cid:19)(cid:27)(cid:28)(cid:16)(cid:28)(cid:12)(cid:19)(cid:42)(cid:28)(cid:19)(cid:29)(cid:28)(cid:28)(cid:28)(cid:28)(cid:28)(cid:28)(cid:16)(cid:16)(cid:16)(cid:16)(cid:16)(cid:16)(cid:16)(cid:16)(cid:16)(cid:29)(cid:12)(cid:19)(cid:27)(cid:28)(cid:6)(cid:20)(cid:29)(cid:12)(cid:19)(cid:27)(cid:30)(cid:6)(cid:20)(cid:29)(cid:12)(cid:19)(cid:27)(cid:28)(cid:16)(cid:5)(cid:14)(cid:11)(cid:15)(cid:12)(cid:9)(cid:1)(cid:1)(cid:1)(cid:1)(cid:1)(cid:1)(cid:7)(cid:7)(cid:7)(cid:7)(cid:7)(cid:7)(cid:7)(cid:7)(cid:7)(cid:7)(cid:13)(cid:25)(cid:25)(cid:25)(cid:25)(cid:25)(cid:25)(cid:25)(cid:25)(cid:25)(cid:25)(cid:9)(cid:15)(cid:15)(cid:15)(cid:15)(cid:15)(cid:15)(cid:28)(cid:16)(cid:17)(cid:27)(cid:19)(cid:12)(cid:29)(cid:20)(cid:6)(cid:30)(cid:17)(cid:16)(cid:28)(cid:27)(cid:19)(cid:12)(cid:23)(cid:4)(cid:24)(cid:24)(cid:25)(cid:26)(cid:22)(cid:14)(cid:28)(cid:1)(cid:24)(cid:5)(cid:16)(cid:6)(cid:14)(cid:15)(cid:16)(cid:39)(cid:22)(cid:14)(cid:28)(cid:38)(cid:28)(cid:20)(cid:5)(cid:1)(cid:22)(cid:14)(cid:4)(cid:15)(cid:16)(cid:39)(cid:9)(cid:3)(cid:9)(cid:34)(cid:3)(cid:5)(cid:8)(cid:9)(cid:7)(cid:25)(cid:9)(cid:14)(cid:39)(cid:25)(cid:9)(cid:15)(cid:7)(cid:1)(cid:16)(cid:8)(cid:7)(cid:25)(cid:17)(cid:15)(cid:19)(cid:24)(cid:16)(cid:28)(cid:27)(cid:19)(cid:12)(cid:29)(cid:20)(cid:6)(cid:16)(cid:28)(cid:27)(cid:19)(cid:12)(cid:29)(cid:17)(cid:18)(cid:17)(cid:16)(cid:28)(cid:27)(cid:19)(cid:12)(cid:29)(cid:20)(cid:11)(cid:7)(cid:12)(cid:25)(cid:22)(cid:22)(cid:13)(cid:27)(cid:19)(cid:36)(cid:16)(cid:28)(cid:27)(cid:19)(cid:12)(cid:29)(cid:20)(cid:6)(cid:14)(cid:14)(cid:19)(cid:19)(cid:8)(cid:15)(cid:16)(cid:16)(cid:29)(cid:12)(cid:39)(cid:39)(cid:6)(cid:30)(cid:16)(cid:16)(cid:16)(cid:16)(cid:5)(cid:17)(cid:16)(cid:28)(cid:27)(cid:22)(cid:4)(cid:25)(cid:4)(cid:14)(cid:14) (cid:5)(cid:14)(cid:15) (cid:22)(cid:22)(cid:28)(cid:27)(cid:14)(cid:14)(cid:27)(cid:27)(cid:38)(cid:8)(cid:28)(cid:28)(cid:20)(cid:29)(cid:28)(cid:28)(cid:22)(cid:22) (cid:5)(cid:14)(cid:15) (cid:8)(cid:16)(cid:16)(cid:28)(cid:28)(cid:40) (cid:43)(cid:2)(cid:28)(cid:48)(cid:16)(cid:28)(cid:16) (cid:16)(cid:29)(cid:3)(cid:36)(cid:37) (cid:48)(cid:28)(cid:28)(cid:16) (cid:16)(cid:29)(cid:3)(cid:36)(cid:37) (cid:43)(cid:2)(cid:1)(cid:24)(cid:28) (cid:8)(cid:16)(cid:28)(cid:28)(cid:28)(cid:40) (cid:5)(cid:14)(cid:15) Figure12.6. ProjetodereferênciaparaoArduinoUno. 12.4. Ambientes de desenvolvimento Para concluir a parte teórica, nesta unidade serão apresentados os ambientes de desen- volvimento integrado que são disponibilizados pelos fabricantes dos dispositivos. Estes ambientes são utilizados para programar o middleware que será executado pelo dispos- itivo. Além do aplicativo, esta unidade aborda também a utilização das bibliotecas já existentes,quefacilitamotrabalhodeimplementaçãodeaplicaçõesmaiores. 12.4.1. Mbed O compilador Mbed fornece um IDE (ambiente de desenvolvimento integrado) online C/C++ que é pré-configurado para permitir que se escreva e compile programas rapida- mente e seja capaz de transferi-los para executar em seu microcontrolador Mbed. Não é necessário que se instale ou configure nada para começar a programar com o Mbed. Por ser uma aplicação web, o ambiente de desenvolvimento fornecido permite que seja pos- sível trabalhar em qualquer navegador no Windows, Mac ou Linux e que se tenha acesso em qualquer lugar e continue a partir de onde parou. Cada usuário Mbed possui uma conta que lhe da acesso a um compilador e a um workspace privado que contém os seus programas[Mbed2012a]. Apesardeserleveeonline,ocompiladortambémépoderoso. Eleutilizaaengine profissional do compilador ARMCC, e portanto produz código eficiente que pode ser usadogratuitamente,mesmoemaplicaçõescomerciais. OIDEpossuiumeditorcompleto que possui marcador de palavras reservadas, atalhos de teclado padrão do editor, função de copiar/colar, tabulação e até mesmo auto-formatação de código. A Figura 12.7 retrata o ambiente pessoal com múltiplos arquivos, pastas e programas em que o usuário irá desenvolver. Figure12.7. AmbientededesenvolvimentoparaMbed. O sistema de pesquisa da IDE permite que o usuário procure por uma string, seja num programa inteiro ou apenas no módulo requisitado. No exemplo representado pela Figura 12.8 temos a pesquisa da string “myled” no programa ChromeOS em todos os módulos e tipos de módulos (.c, .cpp, .h, .hpp, .s). Na mesma figura temos o resultadodapesquisa. Figure12.8. SistemadebuscasdoambientededesenvolvimentoMbed. O ambiente de desenvolvimento integrado do Mbed possui ainda um controle de versão embutido que permite o usuário fazer operações de commit de uma versão do projeto, ver o histórico de revisões, comparar modificações feitas entre versões, fazer operaçõesdeupdateourevertparaumanovaversão,eoperaçõesdebranchemergeentre versões. AFigura12.9abaixomostraumexemplodeoperaçãodeversionamento. Figure12.9. SistemadecontroledeversãoembutidodoMbed. Outra funcionalidade é o assistente de importação, que permite a importação de programas a partir de uma URL Mbed. Isso é útil para importar rapidamente para dentro do projeto do usuário um código que tenha sido empacotado como uma biblioteca reuti- lizável (por exemplo, uma classe para um periférico). A Figura 12.10 abaixo mostra o sistemadeimportaçãodearquivos. O IDE ainda permite que o usuário publique seus programas ou bibliotecas facil- mente na seção de desenvolvimento do site do Mbed. Esse recurso facilita o processo Figure12.10. Sistemadeimportaçãodeprogramas,bibliotecasdoMbed. de compartilhamento tanto de códigos bem sucedidos quanto de eventuais problemas e consequentefeedbackparaambososcasos. Para realizar a compilação, o compilador Mbed utiliza a compiler engine ARM RVDS4.1naconfiguraçãopadrãoparadarexcelentestamanhodocódigoedesempenho. Não há limitações no tamanho do código (salvo os limites do próprio dispositivo). O código gerado pode ser usado livremente para uso comercial e não-comercial. Quando você compila um programa, você vai ter uma exibição do uso de memória. Isso mostra o espaçoqueocódigoiráocuparnamemóriaflashdodispositivo,easvariáveisqueacabam emmemóriaprincipal. AFigura12.11mostraumexemplodeusodememória. O SDK usado com o compilador online do Mbed também é compatível com uma série de outras ferramentas ARM populares, de tal forma que seja possível exportar os programas diretamente para essas ferramentas. Por exemplo, se o usuário desejar migrar para um conjunto de ferramentas diferentes quando o projeto passa da fase de protótipo, pode-se optar por exportar um projeto Mbed clicando com o botão direito sobre ele con- formeexemplificadonaFigura12.11. Figure12.11. Usodememóriaeopçõesdeexportaçãodeprograma. Para o leitor interessado em aumentar seus conhecimentos em relação ao desen-
Description: