<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog do Sergio Prado</title>
	<atom:link href="http://sergioprado.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://sergioprado.org</link>
	<description>Sistemas embarcados, Linux embarcado, RTOS e segurança</description>
	<lastBuildDate>Wed, 16 May 2012 00:49:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Credenciamento para o ESC Brazil 2012</title>
		<link>http://sergioprado.org/credenciamento-para-o-esc-brazil-2012/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=credenciamento-para-o-esc-brazil-2012</link>
		<comments>http://sergioprado.org/credenciamento-para-o-esc-brazil-2012/#comments</comments>
		<pubDate>Wed, 16 May 2012 00:49:49 +0000</pubDate>
		<dc:creator>Sergio Prado</dc:creator>
				<category><![CDATA[Eventos]]></category>
		<category><![CDATA[Notícias]]></category>
		<category><![CDATA[esc]]></category>
		<category><![CDATA[ESC Brazil]]></category>

		<guid isPermaLink="false">http://sergioprado.org/?p=2714</guid>
		<description><![CDATA[<p>Estão abertas as inscrições para a maior feira de sistemas embarcados da América Latina!</p><p><p>Sergio Prado atua com desenvolvimento de software para sistemas embarcados há mais de 15 anos. É sócio-fundador da Embed­ded Lab­works, uma empresa focada em te aju­dar a desen­volver soft­ware de qual­i­dade para sis­temas embar­ca­dos. Se você pre­cisa de ajuda para desen­volver seu pro­duto, ou quer saber mais sobre o que a Embed­ded Lab­works pode fazer por você, acesse <a href=”http://e-labworks.com/servicos/”> http://e-labworks.com/servicos</a>.</p>
<p>Este post foi originalmente publicado em <a href="http://sergioprado.org/credenciamento-para-o-esc-brazil-2012/">Credenciamento para o ESC Brazil 2012</a>.</p></p>
Posts relacionados:<ol>
<li><a href='http://sergioprado.org/call-for-papers-para-o-esc-brazil-2011/' rel='bookmark' title='Call for Papers para o ESC Brazil 2011'>Call for Papers para o ESC Brazil 2011</a></li>
<li><a href='http://sergioprado.org/pesquisa-para-o-ti-tech-day-2012/' rel='bookmark' title='Pesquisa para o TI Tech Day 2012'>Pesquisa para o TI Tech Day 2012</a></li>
<li><a href='http://sergioprado.org/creative-commons-e-esc-2012/' rel='bookmark' title='Creative Commons e ESC 2012'>Creative Commons e ESC 2012</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic -->
<p style="text-align: justify;"><span style="font-family: verdana, geneva;"><span style="font-size: 14px;">Esta aberto o credenciamento para o </span><a style="font-family: verdana, geneva; font-size: 14px;" href="http://www.escbrazil.com.br/" target="_blank">ESC Brazil 2012</a><span style="font-size: 14px;">, que irá acontecer nos dias 26 e 27 de junho de 2012.</span></span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva;"><span style="font-size: 14px;">Este ano o evento parece estar bem maior, com mais expositores, dentre eles AMD, Intel, ARM, Atmel, Freescale, IAR, Microchip, NI, NXP, Renesas, ST, Texas e Wind River.</span></span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva;"><span style="font-size: 14px;">Será também em um local maior, no Transamérica Expo Center, e deverá acontecer junto com a feira de equipamentos médicos MDM (Medical Design &amp; Manufacturing).</span></span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva;"><span style="font-size: 14px;">No primeiro dia os keynotes serão de dois brasileiros, Marcelo Zuffo da USP e Henrique Miguel do MCTi. No segundo dia teremos keynotes internacionais, com Bill Gatliff, consultor de Android e Linux embarcado, e Chris Shore da ARM.</span></span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva;"><span style="font-size: 14px;">A </span><a style="font-family: verdana, geneva; font-size: 14px;" href="http://www.escbrazil.com.br/index.php?canal=conferencias&amp;pgID=030512-190115-3b899ae4" target="_blank">grade de palestras</a><span style="font-size: 14px;"> me parece também estar muito boa. Desta vez teremos algumas palestras com foco em hardware, o que faltou no ano passado. E a quantidade de palestrantes brasileiros ultrapassou a de estrangeiros (10 x 8), o que é ótimo!</span></span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva;"><span style="font-size: 14px;">Não deixe de ir. É uma oportunidade de se atualizar, fazer networking com as principais empresas da áreas, e mostrar a força do Brasil na área de sistemas embarcados. Além do mais, você não pode perder minha palestra sobre o FreeRTOS… Prometo algumas surpresas! :)</span></span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva;"><span style="font-size: 14px;">A inscrição para a feira é gratuita e pode ser feita </span><a style="font-family: verdana, geneva; font-size: 14px;" href="http://www.credenciamento.com.br/Si/VisitanteEsc/Identificacao/CLT_IdentificacaoVisitante_por.aspx" target="_blank">aqui</a><span style="font-size: 14px;">. Já o credenciamento para a conferência pode ser feito </span><a style="font-family: verdana, geneva; font-size: 14px;" href="https://regtron.websiteseguro.com/ubm/congresso/?ev=ESC2012" target="_blank">aqui</a><span style="font-size: 14px;">.</span></span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva;"><span style="font-size: 14px;">Nos vemos lá!</span></span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva;"><span style="font-size: 14px;">Um abraço,</span></span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva;"><span style="font-size: 14px;">Sergio Prado</span></span></p>
<div class="shr-publisher-2714"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic --><p>Posts relacionados:</p><ol>
<li><a href='http://sergioprado.org/call-for-papers-para-o-esc-brazil-2011/' rel='bookmark' title='Call for Papers para o ESC Brazil 2011'>Call for Papers para o ESC Brazil 2011</a></li>
<li><a href='http://sergioprado.org/pesquisa-para-o-ti-tech-day-2012/' rel='bookmark' title='Pesquisa para o TI Tech Day 2012'>Pesquisa para o TI Tech Day 2012</a></li>
<li><a href='http://sergioprado.org/creative-commons-e-esc-2012/' rel='bookmark' title='Creative Commons e ESC 2012'>Creative Commons e ESC 2012</a></li>
</ol><p><p>Sergio Prado atua com desenvolvimento de software para sistemas embarcados há mais de 15 anos. É sócio-fundador da Embed­ded Lab­works, uma empresa focada em te aju­dar a desen­volver soft­ware de qual­i­dade para sis­temas embar­ca­dos. Se você pre­cisa de ajuda para desen­volver seu pro­duto, ou quer saber mais sobre o que a Embed­ded Lab­works pode fazer por você, acesse <a href=”http://e-labworks.com/servicos/”> http://e-labworks.com/servicos</a>.</p>
<p>Este post foi originalmente publicado em <a href="http://sergioprado.org/credenciamento-para-o-esc-brazil-2012/">Credenciamento para o ESC Brazil 2012</a>.</p></p>]]></content:encoded>
			<wfw:commentRss>http://sergioprado.org/credenciamento-para-o-esc-brazil-2012/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Mbed — Desenvolvendo em Cortex-M3 com o GCC</title>
		<link>http://sergioprado.org/mbed-desenvolvendo-em-cortex-m3-com-o-gcc/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=mbed-desenvolvendo-em-cortex-m3-com-o-gcc</link>
		<comments>http://sergioprado.org/mbed-desenvolvendo-em-cortex-m3-com-o-gcc/#comments</comments>
		<pubDate>Tue, 08 May 2012 12:18:10 +0000</pubDate>
		<dc:creator>Sergio Prado</dc:creator>
				<category><![CDATA[Ferramentas]]></category>
		<category><![CDATA[Mbed]]></category>
		<category><![CDATA[cmsis]]></category>
		<category><![CDATA[cortex-m3]]></category>
		<category><![CDATA[gcc]]></category>
		<category><![CDATA[mbed]]></category>
		<category><![CDATA[newlib]]></category>

		<guid isPermaLink="false">http://sergioprado.org/?p=2682</guid>
		<description><![CDATA[<p>Neste artigo aprenderemos a configurar o GCC para desenvolver aplicações para um Cortex-M3 usando o kit mbed (LPC1768 da NXP).</p><p><p>Sergio Prado atua com desenvolvimento de software para sistemas embarcados há mais de 15 anos. É sócio-fundador da Embed­ded Lab­works, uma empresa focada em te aju­dar a desen­volver soft­ware de qual­i­dade para sis­temas embar­ca­dos. Se você pre­cisa de ajuda para desen­volver seu pro­duto, ou quer saber mais sobre o que a Embed­ded Lab­works pode fazer por você, acesse <a href=”http://e-labworks.com/servicos/”> http://e-labworks.com/servicos</a>.</p>
<p>Este post foi originalmente publicado em <a href="http://sergioprado.org/mbed-desenvolvendo-em-cortex-m3-com-o-gcc/">Mbed — Desenvolvendo em Cortex-M3 com o GCC</a>.</p></p>
Posts relacionados:<ol>
<li><a href='http://sergioprado.org/novos-brinquedos-no-pedaco-mbed-e-lpcxpresso/' rel='bookmark' title='Novos brinquedos no pedaço: mbed e LPCXpresso'>Novos brinquedos no pedaço: mbed e LPCXpresso</a></li>
<li><a href='http://sergioprado.org/projetando-na-nuvem-com-o-kit-mbed/' rel='bookmark' title='Projetando na nuvem com o kit mbed'>Projetando na nuvem com o kit mbed</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic -->
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">O uso de microntroladores ARM da linha <a href="http://www.arm.com/products/processors/cortex-m/cortex-m3.php" target="_blank">Cortex-M3</a> tem crescido bastante nos últimos tempos. Ele preenche bem um espaço que fica entre as aplicações mais simples, que podem se desenvolvidas em 8/16 bits, e as aplicações mais complexas que exigem um sistema operacional completo.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">E você não precisa necessariamente de uma ferramenta paga como a da <a href="http://www.iar.com/" target="_blank">IAR</a> ou a da <a href="http://www.keil.com/" target="_blank">Keil</a> para trabalhar com um Cortex-M3. Uma das grandes vantagens da arquitetura ARM é o enorme ecossistema de ferramentas e soluções de código aberto existentes.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Neste artigo iremos aprender a configurar um ambiente de desenvolvimento em Linux com o GCC e utilizá-lo para desenvolver uma aplicação para o LPC1768, um Cortex-M3 da NXP.</span></p>
<p style="text-align: justify;"><strong><span style="font-family: verdana, geneva; font-size: 14px;">NOSSO AMBIENTE</span></strong></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">O ambiente de desenvolvimento será uma máquina Linux com a distribuição Ubuntu 12.04.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Para os testes, utilizaremos o <a href="http://mbed.org/handbook/mbed-NXP-LPC1768" target="_blank">kit de desenvolvimento mbed</a>, uma plataforma cri­ada pelos engen­heiros da própria ARM para diminuir a curva de apren­diza­gem em pro­je­tos com ARM. O kit é baseado no NXP LPC1768, um ARM Cortex-M3 com 512K de memória Flash, 32K de RAM e diver­sas inter­faces como CAN, SPI, I2C e Eth­er­net.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva;"><span style="font-size: 14px;"><a href="http://www.sergioprado.org/wp-content/uploads/mbedBoardLayoutSmall(1).png"><img class="aligncenter" title="Mbed" src="http://www.sergioprado.org/wp-content/uploads/mbedBoardLayoutSmall(1).png" alt="mbedBoardLayoutSmall(1) Mbed   Desenvolvendo em Cortex M3 com o GCC" width="200" height="191" /></a></span></span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">O legal deste kit é a facilidade de gravar o firmware. Não é necessário nenhum gravador especial ou interface JTAG. Quando você pluga ele na USB, ele se transforma em um pendrive. Basta então copiar o firmware (arquivo .bin) para lá!</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Se você quiser ler mais sobre o mbed, escrevi um tempo atrás o artigo “<a href="http://sergioprado.org/projetando-na-nuvem-com-o-kit-mbed/" target="_blank">Projetando na nuvem com o kit mbed</a>”.</span></p>
<p style="text-align: justify;"><strong><span style="font-family: verdana, geneva; font-size: 14px;">PREPARANDO O AMBIENTE</span></strong></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Crie um diretório no seu HOME para a realização dos trabalhos:</span></p>


<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">$ mkdir -p ~/workspace</pre></div></div>



<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Precisamos de um toolchain para gerar código bare-metal para o Cortex-M3. Se você não sabe o que é um toolchain, leia o artigo “<a href="http://sergioprado.org/desmistificando-toolchains-em-linux-embarcado/" target="_blank">Desmistificando toolchains em Linux embarcado</a>”.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Vou te dar duas opções para a configuração de um toolchain para Cortex-M3, uma “sem emoção”, e outra “com emoção”! :)</span></p>
<p style="text-align: justify;"><strong><span style="font-family: verdana, geneva; font-size: 14px;">TOOLCHAIN “SEM EMOÇÃO”</span></strong></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Basta baixar e instalar o toolchain pronto da <a href="http://www.mentor.com/embedded-software/codesourcery" target="_blank">CodeSourcery</a> (agora Mentor Graphics Sourcery Tools):</span></p>


<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">$ sudo mkdir -p /opt/toolchain/codesourcery/
$ sudo chown -R $USER:$USER /opt/toolchain
$ cd /opt/toolchain/codesourcery/
$ wget https://sourcery.mentor.com/sgpp/lite/arm/portal/package8734/public/arm-none-eabi/arm-2011.03-42-arm-none-eabi-i686-pc-linux-gnu.tar.bz2
$ tar xjfv arm-2011.03-42-arm-none-eabi-i686-pc-linux-gnu.tar.bz2
$ rm *.tar.bz2</pre></div></div>



<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Pronto! Toolchain instalado!</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Agora, para os corações mais fortes…</span></p>
<p style="text-align: justify;"><strong><span style="font-family: verdana, geneva; font-size: 14px;">TOOLCHAIN “COM EMOÇÃO”</span></strong></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Vamos usar o <a href="http://crosstool-ng.org/" target="_blank">crosstool-ng</a> para gerar um toolchain para Cortex-M3 bare-metal. Para quem não esta familiarizado com o termo, “bare-metal” é basicamente um firmware que roda direto na CPU sem o suporte de um sistema operacional. E se você não conhece o crosstool-ng, ou não sabe como usá-lo, leia o artigo “<a href="http://sergioprado.org/gerando-e-usando-toolchains-em-linux-embarcado/" target="_blank">Gerando e usando toolchains em Linux embarcado</a>”.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Execute os comandos abaixo para baixar e instalar a ferramenta:</span></p>


<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">$ cd ~/workspace
$ wget http://crosstool-ng.org/download/crosstool-ng/crosstool-ng-1.15.0.tar.bz2
$ tar jxfv crosstool-ng-1.15.0.tar.bz2 &amp;&amp; rm *.tar.bz2
$ cd crosstool-ng-1.15.0/
$ ./configure
$ make
$ sudo make install
$ ct-ng arm-bare_newlib_cortex_m3_nommu-eabi</pre></div></div>



<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">É a última linha que configura o crosstool-ng para trabalhar com bare-metal em Cortex-M3. Agora abra o menu de configuração:</span></p>


<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">$ ct-ng menuconfig</pre></div></div>



<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Vamos fazer algumas modificações no toolchain que será gerado:</span></p>


<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">Paths and misc options ---&gt;
    (/opt/toolchain/${CT_TARGET}) Prefix directory
    (8) Number of parallel jobs
Toolchain options ---&gt;
    (arm-cortexm3-bare) Tuple's alias
Debug facilities ---&gt;
    [*] gdb ---&gt; 
    [*] Cross-gdb
    [*] Enable 'sim'
    [*] Enable python scripting</pre></div></div>



<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Ajuste a opção “<em>Number of parallel jobs</em>” de acordo com a quantidade de núcleos da CPU da sua máquina de desenvolvimento. </span><span style="font-family: verdana, geneva; font-size: 14px;">Depois é so compilar com o comando abaixo:</span></p>


<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">$ ct-ng build</pre></div></div>



<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Dependendo da sua máquina, o processo de compilação do toolchain deve levar de 20 à 60 minutos. Quando terminar, verifique se as ferramentas foram geradas corretamente:</span></p>


<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">$ cd /opt/toolchain/arm-bare_newlib_cortex_m3_nommu-eabi/bin/
$ ls arm-cortexm3-bare-*
arm-cortexm3-bare-addr2line arm-cortexm3-bare-c++filt arm-cortexm3-bare-g++ arm-cortexm3-bare-gdb arm-cortexm3-bare-nm arm-cortexm3-bare-run
arm-cortexm3-bare-ar arm-cortexm3-bare-cpp arm-cortexm3-bare-gcc arm-cortexm3-bare-gdbtui arm-cortexm3-bare-objcopy arm-cortexm3-bare-size
arm-cortexm3-bare-as arm-cortexm3-bare-ct-ng.config arm-cortexm3-bare-gcc-4.4.1 arm-cortexm3-bare-gprof arm-cortexm3-bare-objdump arm-cortexm3-bare-strings
arm-cortexm3-bare-c++ arm-cortexm3-bare-elf2flt arm-cortexm3-bare-gccbug arm-cortexm3-bare-ld arm-cortexm3-bare-ranlib arm-cortexm3-bare-strip
arm-cortexm3-bare-cc arm-cortexm3-bare-flthdr arm-cortexm3-bare-gcov arm-cortexm3-bare-ld.real arm-cortexm3-bare-readelf</pre></div></div>



<p style="text-align: justify;"><strong><span style="font-family: verdana, geneva; font-size: 14px;">NEWLIB</span></strong></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Tanto o toolchain da CodeSourcery quanto o toolchain gerado pelo crosstool-ng usam a <a href="http://sourceware.org/newlib/" target="_blank">newlib</a>, uma biblioteca C padrão com foco em sistemas embarcados.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Criada originalmente pela Cygnus Solutions (que mais pra frente foi adquirida pela Red Hat), ela é hoje bastante usada em boa parte dos toolchains livres e comerciais baseados no GCC para sistemas embarcados.</span></p>
<p style="text-align: justify;"><strong><span style="font-family: verdana, geneva; font-size: 14px;">CMSIS</span></strong></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">O <a href="http://www.arm.com/products/processors/cortex-m/cortex-microcontroller-software-interface-standard.php" target="_blank">CMSIS</a> (Cortex Microcontroller Software Interface Standard) é uma camada de software que abstrai o acesso à microcontroladores de arquitetura ARM Cortex-M. É um padrão desenvolvido pela própria ARM com o objetivo de facilitar o acesso aos periféricos, reduzir a curva de aprendizado e simplificar o reuso de código.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">A idéia aqui é ter uma camada de software que permita migrar facilmente sua aplicação usando um Cortex-M para diferentes fornecedores de chip (Freescale, TI, NXP, ST, etc), desde que cada um deles tenha implementado o padrão. Na prática, são dois arquivos-fonte C e cinco arquivos de cabeçalho que padronizam o nome de funções de inicialização, manipuladores de interrupção, nomes dos registradores, etc.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Com o toolchain preparado, vamos então baixar e instalar os fontes do CMSIS para usá-los depois na nossa aplicação.</span></p>


<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">$ cd ~/workspace
$ mkdir -p cmsis &amp;&amp; cd cmsis
$ wget http://ics.nxp.com/support/lpcxpresso/zip/CMSISv2p00_LPC17xx.zip
$ unzip CMSISv2p00_LPC17xx.zip &amp;&amp; rm CMSISv2p00_LPC17xx.zip</pre></div></div>



<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Talvez você precise alterar as definições de clock no arquivo “<em>system_LPC17xx.c</em>” do CMSIS (<em>XTAL</em>, <em>RTC_CLK</em> e <em>IRC_OSC</em>). No meu caso, eu precisei alterar o <em>RTC_CLK</em> para <em>32768UL</em>, já que esta é a frequência do oscilador do RTC no kit mbed.</span></p>
<p style="text-align: justify;"><strong><span style="font-family: verdana, geneva; font-size: 14px;">CRIANDO O PROJETO</span></strong></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Vamos criar agora o nosso projeto “na unha”! O segredo aqui é preparar o Makefile para usar corretamente o cross-compiler e ter um script de linker bem configurado.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Mas vamos começar primeiro pelos fontes da aplicação.</span></p>
<p style="text-align: justify;"><strong><span style="font-family: verdana, geneva; font-size: 14px;">A APLICAÇÃO</span></strong></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Vamos desenvolver o famoso “Hello World” de sistemas embarcados: um pisca led!</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Precisamos de um código de inicialização e da função main() da aplicação, que irá efetivamente piscar o led.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">O código de inicialização é bem simples. Segue um trecho abaixo (o código completo você poderá baixar no fim do artigo):</span></p>


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">/* startup.c */</span>
<span style="color: #339933;">#include </span>
&nbsp;
<span style="color: #808080; font-style: italic;">/* extern symbols */</span>
<span style="color: #000000; font-weight: bold;">extern</span> <span style="color: #993333;">unsigned</span> <span style="color: #993333;">int</span> _end_stack<span style="color: #339933;">;</span>
...
&nbsp;
<span style="color: #808080; font-style: italic;">/* extern functions */</span>
<span style="color: #000000; font-weight: bold;">extern</span> <span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">extern</span> <span style="color: #993333;">void</span> SystemInit<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/* Cortex M3 core interrupt handlers */</span>
<span style="color: #993333;">void</span> Reset_Handler<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #993333;">void</span> NMI_Handler<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span> __attribute__ <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>weak<span style="color: #339933;">,</span> alias <span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Dummy_Handler&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
...
&nbsp;
<span style="color: #808080; font-style: italic;">/* LPC13xx specific interrupt handlers */</span>
<span style="color: #993333;">void</span> WDT_IRQHandler<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span> __attribute__ <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>weak<span style="color: #339933;">,</span> alias <span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Dummy_Handler&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #993333;">void</span> TIMER0_IRQHandler<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span> __attribute__ <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>weak<span style="color: #339933;">,</span> alias <span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Dummy_Handler&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
...
&nbsp;
<span style="color: #808080; font-style: italic;">/* prototypes */</span>
<span style="color: #993333;">void</span> Dummy_Handler<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/* interrupt vector table */</span>
<span style="color: #993333;">void</span> <span style="color: #339933;">*</span>vector_table<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> __attribute__ <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>section<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;.vectors&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #339933;">&amp;</span>_end_stack<span style="color: #339933;">,</span>
    Reset_Handler<span style="color: #339933;">,</span>
    NMI_Handler<span style="color: #339933;">,</span>
    ... 
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/* startup function */</span>
<span style="color: #993333;">void</span> Reset_Handler<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span> 
<span style="color: #009900;">&#123;</span>
    <span style="color: #993333;">unsigned</span> <span style="color: #993333;">int</span> <span style="color: #339933;">*</span>src<span style="color: #339933;">,</span> <span style="color: #339933;">*</span>dst<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #808080; font-style: italic;">/* Copy data section from flash to RAM */</span>
    src <span style="color: #339933;">=</span> <span style="color: #339933;">&amp;</span>_end_text<span style="color: #339933;">;</span>
    dst <span style="color: #339933;">=</span> <span style="color: #339933;">&amp;</span>_start_data<span style="color: #339933;">;</span>
    <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span>dst <span style="color: #339933;">&lt;</span> <span style="color: #339933;">&amp;</span>_end_data<span style="color: #009900;">&#41;</span>
        <span style="color: #339933;">*</span>dst<span style="color: #339933;">++</span> <span style="color: #339933;">=</span> <span style="color: #339933;">*</span>src<span style="color: #339933;">++;</span>
&nbsp;
    <span style="color: #808080; font-style: italic;">/* Clear the bss section */</span>
    dst <span style="color: #339933;">=</span> <span style="color: #339933;">&amp;</span>_start_bss<span style="color: #339933;">;</span>
    <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span>dst <span style="color: #339933;">&lt;</span> <span style="color: #339933;">&amp;</span>_end_bss<span style="color: #009900;">&#41;</span>
        <span style="color: #339933;">*</span>dst<span style="color: #339933;">++</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
&nbsp;
    SystemInit<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    main<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/* default interrupt handler */</span>
<span style="color: #993333;">void</span> Dummy_Handler<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>



<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">O código de inicialização basicamente inicializa a tabela de vetores de interrupção (linha 26) e declara a função Reset_Handler(), que será executada no boot da CPU (linha 34). Esta função prepara as regiões de memória DATA (dados inicializados) e BSS (dados não inicializados), inicializa a placa (registradores, periféricos, etc) e chama a função main().</span></p>


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">/* main.c */</span>
&nbsp;
...
&nbsp;
<span style="color: #993333;">int</span> main <span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span> 
<span style="color: #009900;">&#123;</span>
    <span style="color: #808080; font-style: italic;">/* set system tick for 1ms interrupt */</span>
    SystemCoreClockUpdate<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>SysTick_Config<span style="color: #009900;">&#40;</span>SystemCoreClock <span style="color: #339933;">/</span> <span style="color: #0000dd;">1000</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
        <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #808080; font-style: italic;">/* set led GPIO port */</span>
    LPC_GPIO1<span style="color: #339933;">-&gt;</span>FIODIR <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #339933;">&lt;&lt;</span>LED_GPIO<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #808080; font-style: italic;">/* blink led */</span>
    <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        LPC_GPIO1<span style="color: #339933;">-&gt;</span>FIOSET <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #339933;">&lt;&lt;</span>LED_GPIO<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        Delay <span style="color: #009900;">&#40;</span><span style="color: #0000dd;">300</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        LPC_GPIO1<span style="color: #339933;">-&gt;</span>FIOCLR <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #339933;">&lt;&lt;</span>LED_GPIO<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        Delay <span style="color: #009900;">&#40;</span><span style="color: #0000dd;">300</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>



<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">A função main() inicializa o clock, configura o SysTick para gerar interrupção a cada 1 milisegundo, e entra em um loop para piscar o led.</span></p>
<p style="text-align: justify;"><strong><span style="font-family: verdana, geneva; font-size: 14px;">O MAKEFILE</span></strong></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Já o Makefile é bem mais extenso, mas nada muito complexo. Segue um trecho dele:</span></p>


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
</pre></td><td class="code"><pre class="text" style="font-family:monospace;"># project name
PRJNAME = blinkled
&nbsp;
# toolchain configuration
PATH := ${PATH}:/opt/toolchain/arm-bare_newlib_cortex_m3_nommu-eabi/bin/
TOOLCHAIN_PREFIX = arm-cortexm3-bare-
&nbsp;
# cpu configuration
THUMB = -mthumb
MCU = cortex-m3
&nbsp;
...
&nbsp;
# C source files
C_SRC := $(CMSISSRCDIR)/core_cm3.c $(CMSISSRCDIR)/system_LPC17xx.c $(SRCDIR)/main.c $(SRCDIR)/startup.c
&nbsp;
# C flags
CFLAGS += -mcpu=$(MCU)
...
&nbsp;
# Linker flags
LDFLAGS +=-T$(PRJDIR)/lpc1768.ld
...
&nbsp;
# Define programs and commands.
CC = $(TOOLCHAIN_PREFIX)gcc
OBJCOPY = $(TOOLCHAIN_PREFIX)objcopy
OBJDUMP = $(TOOLCHAIN_PREFIX)objdump
NM = $(TOOLCHAIN_PREFIX)nm
&nbsp;
...
&nbsp;
all: createdirs build
&nbsp;
createdirs:
        @mkdir -p $(OUTDIR)
        @mkdir -p $(OUTDIR)/dep
&nbsp;
# targets for the build-sequence
build: elf lss sym hex bin
&nbsp;
...
&nbsp;
# Link: create ELF output file from object files.
.SECONDARY : $(PRJNAME).elf
.PRECIOUS : $(ALL_OBJ)
%.elf: $(ALL_OBJ) $(BUILDONCHANGE)
        $(CC) $(THUMB) $(CFLAGS) $(ALL_OBJ) --output $@ -nostartfiles $(LDFLAGS)
&nbsp;
...
&nbsp;
# compile C source code
define COMPILE_C_TEMPLATE
$(OUTDIR)/$(notdir $(basename $(1))).o : $(1) $(BUILDONCHANGE)
        $(CC) -c $(THUMB) $$(CFLAGS) $$&lt; -o $$@ 
endef
$(foreach src, $(C_SRC), $(eval $(call COMPILE_C_TEMPLATE, $(src))))
&nbsp;
...</pre></td></tr></table></div>



<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px; text-align: justify;">Configure o PATH e o TOOLCHAIN_PREFIX de acordo com o seu toolchain. Perceba que para compilar são passadas para o GCC as opções </span><em style="font-family: verdana, geneva; font-size: 14px; text-align: justify;">–mcpu=cortex-m3</em><span style="font-family: verdana, geneva; font-size: 14px; text-align: justify;"> e </span><em style="font-family: verdana, geneva; font-size: 14px; text-align: justify;">–mthumb</em><span style="font-family: verdana, geneva; font-size: 14px; text-align: justify;">. Desta forma o cross-compiler sabe que queremos gerar código para um cortex-m3. No linker, indicamos que não queremos usar arquivos de inicialização com a opção </span><em style="font-family: verdana, geneva; font-size: 14px; text-align: justify;">–nostartfiles</em><span style="font-family: verdana, geneva; font-size: 14px; text-align: justify;"> (linha 48), e passamos o script de linker </span><em style="font-family: verdana, geneva; font-size: 14px; text-align: justify;">lpc1768.ld</em><span style="font-family: verdana, geneva; font-size: 14px; text-align: justify;"> (linha 22).</span></p>
<p style="text-align: justify;"><strong><span style="font-family: verdana, geneva; font-size: 14px;">LINKER SCRIPT</span></strong></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">O linker script indica como o linker irá organizar as diversas seções de código e dados do programa (TEXT, DATA, BSS, etc) na memória do microcontrolador. Segue a listagem completa do script:</span></p>


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
</pre></td><td class="code"><pre class="text" style="font-family:monospace;">/* lpc1313.dld */
ENTRY(Reset_Handler)
&nbsp;
MEMORY
{
	sram	:	ORIGIN = 0x10000000, LENGTH = 32k
	flash	:	ORIGIN = 0x00000000, LENGTH = 512k
}
&nbsp;
_end_stack = 0x10007FF0;
&nbsp;
SECTIONS {
	. = ORIGIN(flash);
&nbsp;
	vectors :
	{
		*(.vectors)
	} &gt;flash
&nbsp;
	.text :
	{
		*(.text)
		*(.rodata)
		*(.rodata*)
		*(.ARM.extab* .gnu.linkonce.armextab.*)
		*(.eh_frame_hdr)
		*(.eh_frame)
		_end_text = .;
	} &gt;flash
&nbsp;
	__exidx_start = .;
	.ARM.exidx :
	{
		*(.ARM.exidx* .gnu.linkonce.armexidx.*)
	} &gt;flash
	__exidx_end = .;
&nbsp;
	.data : 
	{
		_start_data = .;
		*(.data)
		_end_data = .;
	} &gt;sram AT &gt;flash
&nbsp;
	.bss :
	{
		_start_bss = .;
		*(.bss)
		_end_bss = .;
	} &gt;sram
&nbsp;
	. = ALIGN(4);
&nbsp;
	_start_stack = .;
}
&nbsp;
_end = .;
PROVIDE(end = .);</pre></td></tr></table></div>



<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Agora é só compilar!</span></p>


<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">$ make
arm-cortexm3-bare-gcc -c -mthumb -mcpu=cortex-m3 -Wall -Wextra -Werror -Wcast-align -Wpointer-arith -Wredundant-decls -Wcast-qual -Wa,-adhlns=/home/sprado/workspace/dev/mbed/projects/blinkled/out/core_cm3.lst -MMD -MP -MF /home/sprado/workspace/dev/mbed/projects/blinkled/out/dep/core_cm3.o.d -I. -I/home/sprado/workspace/dev/mbed/projects/blinkled/inc -I/home/sprado/workspace/dev/mbed/projects/blinkled/../../cmsis//inc/ /home/sprado/workspace/dev/mbed/projects/blinkled/../../cmsis//src//core_cm3.c -o /home/sprado/workspace/dev/mbed/projects/blinkled/out/core_cm3.o 
arm-cortexm3-bare-gcc -c -mthumb -mcpu=cortex-m3 -Wall -Wextra -Werror -Wcast-align -Wpointer-arith -Wredundant-decls -Wcast-qual -Wa,-adhlns=/home/sprado/workspace/dev/mbed/projects/blinkled/out/system_LPC17xx.lst -MMD -MP -MF /home/sprado/workspace/dev/mbed/projects/blinkled/out/dep/system_LPC17xx.o.d -I. -I/home/sprado/workspace/dev/mbed/projects/blinkled/inc -I/home/sprado/workspace/dev/mbed/projects/blinkled/../../cmsis//inc/ /home/sprado/workspace/dev/mbed/projects/blinkled/../../cmsis//src//system_LPC17xx.c -o /home/sprado/workspace/dev/mbed/projects/blinkled/out/system_LPC17xx.o 
arm-cortexm3-bare-gcc -c -mthumb -mcpu=cortex-m3 -Wall -Wextra -Werror -Wcast-align -Wpointer-arith -Wredundant-decls -Wcast-qual -Wa,-adhlns=/home/sprado/workspace/dev/mbed/projects/blinkled/out/main.lst -MMD -MP -MF /home/sprado/workspace/dev/mbed/projects/blinkled/out/dep/main.o.d -I. -I/home/sprado/workspace/dev/mbed/projects/blinkled/inc -I/home/sprado/workspace/dev/mbed/projects/blinkled/../../cmsis//inc/ /home/sprado/workspace/dev/mbed/projects/blinkled/src/main.c -o /home/sprado/workspace/dev/mbed/projects/blinkled/out/main.o 
arm-cortexm3-bare-gcc -c -mthumb -mcpu=cortex-m3 -Wall -Wextra -Werror -Wcast-align -Wpointer-arith -Wredundant-decls -Wcast-qual -Wa,-adhlns=/home/sprado/workspace/dev/mbed/projects/blinkled/out/startup.lst -MMD -MP -MF /home/sprado/workspace/dev/mbed/projects/blinkled/out/dep/startup.o.d -I. -I/home/sprado/workspace/dev/mbed/projects/blinkled/inc -I/home/sprado/workspace/dev/mbed/projects/blinkled/../../cmsis//inc/ /home/sprado/workspace/dev/mbed/projects/blinkled/src/startup.c -o /home/sprado/workspace/dev/mbed/projects/blinkled/out/startup.o 
arm-cortexm3-bare-gcc -mthumb -mcpu=cortex-m3 -Wall -Wextra -Werror -Wcast-align -Wpointer-arith -Wredundant-decls -Wcast-qual -Wa,-adhlns=/home/sprado/workspace/dev/mbed/projects/blinkled/out/core_cm3.lst -MMD -MP -MF /home/sprado/workspace/dev/mbed/projects/blinkled/out/dep/blinkled.elf.d -I. -I/home/sprado/workspace/dev/mbed/projects/blinkled/inc -I/home/sprado/workspace/dev/mbed/projects/blinkled/../../cmsis//inc/ /home/sprado/workspace/dev/mbed/projects/blinkled/out/core_cm3.o /home/sprado/workspace/dev/mbed/projects/blinkled/out/system_LPC17xx.o /home/sprado/workspace/dev/mbed/projects/blinkled/out/main.o /home/sprado/workspace/dev/mbed/projects/blinkled/out/startup.o --output /home/sprado/workspace/dev/mbed/projects/blinkled/out/blinkled.elf -nostartfiles -Wl,-Map=/home/sprado/workspace/dev/mbed/projects/blinkled/out/blinkled.map,--cref -L. -L/home/sprado/workspace/dev/mbed/projects/blinkled/lib -lc -lgcc -T/home/sprado/workspace/dev/mbed/projects/blinkled/lpc1768.ld
arm-cortexm3-bare-objdump -h -S -C -r /home/sprado/workspace/dev/mbed/projects/blinkled/out/blinkled.elf &gt; /home/sprado/workspace/dev/mbed/projects/blinkled/out/blinkled.lss
arm-cortexm3-bare-nm -n /home/sprado/workspace/dev/mbed/projects/blinkled/out/blinkled.elf &gt; /home/sprado/workspace/dev/mbed/projects/blinkled/out/blinkled.sym
arm-cortexm3-bare-objcopy -O ihex /home/sprado/workspace/dev/mbed/projects/blinkled/out/blinkled.elf /home/sprado/workspace/dev/mbed/projects/blinkled/out/blinkled.hex
arm-cortexm3-bare-objcopy -O binary /home/sprado/workspace/dev/mbed/projects/blinkled/out/blinkled.elf /home/sprado/workspace/dev/mbed/projects/blinkled/out/blinkled.bin</pre></div></div>



<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Será gerado o arquivo blinkled.bin que você pode copiar e testar no kit de desenvolvimento mbed.</span></p>
<p style="text-align: justify;"><strong><span style="font-family: verdana, geneva; font-size: 14px;">CÓDIGO-FONTE</span></strong></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">O código-fonte completo da aplicação pode ser baixado <a href="http://sergioprado.org/wp-content/plugins/download-monitor/download.php?id=22">aqui</a>.</span></p>
<p style="text-align: justify;"><strong><span style="font-family: verdana, geneva; font-size: 14px;">TRABALHANDO COM OUTROS CORTEX-M3</span></strong></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Os testes aqui foram feitos com o mbed, que usa o LPC1768 da NXP, mas o processo é o mesmo em qualquer outro chip, você só vai precisar substituir o linker script, ajustar o arquivo de inicialização e reescrever o main.c. Normalmente, o arquivo de inicialização e o script de linker são fornecidos nas aplicações de exemplo disponibilizadas pelo fabricante.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Próximo passo? Colocar o <a href="http://www.freertos.org/" target="_blank">FreeRTOS</a> para rodar no kit!</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Até lá!</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Um abraço,</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Sergio Prado</span></p>
<div id="-chrome-auto-translate-plugin-dialog" style="opacity: 1 !important; background-image: initial !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: transparent !important; position: absolute !important; top: 0px; left: 0px; overflow-x: visible !important; overflow-y: visible !important; z-index: 999999 !important; text-align: left !important; display: none; background-position: initial initial !important; background-repeat: initial initial !important; padding: 0px !important; margin: 0px !important;">
<div style="max-width: 300px !important; color: #fafafa !important; opacity: 0.8 !important; border-color: #000000 !important; border-width: 0px !important; -webkit-border-radius: 10px !important; background-color: #363636 !important; font-size: 16px !important; padding: 8px !important; overflow: visible !important; background-image: -webkit-gradient(linear, left top, right bottom, color-stop(0%, #000), color-stop(50%, #363636), color-stop(100%, #000)); z-index: 999999 !important; text-align: left  !important;"></div>
<p><img style="position: absolute !important; z-index: -1 !important; right: 1px !important; top: -20px !important; cursor: pointer !important; -webkit-border-radius: 20px; background-color: rgba(200, 200, 200, 0.3) !important; padding: 3px 5px 0 !important; margin: 0 !important;" onclick="document.location.href='http://translate.google.com/';" src="http://www.google.com/uds/css/small-logo.png" alt="small logo Mbed   Desenvolvendo em Cortex M3 com o GCC"  title="Mbed   Desenvolvendo em Cortex M3 com o GCC" /></p>
</div>
<div class="shr-publisher-2682"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic --><p>Posts relacionados:</p><ol>
<li><a href='http://sergioprado.org/novos-brinquedos-no-pedaco-mbed-e-lpcxpresso/' rel='bookmark' title='Novos brinquedos no pedaço: mbed e LPCXpresso'>Novos brinquedos no pedaço: mbed e LPCXpresso</a></li>
<li><a href='http://sergioprado.org/projetando-na-nuvem-com-o-kit-mbed/' rel='bookmark' title='Projetando na nuvem com o kit mbed'>Projetando na nuvem com o kit mbed</a></li>
</ol><p><p>Sergio Prado atua com desenvolvimento de software para sistemas embarcados há mais de 15 anos. É sócio-fundador da Embed­ded Lab­works, uma empresa focada em te aju­dar a desen­volver soft­ware de qual­i­dade para sis­temas embar­ca­dos. Se você pre­cisa de ajuda para desen­volver seu pro­duto, ou quer saber mais sobre o que a Embed­ded Lab­works pode fazer por você, acesse <a href=”http://e-labworks.com/servicos/”> http://e-labworks.com/servicos</a>.</p>
<p>Este post foi originalmente publicado em <a href="http://sergioprado.org/mbed-desenvolvendo-em-cortex-m3-com-o-gcc/">Mbed — Desenvolvendo em Cortex-M3 com o GCC</a>.</p></p>]]></content:encoded>
			<wfw:commentRss>http://sergioprado.org/mbed-desenvolvendo-em-cortex-m3-com-o-gcc/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Desenvolvendo com o Qt Creator em Linux embarcado</title>
		<link>http://sergioprado.org/desenvolvendo-com-o-qt-creator-em-linux-embarcado/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=desenvolvendo-com-o-qt-creator-em-linux-embarcado</link>
		<comments>http://sergioprado.org/desenvolvendo-com-o-qt-creator-em-linux-embarcado/#comments</comments>
		<pubDate>Thu, 19 Apr 2012 22:29:18 +0000</pubDate>
		<dc:creator>Sergio Prado</dc:creator>
				<category><![CDATA[Beagleboard]]></category>
		<category><![CDATA[Ferramentas]]></category>
		<category><![CDATA[Linux embarcado]]></category>
		<category><![CDATA[qt]]></category>
		<category><![CDATA[qtcreator]]></category>
		<category><![CDATA[toolchain]]></category>

		<guid isPermaLink="false">http://sergioprado.org/?p=2643</guid>
		<description><![CDATA[<p>Aprenda como configurar o Qt Creator para desenvolver aplicações gráficas em Linux embarcado.</p><p><p>Sergio Prado atua com desenvolvimento de software para sistemas embarcados há mais de 15 anos. É sócio-fundador da Embed­ded Lab­works, uma empresa focada em te aju­dar a desen­volver soft­ware de qual­i­dade para sis­temas embar­ca­dos. Se você pre­cisa de ajuda para desen­volver seu pro­duto, ou quer saber mais sobre o que a Embed­ded Lab­works pode fazer por você, acesse <a href=”http://e-labworks.com/servicos/”> http://e-labworks.com/servicos</a>.</p>
<p>Este post foi originalmente publicado em <a href="http://sergioprado.org/desenvolvendo-com-o-qt-creator-em-linux-embarcado/">Desenvolvendo com o Qt Creator em Linux embarcado</a>.</p></p>
Posts relacionados:<ol>
<li><a href='http://sergioprado.org/desmistificando-toolchains-em-linux-embarcado/' rel='bookmark' title='Desmistificando toolchains em Linux embarcado'>Desmistificando toolchains em Linux embarcado</a></li>
<li><a href='http://sergioprado.org/gerando-e-usando-toolchains-em-linux-embarcado/' rel='bookmark' title='Gerando e usando toolchains em Linux embarcado'>Gerando e usando toolchains em Linux embarcado</a></li>
<li><a href='http://sergioprado.org/configurando-usando-eclipse-em-linux-embarcado/' rel='bookmark' title='Configurando e usando o Eclipse em Linux embarcado'>Configurando e usando o Eclipse em Linux embarcado</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic -->
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Um tempo atrás escrevi um artigo sobre o <a href="http://sergioprado.org/2011/02/28/compilando-qt-e-aplicacoes-graficas-em-linux-embarcado/" target="_blank">desenvolvimento com Qt em Linux embarcado</a>, mas não cheguei a tratar do <a href="http://qt.nokia.com/products/developer-tools/" target="_blank">Qt Creator</a>.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">O Qt Creator é uma IDE completa e multi-plataforma para desenvolvimento em Qt, com suporte total à design de interface gráfica. Sim, com ela você consegue desenvolver uma aplicação gráfica em Qt, criando janelas e arrastando botões e campos de texto! Simples assim!</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Para desenvolvimento nativo, ela é plug’n play. Ou seja, basta baixar e usar. Já para desenvolvimento em Linux embarcado, você precisará de um ambiente configurado e de alguns ajustes na ferramenta. É o que veremos neste artigo.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;"><strong>PREPARANDO O TERRENO</strong></span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">O kit de desenvolvimento (target) que usaremos para os testes será a <a href="http://sergioprado.org/2011/05/16/beagleboard-o-cachorrinho-open-source/" target="_blank">Beagleboard-xM</a>, mas o mesmo processo deve funcionar em qualquer outra plataforma.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Para começar, você vai precisar de um toolchain. Não sabe o que é um toolchain? Então você deve ler o artigo “<a href="http://sergioprado.org/2011/11/02/desmistificando-toolchains-em-linux-embarcado/" target="_blank">Desmistificando toolchains em Linux embarcado</a>”.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Porque precisamos de um toolchain? Porque iremos cross-compilar as bibliotecas do Qt para o kit de desenvolvimento.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Então como eu consigo um toolchain, Sergio? Fácil, já respondi esta pergunta para você no artigo “<a href="http://sergioprado.org/2011/11/30/gerando-e-usando-toolchains-em-linux-embarcado/" target="_blank">Gerando e usando toolchains em Linux embarcado</a>”.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Meu conselho é você usar o toolchain da CodeSourcery ou gerar um toolchain para ARM genérico com a glibc. Prometo que isso irá evitar muita dor de cabeça e algumas noites mal dormidas.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Digo isso porque já tive alguns problemas tentando compilar o Qt manualmente com um toolchain baseado na uClibc. Mas se você quer insistir nessa idéia, sugiro usar o Buildroot para compilar o Qt. Ele usa uma versão mais antiga do Qt, e já possui todos os patches para compilar sem problemas com um toolchain baseado na uClibc. À propósito, já expliquei como fazer isso no artigo “<a href="http://sergioprado.org/2011/02/28/compilando-qt-e-aplicacoes-graficas-em-linux-embarcado/" target="_blank">Compilando Qt e aplicações gráficas em Linux embarcado</a>”.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Com o toolchain preparado, mãos à obra!</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;"><strong>COMPILANDO O QT</strong></span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;"><strong></strong>O primeiro passo é baixar e compilar as bibliotecas do Qt. Esse processo vai lhe exigir muita paciência e algumas xícaras de café.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Para baixar e extrair os fontes do Qt:</span></p>


<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">$ wget http://get.qt.nokia.com/qt/source/qt-everywhere-opensource-src-4.8.1.tar.gz
$ tar zxfv qt-everywhere-opensource-src-4.8.1.tar.gz
$ cd qt-everywhere-opensource-src-4.8.1</pre></div></div>



<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Antes de compilar, vamos setar a variável de ambiente PATH para que possamos usar as ferramentas do toolchain (ajuste de acordo com a localização do seu toolchain):</span></p>


<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">$ export PATH=/opt/toolchain/arm-linux/bin:$PATH</pre></div></div>



<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Agora vamos configurar o Qt:</span></p>


<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">$ ./configure -opensource -confirm-license -embedded arm -xplatform qws/linux-arm-g++ -little-endian -qt-zlib -qt-libtiff -qt-libpng -qt-libmng -qt-libjpeg -prefix /usr/local/qt-arm</pre></div></div>



<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Esta configuração irá preparar o Qt para ser compilado para um sistema ARM little-endian, cujo cross-compiler tem o prefixo <em>arm-linux–</em>. Se sua plataforma for diferente desta configuração, precisará alterar a opção <em>–xplatform</em>. <a href="http://doc.qt.nokia.com/4.7-snapshot/qt-embedded-crosscompiling.html" target="_blank">Este link</a> explica melhor o processo.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Se o toolchain que você esta usando não é o mesmo toolchain que gerou o rootfs do seu kit de desenvolvimento, sugiro incluir no comando acima a opção “<em>–static</em>” (sem os parênteses). Se você esta em dúvida, ou não faz a menor idéia do que eu quiz dizer, use-o mesmo assim.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Depois de configurado é só compilar. Prepare-se, porque vai levar (literalmente) algumas horas. Faça isso à noite. Digite o comando abaixo, e até amanhã…</span></p>


<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">$ make</pre></div></div>



<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Bom dia! Agora mais alguns minutos para instalar:</span></p>


<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">$ sudo make install</pre></div></div>



<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Agora é só copiar as bibliotecas para o kit de desenvolvimento. Este procedimento vai depender bastante de como você montou o seu rootfs. Se estiver em uma memória flash, você vai precisar de uma ferramenta de rede como o scp para copiar os arquivos. Se estiver em um cartão SD, basta copiar para o cartão. Mas se você for mesmo esperto, terá montado seu rootfs via NFS (o rootfs fica disponibilizado localmente na sua máquina, e é acessado remotamente via rede pelo kit de desenvolvimento).</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Mas Sergio, eu não sei como montar um rootfs via NFS. Vai me dizer que você também escreveu um artigo sobre isso? Sim, escrevi. Como adivinhou? :) É só acessar o artigo “<a href="http://sergioprado.org/2010/12/27/mini2440-montando-rootfs-no-linux-via-nfs/" target="_blank">Montando o rootfs no Linux via NFS</a>”. Não se esqueça de adaptar os parâmetros para o seu target (kit de desenvolvimento).</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Com o rootfs disponível localmente e montado via NFS, basta copiar as bibliotecas do Qt. Para fins didáticos, vou considerar que o meu rootfs encontra-se no diretório <em>/mnt/rootfs</em> (ajuste de acordo com o seu):</span></p>


<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">$ sudo mkdir -p /mnt/rootfs/usr/local/qt-arm/
$ sudo cp -av /usr/local/qt-arm/lib /mnt/usr/local/qt-arm/</pre></div></div>



<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Como as bibliotecas do Qt foram instaladas em um diretório que não é padrão no Linux, precisamos incluir seu caminho na variável de ambiente LD_LIBRARY_PATH. Coloque a linha abaixo no arquivo /etc/profile do target e reinicie-o:</span></p>


<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">export LD_LIBRARY_PATH=/usr/local/qt-arm/lib:$LD_LIBRARY_PATH</pre></div></div>



<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Você pode testar a instalação do Qt escrevendo uma aplicação simples. Dá uma olhada novamente <a href="http://sergioprado.org/2011/02/28/compilando-qt-e-aplicacoes-graficas-em-linux-embarcado/" target="_blank">neste artigo aqui</a>.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;"><strong>INSTALANDO E CONFIGURANDO O QT CREATOR</strong></span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;"><strong></strong>A versão do Qt Creator que usaremos aqui é a 2.2.1. Para instalá-lo, basta usar o gerenciador de pacotes da sua distribuição. No Ubuntu, execute o comando abaixo:</span></p>


<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">$ sudo apt-get install qtcreator</pre></div></div>



<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Agora vamos configurá-lo para cross-compilar nossa aplicação. O primeiro passo é configurar o qmake, o gerenciador do sistema de build do Qt:</span></p>
<ol>
	<li><span style="font-family: verdana, geneva; font-size: 14px;">Abra o Qt Creator e acesse o menu “<em>Tools -&gt; Options -&gt; Qt4</em>″.</span></li>
	<li><span style="font-family: verdana, geneva; font-size: 14px;">Clique em “<em>Add</em>”.</span></li>
	<li><span style="font-family: verdana, geneva; font-size: 14px;">Configure o campo “<em>Version</em>” com “<em>Beagleboard Qt 4.8.1</em>″.</span></li>
	<li><span style="font-family: verdana, geneva; font-size: 14px;">Configure o campo “<em>qmake location</em>” com o local de instalação do qmake, que no nosso caso é “<em>/usr/local/qt-arm/bin/qmake</em>”.</span></li>
	<li><span style="font-family: verdana, geneva; font-size: 14px;">Clique em “<em>OK</em>”.</span></li>
</ol>
<p style="text-align: center;"><span style="font-family: verdana, geneva;"><span style="font-size: 14px;"><a href="http://sergioprado.org/wp-content/uploads/2012/04/1.qt_qmake_cfg.png" target="_blank"><img class="size-full wp-image-2651 aligncenter" title="1.qt_qmake_cfg" src="http://sergioprado.org/wp-content/uploads/2012/04/1.qt_qmake_cfg.png" alt="1.qt qmake cfg Desenvolvendo com o Qt Creator em Linux embarcado" width="550" height="355" /></a></span></span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Agora vamos configurar o toolchain:</span></p>
<ol>
	<li><span style="font-family: verdana, geneva; font-size: 14px;">Acesse o menu “<em>Tools -&gt; Options -&gt; Tool Chains</em>”.</span></li>
	<li><span style="font-family: verdana, geneva; font-size: 14px;">Clique em “<em>Add</em>”</span></li>
	<li><span style="font-family: verdana, geneva; font-size: 14px;">Configure o caminho completo do compilador C++ e do GDB do seu toolchain conforme a imagem abaixo.</span></li>
	<li><span style="font-family: verdana, geneva; font-size: 14px;">Clique em “<em>OK</em>”.</span></li>
</ol>
<p style="text-align: center;"><span style="font-family: verdana, geneva;"><span style="font-size: 14px;"><a href="http://sergioprado.org/wp-content/uploads/2012/04/2.qt_toolchain_cfg.png" target="_blank"><img class="size-full wp-image-2653 aligncenter" title="2.qt_toolchain_cfg" src="http://sergioprado.org/wp-content/uploads/2012/04/2.qt_toolchain_cfg.png" alt="2.qt toolchain cfg Desenvolvendo com o Qt Creator em Linux embarcado" width="550" height="355" /></a></span></span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Agora vamos criar um projeto para testar:</span></p>
<ol>
	<li><span style="font-family: verdana, geneva; font-size: 14px;">Acesse o menu “<em>File -&gt; New File</em>”.</span></li>
	<li><span style="font-family: verdana, geneva; font-size: 14px;">Selecione a opção “<em>Project -&gt; Qt Widget Project -&gt; Qt GUI Application</em>”.</span></li>
	<li><span style="font-family: verdana, geneva; font-size: 14px;">Clique em “<em>Choose…</em>”, dê um nome para seu projeto e confirme o restante das opções até o “<em>Finish</em>”.</span></li>
</ol>
<p style="text-align: center;"><span style="font-family: verdana, geneva;"><span style="font-size: 14px;"><a href="http://sergioprado.org/wp-content/uploads/2012/04/3.qt_new_gui_app.png" target="_blank"><img class="size-full wp-image-2656 aligncenter" title="3.qt_new_gui_app" src="http://sergioprado.org/wp-content/uploads/2012/04/3.qt_new_gui_app.png" alt="3.qt new gui app Desenvolvendo com o Qt Creator em Linux embarcado" width="550" height="354" /></a></span></span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Agora vamos configurar o projeto para usar as ferramentas de cross-compilação:</span></p>
<ol>
	<li><span style="font-family: verdana, geneva; font-size: 14px;">Selecionar “<em>Projects</em>” à esquerda.</span></li>
	<li><span style="font-family: verdana, geneva; font-size: 14px;">Configurar o campo “<em>Qt Version</em>” com “<em>Beagleboard Qt 4.8.1</em>″.</span></li>
</ol>
<p style="text-align: center;"><span style="font-family: verdana, geneva;"><span style="font-size: 14px;"><a href="http://sergioprado.org/wp-content/uploads/2012/04/4.qt_set_build.png" target="_blank"><img class="size-full wp-image-2657 aligncenter" title="4.qt_set_build" src="http://sergioprado.org/wp-content/uploads/2012/04/4.qt_set_build.png" alt="4.qt set build Desenvolvendo com o Qt Creator em Linux embarcado" width="550" height="355" /></a></span></span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Agora é só desenvolver! À propósito, arrastar e alinhar botões e labels me trouxeram boas lembranças do saudoso Delphi… :)</span></p>
<p style="text-align: center;"><span style="font-family: verdana, geneva;"><span style="font-size: 14px;"><a href="http://sergioprado.org/wp-content/uploads/2012/04/5.qt_ui_dev.png" target="_blank"><img class="size-full wp-image-2658 aligncenter" title="5.qt_ui_dev" src="http://sergioprado.org/wp-content/uploads/2012/04/5.qt_ui_dev.png" alt="5.qt ui dev Desenvolvendo com o Qt Creator em Linux embarcado" width="550" height="366" /></a></span></span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Salve e compile. Será gerado um binário com o mesmo nome do projeto. Copie o binário para o target e execute-o (lembre-se de passar o parâmetro <em>–qws</em>):</span></p>


<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">$ /usr/sbin/qt_beagle -qws</pre></div></div>



<p style="text-align: center;"><span style="font-family: verdana, geneva;"><span style="font-size: 14px;"><a href="http://sergioprado.org/wp-content/uploads/2012/04/6.qt_app_test.jpg" target="_blank"><img class="size-full wp-image-2659 aligncenter" title="6.qt_app_test" src="http://sergioprado.org/wp-content/uploads/2012/04/6.qt_app_test.jpg" alt="6.qt app test Desenvolvendo com o Qt Creator em Linux embarcado" width="550" height="413" /></a></span></span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Fácil, não? :) Agora não tem desculpa para não desenvolver aplicações gráficas facilmente em Linux embarcado!</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Até a próxima!</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Um abraço,</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Sergio Prado</span></p>
<div id="-chrome-auto-translate-plugin-dialog" style="opacity: 1 !important; background-image: initial !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: transparent !important; position: absolute !important; top: 0px; left: 0px; overflow-x: visible !important; overflow-y: visible !important; z-index: 999999 !important; text-align: left !important; display: none; background-position: initial initial !important; background-repeat: initial initial !important; padding: 0px !important; margin: 0px !important;">
<div style="max-width: 300px !important; color: #fafafa !important; opacity: 0.8 !important; border-color: #000000 !important; border-width: 0px !important; -webkit-border-radius: 10px !important; background-color: #363636 !important; font-size: 16px !important; padding: 8px !important; overflow: visible !important; background-image: -webkit-gradient(linear, left top, right bottom, color-stop(0%, #000), color-stop(50%, #363636), color-stop(100%, #000)); z-index: 999999 !important; text-align: left  !important;"></div>
<p><img style="position: absolute !important; z-index: -1 !important; right: 1px !important; top: -20px !important; cursor: pointer !important; -webkit-border-radius: 20px; background-color: rgba(200, 200, 200, 0.3) !important; padding: 3px 5px 0 !important; margin: 0 !important;" onclick="document.location.href='http://translate.google.com/';" src="http://www.google.com/uds/css/small-logo.png" alt="small logo Desenvolvendo com o Qt Creator em Linux embarcado"  title="Desenvolvendo com o Qt Creator em Linux embarcado" /></p>
</div>
<div class="shr-publisher-2643"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic --><p>Posts relacionados:</p><ol>
<li><a href='http://sergioprado.org/desmistificando-toolchains-em-linux-embarcado/' rel='bookmark' title='Desmistificando toolchains em Linux embarcado'>Desmistificando toolchains em Linux embarcado</a></li>
<li><a href='http://sergioprado.org/gerando-e-usando-toolchains-em-linux-embarcado/' rel='bookmark' title='Gerando e usando toolchains em Linux embarcado'>Gerando e usando toolchains em Linux embarcado</a></li>
<li><a href='http://sergioprado.org/configurando-usando-eclipse-em-linux-embarcado/' rel='bookmark' title='Configurando e usando o Eclipse em Linux embarcado'>Configurando e usando o Eclipse em Linux embarcado</a></li>
</ol><p><p>Sergio Prado atua com desenvolvimento de software para sistemas embarcados há mais de 15 anos. É sócio-fundador da Embed­ded Lab­works, uma empresa focada em te aju­dar a desen­volver soft­ware de qual­i­dade para sis­temas embar­ca­dos. Se você pre­cisa de ajuda para desen­volver seu pro­duto, ou quer saber mais sobre o que a Embed­ded Lab­works pode fazer por você, acesse <a href=”http://e-labworks.com/servicos/”> http://e-labworks.com/servicos</a>.</p>
<p>Este post foi originalmente publicado em <a href="http://sergioprado.org/desenvolvendo-com-o-qt-creator-em-linux-embarcado/">Desenvolvendo com o Qt Creator em Linux embarcado</a>.</p></p>]]></content:encoded>
			<wfw:commentRss>http://sergioprado.org/desenvolvendo-com-o-qt-creator-em-linux-embarcado/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Pesquisa para o TI Tech Day 2012</title>
		<link>http://sergioprado.org/pesquisa-para-o-ti-tech-day-2012/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=pesquisa-para-o-ti-tech-day-2012</link>
		<comments>http://sergioprado.org/pesquisa-para-o-ti-tech-day-2012/#comments</comments>
		<pubDate>Fri, 06 Apr 2012 00:26:34 +0000</pubDate>
		<dc:creator>Sergio Prado</dc:creator>
				<category><![CDATA[Eventos]]></category>
		<category><![CDATA[beaglebone]]></category>
		<category><![CDATA[Linux embarcado]]></category>
		<category><![CDATA[texas]]></category>

		<guid isPermaLink="false">http://sergioprado.org/?p=2614</guid>
		<description><![CDATA[<p>Pesquisa para definir a grade de palestras que serão apresentadas no 10° TI Tech Day.</p><p><p>Sergio Prado atua com desenvolvimento de software para sistemas embarcados há mais de 15 anos. É sócio-fundador da Embed­ded Lab­works, uma empresa focada em te aju­dar a desen­volver soft­ware de qual­i­dade para sis­temas embar­ca­dos. Se você pre­cisa de ajuda para desen­volver seu pro­duto, ou quer saber mais sobre o que a Embed­ded Lab­works pode fazer por você, acesse <a href=”http://e-labworks.com/servicos/”> http://e-labworks.com/servicos</a>.</p>
<p>Este post foi originalmente publicado em <a href="http://sergioprado.org/pesquisa-para-o-ti-tech-day-2012/">Pesquisa para o TI Tech Day 2012</a>.</p></p>
Posts relacionados:<ol>
<li><a href='http://sergioprado.org/pesquisa-sobre-curso-de-linux-embarcado/' rel='bookmark' title='Pesquisa sobre curso de Linux embarcado'>Pesquisa sobre curso de Linux embarcado</a></li>
<li><a href='http://sergioprado.org/call-for-papers-para-o-esc-brazil-2011/' rel='bookmark' title='Call for Papers para o ESC Brazil 2011'>Call for Papers para o ESC Brazil 2011</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic -->
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">No dia 29 de agosto vai acontecer em São Paulo o 10° TI Tech Day, um evento anual da <a href="http://ti.com" target="_blank">Texas Instruments</a>, onde ela reúne todos os seus fornecedores e parceiros para um dia repleto de palestras, hands-on e exposições.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">O evento ainda esta em fase de planejamento, e como são os clientes e parceiros da Texas que decidem seu conteúdo, esta no ar uma pesquisa para definir a grade de palestras que serão apresentadas no evento.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Fui convidado para ministrar o hands-on de Linux embarcado com a Beaglebone. Portanto, se você quiser participar de um hands-on de Linux embarcado com Sergio Prado, e fazer algumas coisas bem interessantes com nosso querido Pinguim Tux na <a href="http://sergioprado.org/2012/01/26/introduzindo-a-beaglebone/" target="_blank">Beaglebone</a>, é só responder a pesquisa e selecionar o hands-on “<em>Linux nos processadores AM335x (Beagle Bone)</em>”. Apenas os hands-on’s mais votados farão parte da grade de palestras do evento.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">A pesquisa só vale até o dia 10 de Abril. Para responder à pesquisa, basta clicar na imagem abaixo!</span></p>
<p style="text-align: center;"><a href="http://www.surveymonkey.com/s/DJPCJL3" target="_blank"><img class="size-full wp-image-2632 aligncenter" title="Convite para pesquisa TECHDAY 2012" src="http://sergioprado.org/wp-content/uploads/2012/04/Convite-para-pesquisa-TECHDAY-20121.jpg" alt="Convite para pesquisa TECHDAY 20121 Pesquisa para o TI Tech Day 2012" width="514" height="768" /></a></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Um abraço,</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Sergio Prado</span></p>
<div id="-chrome-auto-translate-plugin-dialog" style="opacity: 1 !important; background-image: initial !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: transparent !important; position: absolute !important; top: 0px; left: 0px; overflow-x: visible !important; overflow-y: visible !important; z-index: 999999 !important; text-align: left !important; display: none; background-position: initial initial !important; background-repeat: initial initial !important; padding: 0px !important; margin: 0px !important;">
<div style="max-width: 300px !important; color: #fafafa !important; opacity: 0.8 !important; border-color: #000000 !important; border-width: 0px !important; -webkit-border-radius: 10px !important; background-color: #363636 !important; font-size: 16px !important; padding: 8px !important; overflow: visible !important; background-image: -webkit-gradient(linear, left top, right bottom, color-stop(0%, #000), color-stop(50%, #363636), color-stop(100%, #000)); z-index: 999999 !important; text-align: left  !important;"></div>
<img style="position: absolute !important; z-index: -1 !important; right: 1px !important; top: -20px !important; cursor: pointer !important; -webkit-border-radius: 20px; background-color: rgba(200, 200, 200, 0.3) !important; padding: 3px 5px 0 !important; margin: 0 !important;" onclick="document.location.href='http://translate.google.com/';" src="http://www.google.com/uds/css/small-logo.png" alt="small logo Pesquisa para o TI Tech Day 2012"  title="Pesquisa para o TI Tech Day 2012" /></div>
<div class="shr-publisher-2614"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic --><p>Posts relacionados:</p><ol>
<li><a href='http://sergioprado.org/pesquisa-sobre-curso-de-linux-embarcado/' rel='bookmark' title='Pesquisa sobre curso de Linux embarcado'>Pesquisa sobre curso de Linux embarcado</a></li>
<li><a href='http://sergioprado.org/call-for-papers-para-o-esc-brazil-2011/' rel='bookmark' title='Call for Papers para o ESC Brazil 2011'>Call for Papers para o ESC Brazil 2011</a></li>
</ol><p><p>Sergio Prado atua com desenvolvimento de software para sistemas embarcados há mais de 15 anos. É sócio-fundador da Embed­ded Lab­works, uma empresa focada em te aju­dar a desen­volver soft­ware de qual­i­dade para sis­temas embar­ca­dos. Se você pre­cisa de ajuda para desen­volver seu pro­duto, ou quer saber mais sobre o que a Embed­ded Lab­works pode fazer por você, acesse <a href=”http://e-labworks.com/servicos/”> http://e-labworks.com/servicos</a>.</p>
<p>Este post foi originalmente publicado em <a href="http://sergioprado.org/pesquisa-para-o-ti-tech-day-2012/">Pesquisa para o TI Tech Day 2012</a>.</p></p>]]></content:encoded>
			<wfw:commentRss>http://sergioprado.org/pesquisa-para-o-ti-tech-day-2012/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ESC Silicon Valley 2012 — Dia 4</title>
		<link>http://sergioprado.org/esc-silicon-valley-2012-dia-4/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=esc-silicon-valley-2012-dia-4</link>
		<comments>http://sergioprado.org/esc-silicon-valley-2012-dia-4/#comments</comments>
		<pubDate>Mon, 02 Apr 2012 17:32:01 +0000</pubDate>
		<dc:creator>Sergio Prado</dc:creator>
				<category><![CDATA[Eventos]]></category>
		<category><![CDATA[esc]]></category>
		<category><![CDATA[sistemas embarcados]]></category>

		<guid isPermaLink="false">http://sergioprado.org/?p=2600</guid>
		<description><![CDATA[<p>O quarto dia no ESC Sil­i­con Val­ley 2012.</p><p><p>Sergio Prado atua com desenvolvimento de software para sistemas embarcados há mais de 15 anos. É sócio-fundador da Embed­ded Lab­works, uma empresa focada em te aju­dar a desen­volver soft­ware de qual­i­dade para sis­temas embar­ca­dos. Se você pre­cisa de ajuda para desen­volver seu pro­duto, ou quer saber mais sobre o que a Embed­ded Lab­works pode fazer por você, acesse <a href=”http://e-labworks.com/servicos/”> http://e-labworks.com/servicos</a>.</p>
<p>Este post foi originalmente publicado em <a href="http://sergioprado.org/esc-silicon-valley-2012-dia-4/">ESC Silicon Valley 2012 — Dia 4</a>.</p></p>
Posts relacionados:<ol>
<li><a href='http://sergioprado.org/esc-silicon-valley-2012-dia-3/' rel='bookmark' title='ESC Silicon Valley 2012 — Dia 3'>ESC Silicon Valley 2012 — Dia 3</a></li>
<li><a href='http://sergioprado.org/esc-silicon-valley-2012-dia-1/' rel='bookmark' title='ESC Silicon Valley 2012 — Dia 1'>ESC Silicon Valley 2012 — Dia 1</a></li>
<li><a href='http://sergioprado.org/esc-silicon-valley-2012-dia-2/' rel='bookmark' title='ESC Silicon Valley 2012 — Dia 2'>ESC Silicon Valley 2012 — Dia 2</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic -->
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Acabou!</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">No quarto dia assisti quase todas as apresentações do Black Hat, conferência focada em segurança para dispositivos embarcados.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">O dia começou com a ótima palestra de Joe Grand da <a href="http://www.grandideastudio.com/" target="_blank">Grand Idea Studio</a> com o tema “<em>The Current State of Hardware Hacking</em>”.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva;"><span style="font-size: 14px;"><img class="aligncenter size-full wp-image-2602" title="DSC00072" src="http://sergioprado.org/wp-content/uploads/2012/04/DSC00072.jpg" alt="DSC00072 ESC Silicon Valley 2012   Dia 4" width="550" height="413" /></span></span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Foi uma apresentação bem descontraída, onde ele mostrou a evolução das técnicas e mecanismos de hardware hacking, incluindo extração e engenharia reversa de firmware, sniffing de barramentos e interfaces de comunicação, quebras de senha, criptografia, etc. Ele ressaltou que a quantidade de hacks em hardware aumentou bastante, principalmente pela facilidade de obter informações e pela quantidade de ferramentas disponíveis. Segundo ele, o problema esta na tendência de pensarmos mais como engenheiros do que como hackers, principamente pela pressão de orçamento e time-to-market dos produtos que colocamos no mercado.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Ele mostrou como boa parte destas técnicas são aplicadas facilmente, às vezes por pessoas que nem possuem conhecimento técnico avançado. Seus exemplos de hardware hacking passaram por mouses, teclados e máquinas de votação; até celulares, videogames e bombas de insulina. O que podemos fazer? Mudar a mentalidade, pensar como um hacker, aceitar os riscos e aprender com o passado.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Logo depois fui assistir ao keynote de Robert Vamosi da <a href="https://www.mocana.com/" target="_blank">Mocana</a> com o tema “<em>An Inconvenient Truth: Embedded Security 2012</em>″. O keynote bateu novamente na tecla “segurança em sistemas embarcados”, focando nos riscos de segurança em dispositivos conectados à Internet como TVs, videogames, impressoras, automóveis, etc. Ele mostrou uma pesquisa onde 25% das empresas sabem que existem problemas de segurança em seus dispositivos, mas 39% delas decidiram não fazer nada. É um problema ainda pouco perceptível para muita gente, mas que com a migração para o IPv6, até uma torradeira poderá colocar em risco a rede que temos em casa!</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Aproveitei depois para dar uma última volta no salão de exposições, e tive a oportunidade de conhecer Koen Kooi (core developer do OpenEmbedded) e Gerald Coley (projetista do hardware da Beagleboard).</span></p>
<p style="text-align: justify;"><img class="aligncenter size-full wp-image-2603" title="DSC00078" src="http://sergioprado.org/wp-content/uploads/2012/04/DSC00078.jpg" alt="DSC00078 ESC Silicon Valley 2012   Dia 4" width="550" height="413" /></p>
<p style="text-align: center;"><strong>Da esquerda para a direita: Gerald Coley, Marcelo Sousa, Koen Kooi, </strong><br /><strong>Sergio Prado e Jason Kridner</strong></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Depois de uma almoço rápido, mais algumas palestras de hacking. Barnaby Jack mostrou na sua palestra “Life Threatening Vulnerabilities” que falhas de segurança em equipamentos médicos podem matar com facilidade, através de uma demonstração ao vivo e à cores de uma aplicação que ele mesmo desenvolveu para controlar remotamente uma bomba de insulina.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva;"><span style="font-size: 14px;"><img class="aligncenter size-full wp-image-2605" title="DSC00081" src="http://sergioprado.org/wp-content/uploads/2012/04/DSC000811.jpg" alt="DSC000811 ESC Silicon Valley 2012   Dia 4" width="550" height="413" /></span></span></p>
<p style="text-align: justify;"><strong><span style="font-family: verdana, geneva; font-size: 14px;">O EVENTO</span></strong></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">No geral, foi um ótimo evento. Palestras altamente técnicas e ótima oportunidade de networking com as principais empresas da área. Os dois únicos pontos negativos: ausência de sinal Wi-Fi em quase todas as salas das apresentações e falta de opções para almoço (apenas salada ou lanche).</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Volto ao Brasil com uma perspectiva melhor do mercado, e com várias idéias, contatos e possibilidades de futuros projetos para a comunidade de sistemas embarcados no Brasil.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Que venha agora o ESC Brasil 2012!</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Um abraço,</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Sergio Prado</span></p>
<div id="-chrome-auto-translate-plugin-dialog" style="opacity: 1 !important; background-image: initial !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: transparent !important; position: absolute !important; top: 0px; left: 0px; overflow-x: visible !important; overflow-y: visible !important; z-index: 999999 !important; text-align: left !important; display: none; padding: 0px !important; margin: 0px !important;">
<div style="max-width: 300px !important; color: #fafafa !important; opacity: 0.8 !important; border-color: #000000 !important; border-width: 0px !important; -webkit-border-radius: 10px !important; background-color: #363636 !important; font-size: 16px !important; padding: 8px !important; overflow: visible !important; background-image: -webkit-gradient(linear, left top, right bottom, color-stop(0%, #000), color-stop(50%, #363636), color-stop(100%, #000)); z-index: 999999 !important; text-align: left  !important;"></div>
<img style="position: absolute !important; z-index: -1 !important; right: 1px !important; top: -20px !important; cursor: pointer !important; -webkit-border-radius: 20px; background-color: rgba(200, 200, 200, 0.3) !important; padding: 3px 5px 0 !important; margin: 0 !important;" onclick="document.location.href='http://translate.google.com/';" src="http://www.google.com/uds/css/small-logo.png" alt="small logo ESC Silicon Valley 2012   Dia 4"  title="ESC Silicon Valley 2012   Dia 4" /></div>
<div class="shr-publisher-2600"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic --><p>Posts relacionados:</p><ol>
<li><a href='http://sergioprado.org/esc-silicon-valley-2012-dia-3/' rel='bookmark' title='ESC Silicon Valley 2012 — Dia 3'>ESC Silicon Valley 2012 — Dia 3</a></li>
<li><a href='http://sergioprado.org/esc-silicon-valley-2012-dia-1/' rel='bookmark' title='ESC Silicon Valley 2012 — Dia 1'>ESC Silicon Valley 2012 — Dia 1</a></li>
<li><a href='http://sergioprado.org/esc-silicon-valley-2012-dia-2/' rel='bookmark' title='ESC Silicon Valley 2012 — Dia 2'>ESC Silicon Valley 2012 — Dia 2</a></li>
</ol><p><p>Sergio Prado atua com desenvolvimento de software para sistemas embarcados há mais de 15 anos. É sócio-fundador da Embed­ded Lab­works, uma empresa focada em te aju­dar a desen­volver soft­ware de qual­i­dade para sis­temas embar­ca­dos. Se você pre­cisa de ajuda para desen­volver seu pro­duto, ou quer saber mais sobre o que a Embed­ded Lab­works pode fazer por você, acesse <a href=”http://e-labworks.com/servicos/”> http://e-labworks.com/servicos</a>.</p>
<p>Este post foi originalmente publicado em <a href="http://sergioprado.org/esc-silicon-valley-2012-dia-4/">ESC Silicon Valley 2012 — Dia 4</a>.</p></p>]]></content:encoded>
			<wfw:commentRss>http://sergioprado.org/esc-silicon-valley-2012-dia-4/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ESC Silicon Valley 2012 — Dia 3</title>
		<link>http://sergioprado.org/esc-silicon-valley-2012-dia-3/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=esc-silicon-valley-2012-dia-3</link>
		<comments>http://sergioprado.org/esc-silicon-valley-2012-dia-3/#comments</comments>
		<pubDate>Thu, 29 Mar 2012 05:22:01 +0000</pubDate>
		<dc:creator>Sergio Prado</dc:creator>
				<category><![CDATA[Eventos]]></category>
		<category><![CDATA[esc]]></category>
		<category><![CDATA[sistemas embarcados]]></category>

		<guid isPermaLink="false">http://sergioprado.org/?p=2588</guid>
		<description><![CDATA[<p>O terceiro dia no ESC Sil­i­con Val­ley 2012.</p><p><p>Sergio Prado atua com desenvolvimento de software para sistemas embarcados há mais de 15 anos. É sócio-fundador da Embed­ded Lab­works, uma empresa focada em te aju­dar a desen­volver soft­ware de qual­i­dade para sis­temas embar­ca­dos. Se você pre­cisa de ajuda para desen­volver seu pro­duto, ou quer saber mais sobre o que a Embed­ded Lab­works pode fazer por você, acesse <a href=”http://e-labworks.com/servicos/”> http://e-labworks.com/servicos</a>.</p>
<p>Este post foi originalmente publicado em <a href="http://sergioprado.org/esc-silicon-valley-2012-dia-3/">ESC Silicon Valley 2012 — Dia 3</a>.</p></p>
Posts relacionados:<ol>
<li><a href='http://sergioprado.org/esc-silicon-valley-2012-dia-1/' rel='bookmark' title='ESC Silicon Valley 2012 — Dia 1'>ESC Silicon Valley 2012 — Dia 1</a></li>
<li><a href='http://sergioprado.org/esc-silicon-valley-2012-dia-2/' rel='bookmark' title='ESC Silicon Valley 2012 — Dia 2'>ESC Silicon Valley 2012 — Dia 2</a></li>
<li><a href='http://sergioprado.org/creative-commons-e-esc-2012/' rel='bookmark' title='Creative Commons e ESC 2012'>Creative Commons e ESC 2012</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Hoje o dia foi tranquilo. Depois da “andança” de ontem, fiquei basicamente assistindo às palestras do ESC e do Android Summit.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Comecei o dia assistindo à palestra “<em>Mixed-Criticality Embedded System Architectures on Android</em>”, que apesar do nome grande, tinho foco no uso do Android em sistemas críticos, que requerem certo nível de segurança. A idéia principal da palestra era o fato de que você não consegue atingir aos requisitos de segurança usando apenas a versão padrão (vanilla) do Android.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Depois de uma apresentação do Android, seu sucesso na área de embarcados, e os desafios envolvidos, o palestrante mostrou as diversas falhas de segurança existentes no SO, e os diversos mecanismos para corrigir o problema, como encriptação, multiboot e uso de hypervisors e microkernels.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Assisti depois duas seções patrocinadas pela NXP.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">A palestra “<em>Easy Dual-Core Development and Debugging with Cortex-M4/M0</em>″ falou sobre a linha LPC4300, um dual-core Cortex-M4 e Cortex-M0 da NXP, que é uma opção interessante para separar processamento e controle. O processamento pode ser feito através de um Cortex-M4, que é basicamente um Cortex-M3 com capacidades de DSP, e o controle fica por conta do Cortex-M0. Os dois cores se comunicam via interrupção e memória compartilhada. De brinde, todos os participantes levaram o kit LPC4330-Xplorer para casa.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">A segunda palestra patrocinada pela NXP foi a “<em>Getting Started with FreeRTOS on NXP’s LPC1769 Microcontroller</em>”, ministrada pelo próprio criador do FreeRTOS, Richard Barry. O tempo era escasso, mas o Richard conseguiu passar uma visão geral de seu RTOS, e executar algumas aplicações demo no kit LPCXpresso, um Cortex-M3 da NXP. Também fomos presenteados com um kit LPCXpresso. No fim da palestra, bati um papo rápido com o Richard, já que na ESC Brasil deste ano minha palestra será exatamente sobre o FreeRTOS.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva;"><span style="font-size: 14px;"><img class="aligncenter size-full wp-image-2590" title="DSC00066" src="http://sergioprado.org/wp-content/uploads/2012/03/DSC00066.jpg" alt="DSC00066 ESC Silicon Valley 2012   Dia 3" width="550" height="413" /></span></span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Logo após o almoço participei de um (lotado) hands-on da Freescale usando o seu interessante <a href="http://www.freescale.com/webapp/sps/site/homepage.jsp?code=TOWER_HOME" target="_blank">Tower System</a>:</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva;"><span style="font-size: 14px;"><img class="aligncenter size-full wp-image-2591" title="DSC00069" src="http://sergioprado.org/wp-content/uploads/2012/03/DSC00069.jpg" alt="DSC00069 ESC Silicon Valley 2012   Dia 3" width="550" height="413" /></span></span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Bem parecido com o hands-on da Micrium, só que com menos tempo disponível, o objetivo era usar o <a href="http://en.wikipedia.org/wiki/MQX" target="_blank">MQX</a> (RTOS da Freescale), para aprender sobre criação de tarefas e mecanismos de sincronização.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva;"><span style="font-size: 14px;"><img class="aligncenter size-full wp-image-2592" title="DSC00068" src="http://sergioprado.org/wp-content/uploads/2012/03/DSC00068.jpg" alt="DSC00068 ESC Silicon Valley 2012   Dia 3" width="350" height="263" /></span></span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Logo depois fui para a palestra “<em>Optimization for Embedded System</em>”, que falava basicamente sobre técnicas de hardware e software para otimizar sistemas embarcados por tamanho, tempo de execução, consumo de energia e custo. Achei a palestra um pouco fraca, muita teoria e blá-blá-blá, mas nada muito prático.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Fui então dar uma volta no hall de expositores, e acabei assistindo à apresentação “<em>Geeks DIY Lab &amp; Giveaways from Raspberry Pi</em>”, que era basicamente uma competição entre 7 participantes pelo melhor projeto DIY (Do-it yourself). A decisão era do público. Foi bem divertido.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva;"><span style="font-size: 14px;"><img class="aligncenter size-full wp-image-2593" title="DSC00070" src="http://sergioprado.org/wp-content/uploads/2012/03/DSC00070.jpg" alt="DSC00070 ESC Silicon Valley 2012   Dia 3" width="550" height="413" /></span></span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">A última palestra que assisti foi “<em>Advanced Compiler Optimizations for the Smallest, Fastest Code</em>”, onde o palestrante Greg Davis, diretor da área de compiladores da <a href="http://www.ghs.com/" target="_blank">Green Hills</a>, falou sobre técnicas usadas por compiladores para otimizar o código por tamanho e por tempo de execução.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Amanhã é o último dia do evento, e provavelmente irei assistir todas palestas do Black Hat. Até lá!</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Um abraço,</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Sergio Prado</span></p>
<div id="-chrome-auto-translate-plugin-dialog" style="opacity: 1 !important; background-image: initial !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: transparent !important; position: absolute !important; top: 0px; left: 0px; overflow-x: visible !important; overflow-y: visible !important; z-index: 999999 !important; text-align: left !important; display: none; background-position: initial initial !important; background-repeat: initial initial !important; padding: 0px !important; margin: 0px !important;">
<div style="max-width: 300px !important; color: #fafafa !important; opacity: 0.8 !important; border-color: #000000 !important; border-width: 0px !important; -webkit-border-radius: 10px !important; background-color: #363636 !important; font-size: 16px !important; padding: 8px !important; overflow: visible !important; background-image: -webkit-gradient(linear, left top, right bottom, color-stop(0%, #000), color-stop(50%, #363636), color-stop(100%, #000)); z-index: 999999 !important; text-align: left  !important;"></div>
<img style="position: absolute !important; z-index: -1 !important; right: 1px !important; top: -20px !important; cursor: pointer !important; -webkit-border-radius: 20px; background-color: rgba(200, 200, 200, 0.3) !important; padding: 3px 5px 0 !important; margin: 0 !important;" onclick="document.location.href='http://translate.google.com/';" src="http://www.google.com/uds/css/small-logo.png" alt="small logo ESC Silicon Valley 2012   Dia 3"  title="ESC Silicon Valley 2012   Dia 3" /></div>
<div class="shr-publisher-2588"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic --><p>Posts relacionados:</p><ol>
<li><a href='http://sergioprado.org/esc-silicon-valley-2012-dia-1/' rel='bookmark' title='ESC Silicon Valley 2012 — Dia 1'>ESC Silicon Valley 2012 — Dia 1</a></li>
<li><a href='http://sergioprado.org/esc-silicon-valley-2012-dia-2/' rel='bookmark' title='ESC Silicon Valley 2012 — Dia 2'>ESC Silicon Valley 2012 — Dia 2</a></li>
<li><a href='http://sergioprado.org/creative-commons-e-esc-2012/' rel='bookmark' title='Creative Commons e ESC 2012'>Creative Commons e ESC 2012</a></li>
</ol><p><p>Sergio Prado atua com desenvolvimento de software para sistemas embarcados há mais de 15 anos. É sócio-fundador da Embed­ded Lab­works, uma empresa focada em te aju­dar a desen­volver soft­ware de qual­i­dade para sis­temas embar­ca­dos. Se você pre­cisa de ajuda para desen­volver seu pro­duto, ou quer saber mais sobre o que a Embed­ded Lab­works pode fazer por você, acesse <a href=”http://e-labworks.com/servicos/”> http://e-labworks.com/servicos</a>.</p>
<p>Este post foi originalmente publicado em <a href="http://sergioprado.org/esc-silicon-valley-2012-dia-3/">ESC Silicon Valley 2012 — Dia 3</a>.</p></p>]]></content:encoded>
			<wfw:commentRss>http://sergioprado.org/esc-silicon-valley-2012-dia-3/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>ESC Silicon Valley 2012 — Dia 2</title>
		<link>http://sergioprado.org/esc-silicon-valley-2012-dia-2/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=esc-silicon-valley-2012-dia-2</link>
		<comments>http://sergioprado.org/esc-silicon-valley-2012-dia-2/#comments</comments>
		<pubDate>Wed, 28 Mar 2012 05:53:20 +0000</pubDate>
		<dc:creator>Sergio Prado</dc:creator>
				<category><![CDATA[Eventos]]></category>
		<category><![CDATA[esc]]></category>
		<category><![CDATA[sistemas embarcados]]></category>

		<guid isPermaLink="false">http://sergioprado.org/?p=2574</guid>
		<description><![CDATA[<p>O segundo dia no ESC Sil­i­con Val­ley 2012.</p><p><p>Sergio Prado atua com desenvolvimento de software para sistemas embarcados há mais de 15 anos. É sócio-fundador da Embed­ded Lab­works, uma empresa focada em te aju­dar a desen­volver soft­ware de qual­i­dade para sis­temas embar­ca­dos. Se você pre­cisa de ajuda para desen­volver seu pro­duto, ou quer saber mais sobre o que a Embed­ded Lab­works pode fazer por você, acesse <a href=”http://e-labworks.com/servicos/”> http://e-labworks.com/servicos</a>.</p>
<p>Este post foi originalmente publicado em <a href="http://sergioprado.org/esc-silicon-valley-2012-dia-2/">ESC Silicon Valley 2012 — Dia 2</a>.</p></p>
Posts relacionados:<ol>
<li><a href='http://sergioprado.org/esc-silicon-valley-2012-dia-1/' rel='bookmark' title='ESC Silicon Valley 2012 — Dia 1'>ESC Silicon Valley 2012 — Dia 1</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic -->
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Como diria um recente amigo meu de Santa Rita, hoje o dia ficou entre fantástico e excepcional! Fiz ótimos contatos, e também contei um pouco com a sorte. Mas vamos “começar pelo começo”!</span></p>
<p style="text-align: justify;"><strong><span style="font-family: verdana, geneva; font-size: 14px;">OLHA O JACK AÍ!</span></strong></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Pois é, <a href="http://sergioprado.org/2011/03/30/entrevista-com-jack-ganssle/" target="_blank">Jack Ganssle</a> é sinônimo de ESC e vice-versa. E lá estava ele mais uma vez com suas palestras sobre boas práticas de desenvolvimento de software embarcado. Esta manhã, ele apresentou o tema “<em>Mars ate my spacecraft</em>”, um tema já batido, mas que eu ainda não havia assistido. Então fui lá.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Como sempre, as palestras do Jack são sempre informativas e engraçadas. O tema principal era sobre as falhas em projetos da Nasa. E como eles (não) aprenderam com os erros. Jack falou basicamente sobre a importância de inspeção de código, qualidade dos testes, tratamento de exceções e uso de watchdogs, uso de ferramentas de controle de versão, etc. A mensagem final era a seguinte: “Focar em corrigir bugs não é o melhor caminho para desenvolver um software de qualidade”.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">No fim, fui dar um olá para o Jack, que me disse não ir ao ESC Brasil este ano, já que junho é o mês que ele costuma velejar com a família. Boa viagem Jack!</span></p>
<p style="text-align: justify;"><strong><span style="font-family: verdana, geneva; font-size: 14px;">KEYNOTE</span></strong></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Gostaria de pular esta parte, se vocês me permitirem, porque o primeiro keynote do evento foi … Bem, na verdade não foi. Um músico sem muito carisma falando (e cantando) em uma conferência de sistemas embarcados… Deixa pra lá.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Cinco minutos após o início do keynote tirei a foto abaixo e voltei para o universo dos geeks!</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva;"><span style="font-size: 14px;"><img class="aligncenter size-full wp-image-2576" title="DSC00042" src="http://sergioprado.org/wp-content/uploads/2012/03/DSC00042.jpg" alt="DSC00042 ESC Silicon Valley 2012 — Dia 2" width="550" height="413" /></span></span></p>
<p style="text-align: justify;"><strong><span style="font-family: verdana, geneva; font-size: 14px;">JASON KRIDNER</span></strong></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Foi quando liguei para o Jason Kridner para ver se ele estava disponível para um bate-papo. Para quem não sabe, Jason trabalha na Texas e é o cara responsável pelo projeto e pela comunidade da <a href="http://beagleboard.org/" target="_blank">Beagleboard</a> e da <a href="http://beagleboard.org/bone" target="_blank">Beaglebone</a>.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">A conversa foi fantástica, e vocês podem aguardar que em breve terei algumas novidades sobre o meu treinamento de Linux embarcado com os “cachorrinhos” da Texas… :)</span></p>
<p style="text-align: justify;"><strong><span style="font-family: verdana, geneva; font-size: 14px;">MUITO BATE-PAPO</span></strong></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">O centro de exposições abriu às 11:30, e não saí mais de lá. Esqueci que estava rolando uma conferência com mais de 50 palestras lá fora. Todas as principais empresas da área de embarcado estavam lá. Tentei bater um papo com cada uma delas, incluindo NXP, TI, Freescale, Renesas, Atmel, Microchip, NI, Micrium, Mentor Graphics, Wind River, Intel, AMD, IAR e ARM.</span></p>
<p><img class="size-full wp-image-2577 aligncenter" title="DSC00048" src="http://sergioprado.org/wp-content/uploads/2012/03/DSC00048.jpg" alt="DSC00048 ESC Silicon Valley 2012 — Dia 2" width="550" height="413" /><img class="size-full wp-image-2578 aligncenter" style="border-style: initial; border-color: initial;" title="DSC00050" src="http://sergioprado.org/wp-content/uploads/2012/03/DSC00050.jpg" alt="DSC00050 ESC Silicon Valley 2012 — Dia 2" width="550" height="413" /></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Em cada uma das conversas, enfatizei bastante o tamanho do mercado de embarcados no Brasil. Em algumas delas, acredito que tenha “plantando uma sementinha”. Quem sabe não colhemos algo num futuro próximo? :)</span></p>
<p style="text-align: justify;"><strong><span style="font-family: verdana, geneva; font-size: 14px;">PURA SORTE</span></strong></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Tenho certeza que tem gente que só vai no ESC para ganhar os brindes, que eles chamam de “giveaways”. Ou vocês acham que a senhora de vestido azul escondida na imagem abaixo estava interessada na arquitetura ARM?</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva;"><span style="font-size: 14px;"><img class="aligncenter size-full wp-image-2579" title="DSC00063" src="http://sergioprado.org/wp-content/uploads/2012/03/DSC00063.jpg" alt="DSC00063 ESC Silicon Valley 2012 — Dia 2" width="550" height="413" /></span></span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Na verdade ela estava esperando (assim como eu) os intermináveis 15 minutos da palestra para o sorteio de um Kindle Touch. Não foi desta vez.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Mas para mim foi em outras 3!</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Ontem ganhei no hands-on do Matt Gordon o livro do uC/OS-III baseado na plataforma da Renesas. Hoje fui sorteado em uma mini-palestra da ExpressLogic e ganhei uma lupa!</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Mas olhem só, durante o dia participei de um mini-curso sobre a IDE de desenvolvimento para Linux embarcado da <a href="http://www.mentor.com/" target="_blank">Mentor Graphics</a>, onde todos os participantes estavam concorrendo à uma <a href="http://pandaboard.org/" target="_blank">Pandaboard</a>. No fim do dia recebi uma ligação do pessoal da Mentor dizendo que fui sorteado! Era a que faltava na minha coleção! :) Portanto, aguardem que em breve escreverei um artigo sobre ela…</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Lá mesmo no estande de Mentor tive o prazer de conhecer pessoalmente Colin Walls, que <a href="http://sergioprado.org/2010/10/08/entrevista-com-colin-walls/" target="_blank">entrevistei um tempo atrás</a>. Ele cumpriu uma promessa que fez a mim por e-mail, e me deu o nova edição de seu livro “<a href="http://sergioprado.org/2010/09/01/resenha-embedded-software-the-works/" target="_blank">Embedded Software — The Works</a>”. Obrigado Collin!</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva;"><span style="font-size: 14px;"><img class="aligncenter size-full wp-image-2580" title="DSC00056" src="http://sergioprado.org/wp-content/uploads/2012/03/DSC00056.jpg" alt="DSC00056 ESC Silicon Valley 2012 — Dia 2" width="550" height="413" /></span></span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Amanhã tem mais!</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Um abraço,</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Sergio Prado</span></p>
<div id="-chrome-auto-translate-plugin-dialog" style="opacity: 1 !important; background-image: initial !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: transparent !important; position: absolute !important; top: 0px; left: 0px; overflow-x: visible !important; overflow-y: visible !important; z-index: 999999 !important; text-align: left !important; display: none; padding: 0px !important; margin: 0px !important;">
<div style="max-width: 300px !important; color: #fafafa !important; opacity: 0.8 !important; border-color: #000000 !important; border-width: 0px !important; -webkit-border-radius: 10px !important; background-color: #363636 !important; font-size: 16px !important; padding: 8px !important; overflow: visible !important; background-image: -webkit-gradient(linear, left top, right bottom, color-stop(0%, #000), color-stop(50%, #363636), color-stop(100%, #000)); z-index: 999999 !important; text-align: left  !important;"></div>
<img style="position: absolute !important; z-index: -1 !important; right: 1px !important; top: -20px !important; cursor: pointer !important; -webkit-border-radius: 20px; background-color: rgba(200, 200, 200, 0.3) !important; padding: 3px 5px 0 !important; margin: 0 !important;" onclick="document.location.href='http://translate.google.com/';" src="http://www.google.com/uds/css/small-logo.png" alt="small logo ESC Silicon Valley 2012 — Dia 2"  title="ESC Silicon Valley 2012 — Dia 2" /></div>
<div class="shr-publisher-2574"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic --><p>Posts relacionados:</p><ol>
<li><a href='http://sergioprado.org/esc-silicon-valley-2012-dia-1/' rel='bookmark' title='ESC Silicon Valley 2012 — Dia 1'>ESC Silicon Valley 2012 — Dia 1</a></li>
</ol><p><p>Sergio Prado atua com desenvolvimento de software para sistemas embarcados há mais de 15 anos. É sócio-fundador da Embed­ded Lab­works, uma empresa focada em te aju­dar a desen­volver soft­ware de qual­i­dade para sis­temas embar­ca­dos. Se você pre­cisa de ajuda para desen­volver seu pro­duto, ou quer saber mais sobre o que a Embed­ded Lab­works pode fazer por você, acesse <a href=”http://e-labworks.com/servicos/”> http://e-labworks.com/servicos</a>.</p>
<p>Este post foi originalmente publicado em <a href="http://sergioprado.org/esc-silicon-valley-2012-dia-2/">ESC Silicon Valley 2012 — Dia 2</a>.</p></p>]]></content:encoded>
			<wfw:commentRss>http://sergioprado.org/esc-silicon-valley-2012-dia-2/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>ESC Silicon Valley 2012 — Dia 1</title>
		<link>http://sergioprado.org/esc-silicon-valley-2012-dia-1/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=esc-silicon-valley-2012-dia-1</link>
		<comments>http://sergioprado.org/esc-silicon-valley-2012-dia-1/#comments</comments>
		<pubDate>Tue, 27 Mar 2012 05:28:15 +0000</pubDate>
		<dc:creator>Sergio Prado</dc:creator>
				<category><![CDATA[Eventos]]></category>
		<category><![CDATA[esc]]></category>
		<category><![CDATA[Linguagem C]]></category>
		<category><![CDATA[RTOS]]></category>
		<category><![CDATA[sistemas embarcados]]></category>

		<guid isPermaLink="false">http://sergioprado.org/?p=2560</guid>
		<description><![CDATA[<p>O primeiro dia no ESC Silicon Valley 2012.</p><p><p>Sergio Prado atua com desenvolvimento de software para sistemas embarcados há mais de 15 anos. É sócio-fundador da Embed­ded Lab­works, uma empresa focada em te aju­dar a desen­volver soft­ware de qual­i­dade para sis­temas embar­ca­dos. Se você pre­cisa de ajuda para desen­volver seu pro­duto, ou quer saber mais sobre o que a Embed­ded Lab­works pode fazer por você, acesse <a href=”http://e-labworks.com/servicos/”> http://e-labworks.com/servicos</a>.</p>
<p>Este post foi originalmente publicado em <a href="http://sergioprado.org/esc-silicon-valley-2012-dia-1/">ESC Silicon Valley 2012 — Dia 1</a>.</p></p>
Posts relacionados:<ol>
<li><a href='http://sergioprado.org/creative-commons-e-esc-2012/' rel='bookmark' title='Creative Commons e ESC 2012'>Creative Commons e ESC 2012</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic -->
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">O primeiro dia do evento foi bem tranquilo. Na verdade, a própria cidade de San Jose é bem tranquila. Talvez seja o frio!</span></p>
<p style="text-align: center;"><span style="font-family: verdana, geneva; font-size: 14px;"><img class="aligncenter size-full wp-image-2562" title="esc2012" src="http://sergioprado.org/wp-content/uploads/2012/03/esc2012.jpg" alt="esc2012 ESC Silicon Valley 2012   Dia 1" width="550" height="413" /><strong>Uma multidão e muito tumulto às 08:00</strong></span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Mas lá dentro do centro de convenções as coisas estavam bem quentes. Enquanto as empresas preparavam seus quiosques para a exposição que só começa amanhã, o dia foi recheado de mini-cursos.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">E o problema era exatamente escolher qual mini-curso participar. Eram oito na parte da manhã, sete na parte da tarde, mais dois o dia inteiro. Na parte da manhã, participei do Hands-on do uCOS-III com o Matt Gordon da Micrium, com o tema “<em>Fundamentals of Real-Time Kernels</em>”. Na parte da tarde, assisti à ótima apresentação de Dan Saks com o tema “<em>The Most Misunderstood Features of C</em>”.</span></p>
<p style="text-align: justify;"><strong><span style="font-family: verdana, geneva; font-size: 14px;">UCOS-III</span></strong></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">A seção começou com pouca gente, talvez por causa do horário (começou pontualmente às 08:00). Logo de cara a infraestrutura me chamou a atenção. Como o mini-curso era no formato de hands-on, tinhamos cerca de 60 laptops, cada um com um kit bem legal da Renesas, que ao fim pudemos levar para casa.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva;"><span style="font-size: 14px;"><img class="aligncenter size-full wp-image-2563" title="kit" src="http://sergioprado.org/wp-content/uploads/2012/03/kit.jpg" alt="kit ESC Silicon Valley 2012   Dia 1" width="550" height="413" /></span></span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">O treinamento foi aplicado pelo Matt Gordon (quem foi no último ESC Brasil deve se lembrar dele), e estava dividido entre teoria e quatro ativida</span><span style="font-family: verdana, geneva;"><span style="font-family: verdana, geneva;"><span style="font-size: 14px;">des práticas:</span></span></span></p>
<ol>
	<li style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Usando o nova IDE da Renesas E2Studio (baseado em Eclipse).</span></li>
	<li style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Criando e executando tarefas.</span></li>
	<li style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Trabalhando com interrupções.</span></li>
	<li style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Mecanismos de sincronização.</span></li>
</ol>
<p style="text-align: justify;"><span style="font-family: verdana, geneva;"><span style="font-size: 14px;"><img class="aligncenter size-full wp-image-2564" title="task" src="http://sergioprado.org/wp-content/uploads/2012/03/task.jpg" alt="task ESC Silicon Valley 2012   Dia 1" width="550" height="413" /></span></span></p>
<p style="text-align: center;"><strong>Labworks em tempo real!</strong></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Foram 4 horas muito bem aproveitadas, com exercícios bastante didáticos, principalmente para quem esta começando ou pretende começar a trabalhar com RTOSs.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">No final da apresentação conversei com o Matt, e ele me disse que tem a intenção de trazer este mesmo mini-curso para o ESC Brasil. Vamos torçer!</span></p>
<p style="text-align: justify;"><strong><span style="font-family: verdana, geneva; font-size: 14px;">C NA VEIA</span></strong></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">A palestra do Dan foi fantástica. Saí de lá querendo escrever meu próprio compilador! :)</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">O tema, numa tradução livre, foi “<em>As funcionalidades mais obscuras da linguagem C</em>”. Ele expôs com propriedade diversos conceitos da linguagem, mas num formato claro e direto. Definição e declaração de funções, passagens de parâmetros, qualificadores de tipo, declarações abstratas, strings, ponteiros e arrays, escopo, linkage e storage location, etc.</span></p>
<p style="text-align: justify;"><img class="aligncenter size-full wp-image-2571" title="dan" src="http://sergioprado.org/wp-content/uploads/2012/03/dan.jpg" alt="dan ESC Silicon Valley 2012   Dia 1" width="550" height="413" /></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Se você acha que conhece tudo de C ou C++, devia assistir à uma palestra do Dan e rever seus conceitos! Eu o fiz! :) </span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">E com certeza o aprendizado que obtive nesta palestra irá gerar alguns artigos bem interessantes por aqui.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Hora de descansar. Amanhã tem mais!</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Um abraço,</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Sergio Prado</span></p>
<div id="-chrome-auto-translate-plugin-dialog" style="opacity: 1 !important; background-image: initial !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: transparent !important; position: absolute !important; top: 0px; left: 0px; overflow-x: visible !important; overflow-y: visible !important; z-index: 999999 !important; text-align: left !important; display: none; background-position: initial initial !important; background-repeat: initial initial !important; padding: 0px !important; margin: 0px !important;">
<div style="max-width: 300px !important; color: #fafafa !important; opacity: 0.8 !important; border-color: #000000 !important; border-width: 0px !important; -webkit-border-radius: 10px !important; background-color: #363636 !important; font-size: 16px !important; padding: 8px !important; overflow: visible !important; background-image: -webkit-gradient(linear, left top, right bottom, color-stop(0%, #000), color-stop(50%, #363636), color-stop(100%, #000)); z-index: 999999 !important; text-align: left  !important;"></div>
<img style="position: absolute !important; z-index: -1 !important; right: 1px !important; top: -20px !important; cursor: pointer !important; -webkit-border-radius: 20px; background-color: rgba(200, 200, 200, 0.3) !important; padding: 3px 5px 0 !important; margin: 0 !important;" onclick="document.location.href='http://translate.google.com/';" src="http://www.google.com/uds/css/small-logo.png" alt="small logo ESC Silicon Valley 2012   Dia 1"  title="ESC Silicon Valley 2012   Dia 1" /></div>
<div class="shr-publisher-2560"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic --><p>Posts relacionados:</p><ol>
<li><a href='http://sergioprado.org/creative-commons-e-esc-2012/' rel='bookmark' title='Creative Commons e ESC 2012'>Creative Commons e ESC 2012</a></li>
</ol><p><p>Sergio Prado atua com desenvolvimento de software para sistemas embarcados há mais de 15 anos. É sócio-fundador da Embed­ded Lab­works, uma empresa focada em te aju­dar a desen­volver soft­ware de qual­i­dade para sis­temas embar­ca­dos. Se você pre­cisa de ajuda para desen­volver seu pro­duto, ou quer saber mais sobre o que a Embed­ded Lab­works pode fazer por você, acesse <a href=”http://e-labworks.com/servicos/”> http://e-labworks.com/servicos</a>.</p>
<p>Este post foi originalmente publicado em <a href="http://sergioprado.org/esc-silicon-valley-2012-dia-1/">ESC Silicon Valley 2012 — Dia 1</a>.</p></p>]]></content:encoded>
			<wfw:commentRss>http://sergioprado.org/esc-silicon-valley-2012-dia-1/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Creative Commons e ESC 2012</title>
		<link>http://sergioprado.org/creative-commons-e-esc-2012/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=creative-commons-e-esc-2012</link>
		<comments>http://sergioprado.org/creative-commons-e-esc-2012/#comments</comments>
		<pubDate>Sun, 25 Mar 2012 13:06:46 +0000</pubDate>
		<dc:creator>Sergio Prado</dc:creator>
				<category><![CDATA[Eventos]]></category>
		<category><![CDATA[Notícias]]></category>
		<category><![CDATA[creative commons]]></category>
		<category><![CDATA[esc]]></category>

		<guid isPermaLink="false">http://sergioprado.org/?p=2541</guid>
		<description><![CDATA[<p>Algumas novidades sobre o blog e os eventos ESC Silicon Valley e ESC Brazil 2012.</p><p><p>Sergio Prado atua com desenvolvimento de software para sistemas embarcados há mais de 15 anos. É sócio-fundador da Embed­ded Lab­works, uma empresa focada em te aju­dar a desen­volver soft­ware de qual­i­dade para sis­temas embar­ca­dos. Se você pre­cisa de ajuda para desen­volver seu pro­duto, ou quer saber mais sobre o que a Embed­ded Lab­works pode fazer por você, acesse <a href=”http://e-labworks.com/servicos/”> http://e-labworks.com/servicos</a>.</p>
<p>Este post foi originalmente publicado em <a href="http://sergioprado.org/creative-commons-e-esc-2012/">Creative Commons e ESC 2012</a>.</p></p>
Sem posts relacionados.]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic -->
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">As últimas duas semanas foram realmente bastante agitadas para mim. Coloquei o </span><a style="font-family: verdana, geneva; font-size: 14px;" href="http://e-labworks.com/" target="_blank">site da Embedded Labworks</a><span style="font-family: verdana, geneva; font-size: 14px;"> no ar, formei a primeira turma de Linux embarcado na Mosaico e passei uma semana em Santa Rita/MG treinando a equipe da </span><a style="font-family: verdana, geneva; font-size: 14px;" href="http://www.leucotron.com.br/" target="_blank">Leucontron</a><span style="font-family: verdana, geneva; font-size: 14px;">, claro, em Linux embarcado! :)</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Enquanto continuo minha missão de disseminar o ensino de Linux e software livre em sistemas embarcados, neste post vou fazer apenas alguns anúncios. Prometo que os posts voltarão com tudo em abril!</span></p>
<p style="text-align: justify;"><strong><span style="font-family: verdana, geneva; font-size: 14px;">CREATIVE COMMONS</span></strong></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">A partir desta data todo o blog é oficialmente licenciado pelo <a href="http://creativecommons.org/licenses/by-nc-sa/3.0/" target="_blank">Creative Commons BY-NC-SA 3.0</a>.</span></p>
<p style="text-align: center;"><span style="font-family: verdana, geneva;"><span style="font-size: 14px;"><img class="aligncenter size-full wp-image-2546" title="cc_logo" src="http://sergioprado.org/wp-content/uploads/2012/03/cc_logo.png" alt="cc logo Creative Commons e ESC 2012" width="250" height="87" /></span></span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Isso significa que você tem o direito de copiar, modificar, adaptar e distribuir as alterações que realizar nos trabalhos que publico aqui no blog.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Da mesma forma, você precisa atribuir a autoria do trabalho original, e qualquer alteração que fizer precisa ser liberada sob a mesma licença. Além disso, você não pode usar nenhum trabalho que publico aqui para fins comerciais sem minha prévia autorização.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Com isso, espero que mais pessoas continuem a usar meu trabalho para dissseminar o conhecimento em sistemas embarcados e software livre, ajudando a capacitar e motivar os profissionais e aspirantes da área.</span></p>
<p style="text-align: justify;"><strong><span style="font-family: verdana, geneva; font-size: 14px;">ESC SILICON VALLEY 2012</span></strong></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Este ano estarei no <a href="http://www.ubmdesign.com/esc/conference" target="_blank">ESC SV 2012</a>, que acontece entre os dias 26/03 e 29/03. À propósito, estou escrevendo este post no aeroporto de Houston esperando o embarque para San Jose/CA!</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Neste ano o evento chama-se <a href="http://www.ubmdesign.com/" target="_blank">Design West</a>, e trás além da convencional conferência de sistemas embarcados, os eventos Android Summit, Black Hat Summit, DesignMED, Multicore DevCon, EDN’s Designing with LEDs e Sensors in Design.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Será realmente um evento recheado de assuntos da nossa área. Pretendo publicar no blog um post por dia de evento. Portanto, não percam!</span></p>
<p style="text-align: justify;"><strong><span style="font-family: verdana, geneva; font-size: 14px;">ESC BRASIL 2012</span></strong></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">No ano passado o ESC Brasil superou as expectativas de muita gente. Para quem perdeu, escrevi um relato sobre os dois dias do evento <a href="http://sergioprado.org/2011/05/24/relato-do-esc-brasil-2011-dia-1/" target="_blank">aqui</a> e <a href="http://sergioprado.org/2011/05/25/relato-do-esc-brasil-2011-dia-2/" target="_blank">aqui</a>.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Este ano o <a href="http://www.escbrazil.com.br/" target="_blank">ESC Brasil</a> será bem maior, com mais expositores, e a possibilidade única de fazer bons networkings na área.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">A grade de palestras ainda não foi divulgada, mas posso confirmar à vocês que eu estarei lá apresentando o tema “<em>Desenvolvendo com o FreeRTOS</em>”. Vocês terão mais informações sobre o evento e sobre minha palestra em breve!</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Por enquanto é só. Hora de embarcar. Por hora, que venha o ESC Silicon Valley 2012!</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Um abraço,</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Sergio Prado</span></p>
<div class="shr-publisher-2541"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic --><p>Sem posts relacionados.</p><p><p>Sergio Prado atua com desenvolvimento de software para sistemas embarcados há mais de 15 anos. É sócio-fundador da Embed­ded Lab­works, uma empresa focada em te aju­dar a desen­volver soft­ware de qual­i­dade para sis­temas embar­ca­dos. Se você pre­cisa de ajuda para desen­volver seu pro­duto, ou quer saber mais sobre o que a Embed­ded Lab­works pode fazer por você, acesse <a href=”http://e-labworks.com/servicos/”> http://e-labworks.com/servicos</a>.</p>
<p>Este post foi originalmente publicado em <a href="http://sergioprado.org/creative-commons-e-esc-2012/">Creative Commons e ESC 2012</a>.</p></p>]]></content:encoded>
			<wfw:commentRss>http://sergioprado.org/creative-commons-e-esc-2012/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sistemas de arquivo em Linux embarcado — Parte 2</title>
		<link>http://sergioprado.org/sistemas-de-arquivo-em-linux-embarcado-parte-2/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=sistemas-de-arquivo-em-linux-embarcado-parte-2</link>
		<comments>http://sergioprado.org/sistemas-de-arquivo-em-linux-embarcado-parte-2/#comments</comments>
		<pubDate>Mon, 05 Mar 2012 01:38:47 +0000</pubDate>
		<dc:creator>Sergio Prado</dc:creator>
				<category><![CDATA[Linux embarcado]]></category>
		<category><![CDATA[flash]]></category>

		<guid isPermaLink="false">http://sergioprado.org/?p=2522</guid>
		<description><![CDATA[<p>Nesta segunda parte vamos estudar o sub-sistema MTD do kernel Linux e os principais sistemas de arquivo para memórias flash.</p><p><p>Sergio Prado atua com desenvolvimento de software para sistemas embarcados há mais de 15 anos. É sócio-fundador da Embed­ded Lab­works, uma empresa focada em te aju­dar a desen­volver soft­ware de qual­i­dade para sis­temas embar­ca­dos. Se você pre­cisa de ajuda para desen­volver seu pro­duto, ou quer saber mais sobre o que a Embed­ded Lab­works pode fazer por você, acesse <a href=”http://e-labworks.com/servicos/”> http://e-labworks.com/servicos</a>.</p>
<p>Este post foi originalmente publicado em <a href="http://sergioprado.org/sistemas-de-arquivo-em-linux-embarcado-parte-2/">Sistemas de arquivo em Linux embarcado — Parte 2</a>.</p></p>
Posts relacionados:<ol>
<li><a href='http://sergioprado.org/sistemas-de-arquivo-em-linux-embarcado-parte-1/' rel='bookmark' title='Sistemas de arquivo em Linux embarcado — Parte 1'>Sistemas de arquivo em Linux embarcado — Parte 1</a></li>
<li><a href='http://sergioprado.org/linux-device-drivers-parte-1/' rel='bookmark' title='Linux Device Drivers — Parte 1'>Linux Device Drivers — Parte 1</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic -->
<p style="text-align: justify;"><span style="font-family: verdana,geneva; font-size: 14px;">Na <a href="http://sergioprado.org/2012/02/22/sistemas-de-arquivo-em-linux-embarcado-parte-1/" target="_blank">parte 1</a> desta série de artigos, vimos uma intro­dução à sis­temas de arquivo em Linux embar­cado, incluindo os prin­ci­pais tipos de sis­temas de arquivo para dis­pos­i­tivo de bloco, e quando usar cada um deles, além de sis­temas de arquivo com­prim­i­dos, voláteis e via rede.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana,geneva; font-size: 14px;">Nesta segunda parte, estudaremos as memórias flash, o sub-sistema MTD do kernel, os principais sistemas de arquivo para flash, e por fim, veremos como selecionar o melhor sistema de arquivo para o seu produto com Linux embarcado.<br /></span></p>
<p style="text-align: justify;"><strong><span style="font-family: verdana,geneva; font-size: 14px;">AS MEMÓRIAS FLASH</span></strong></p>
<p style="text-align: justify;"><span style="font-family: verdana,geneva; font-size: 14px;">Algumas limitações diferem as memórias flash de dispositivos de bloco tradicionais como HDs e floppy disks.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana,geneva; font-size: 14px;">As memórias flash só podem ser apagadas em blocos. Estes blocos são chamados de <em>erase blocks</em>, e podem variar de algumas dezenas para algumas centenas de kB. Quando você apaga um bloco da flash, todos os bits assumem tipicamente o valor 1. Com um bloco apagado, você pode escrever em qualquer posição da flash. Porém, se você escrever 0 em qualquer um dos bits de qualquer posição da flash, você só consegue fazê-lo voltar para 1 apagando todo o bloco correspondente da flash! </span></p>
<p style="text-align: justify;"><span style="font-family: verdana,geneva; font-size: 14px;">Outra limitação das memórias flash é a quantidade de vezes que você pode apagar e escrever nela (program/erase cycles). Esta limitação, dependendo do modelo e do fabricante da flash, pode variar entre 100.000 e 1.000.000 ciclos. Parece muito, mas basta você deixar sua aplicação fazendo log em memória flash para transformá-la em um peso de papel! É por este motivo que existe uma funcionalidade chamada <em>wear leveling</em>, que pode ser implementada por software ou diretamente em chips controladores de flash. </span></p>
<p style="text-align: justify;"><span style="font-family: verdana,geneva; font-size: 14px;">Imagine um arquivo armazenado em determinado bloco da flash. Agora imagine que este arquivo é atualizado constantemente. Em pouco tempo, aquele bloco da flash será inutilizado. Com o “wear leveling”, este arquivo é remapeado de tempos em tempos para outros blocos da flash, melhorando a vida útil da memória flash consideravelmente.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana,geneva; font-size: 14px;">Mesmo assim, depois de certo tempo de uso da flash, um ou mais blocos serão inutilizados. Por este motivo, existe uma técnica chamada de BBM (<em>Bad Block Management</em>). Quando sai de fábrica, as memórias flash já possuem gravada nelas uma tabela de bad blocks. Toda camada de software que trabalha com memórias flash deve ser capaz de ler e identificar estes bad blocks para não utilizar regiões inválidas da flash.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana,geneva; font-size: 14px;">As memórias flash podem ainda ser divididas em dois tipos principais:</span></p>
<ul>
	<li style="text-align: justify;"><span style="font-family: verdana,geneva; font-size: 14px;">As memórias flash NOR, que possuem acesso aleatório para leitura de dados (conseguem endereçar byte a byte), velocidade alta para leitura mas lenta para escrita, baixa densidade (cada byte ocupa mais espaço), menor durabilidade e alto custo por MB. É usada principalmente para armazenar código (substituir as antigas memórias ROM).</span></li>
	<li style="text-align: justify;"><span style="font-family: verdana,geneva; font-size: 14px;">As memórias flash NAND, que possuem acesso de leitura apenas em blocos (para ler um byte precisa ler o bloco correspondente), velocidade baixa para leitura mas alta para escrita, alta densidade (cada byte ocupa menos espaço), maior durabilidade e baixo custo por MB. É usada principalmente para armazenar dados.</span></li>
</ul>
<p style="text-align: justify;"><span style="font-family: verdana,geneva; font-size: 14px;">Muito bem, vimos que as memórias flash são bem diferentes quando comparadas com os tradicionais dispositivos de bloco. É por este motivo que dentro do Linux as memórias flash são gerenciadas por um sub-sistema separado, chamado de MTD (<em>Memory Technology Devices</em>).</span></p>
<p style="text-align: justify;"><strong><span style="font-family: verdana,geneva; font-size: 14px;">O SUB-SISTEMA MTD</span></strong></p>
<p style="text-align: justify;"><span style="font-family: verdana,geneva; font-size: 14px;">O <a href="http://www.linux-mtd.infradead.org/" target="_blank">sub-sistema MTD</a> é dividido basicamente em duas camadas: </span></p>
<p style="text-align: center;"><span style="font-family: verdana,geneva; font-size: 14px;"><a href="http://sergioprado.org/wp-content/uploads/2012/03/mtd.png" target="_blank"><img class="aligncenter size-full wp-image-2523" title="mtd" src="http://sergioprado.org/wp-content/uploads/2012/03/mtd.png" alt="mtd Sistemas de arquivo em Linux embarcado   Parte 2" width="550" height="240" /></a></span></p>
<p style="text-align: justify;"><span style="font-family: verdana,geneva; font-size: 14px;">A camada de baixo (<em>MTD chip drivers</em>) conversa diretamente com o hardware, enquanto que a camada de cima (<em>MTD User modules</em>) implementa os diferentes sistemas de arquivo e mecanismos de acesso à flash.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana,geneva; font-size: 14px;">Cada memória deve ter o seu “MTD chip driver”, para possibilitar o acesso ao hardware da flash. Mas cada sistema pode usar um ou mais “MTD User modules”. Cada um deles irá tratar de forma diferentes a flash. É neste contexto que as memórias flash também são chamadas de dispositivos MTD. As partições de todos os dispositivos MTD do sistema podem ser listadas no Linux com o comando abaixo:</span></p>


<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">$ cat /proc/mtd
dev:  size     erasesize   name
mtd0: 00080000 00020000  &quot;X-Loader&quot;
mtd1: 001e0000 00020000  &quot;U-Boot&quot;
mtd2: 00020000 00020000  &quot;U-Boot Env&quot;
mtd3: 00400000 00020000  &quot;Kernel&quot;
mtd4: 0f980000 00020000  &quot;File System&quot;</pre></div></div>



<p style="text-align: justify;"><span style="font-family: verdana,geneva; font-size: 14px;">O driver <em>mtdchar</em> implementa o módulo “char device” da flash. Ele cria um dispositivo de caractere para cada dispositivo MTD no sistema, normalmente chamado de <em>/dev/mtdX</em>, onde X é o número da partição. Com este módulo, você tem acesso sequencial (byte-a-byte) em toda a flash. Além disso, ele disponibiliza comandos ioctl() para você poder manipular a flash (ler informações, apagar/gravar na flash, etc). A principal utilidade deste módulo é no gerenciamento da flash, quando usamos o pacote mtd-utils. Este pacote possui algumas ferramentas como <em>flash_eraseall</em> para apagar todo o dispositivo, <em>flashcp</em> para escrever em memórias flash NOR e <em>nandwrite</em> para escrever um memórias flash NAND. Para mais informações, visite a página do projeto em <a href="http://www.linux-mtd.infradead.org/" target="_blank">http://www.linux-mtd.infradead.org/</a>.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana,geneva; font-size: 14px;">O driver <em>mtdblock</em> implementa o módulo “block device” da flash. Ele cria um dispositivo de bloco para cada dispositivo MTD no sistema, normalmente nomeado <em>/dev/mtdblockX</em>, onde X é o número da partição. Este módulo permite acesso de leitura/escrita por bloco, como se fosse um HD mesmo, mas não gerencia bad blocks e também não trabalha com wear leveling em escritas. Ele pode ser usado para montar um sistema de arquivo read-only como o squashfs.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana, geneva; font-size: 14px;">Já se você quiser um sistema de arquivo que trabalhe com todas as limitações da flash, incluindo bad blocks e wear leveling, você vai precisar de um sistema de arquivo específico para flash.</span></p>
<p style="text-align: justify;"><strong><span style="font-family: verdana,geneva; font-size: 14px;">SISTEMAS DE ARQUIVO PARA FLASH</span></strong></p>
<p style="text-align: justify;"><span style="font-family: verdana,geneva; font-size: 14px;">O <a href="http://www.yaffs.net/" target="_blank">YAFFS2</a> é um sistema de arquivo mais antigo, e suporta basicamente memórias flash NAND. Tem um tempo de boot rápido, trabalha com wear leveling e algoritmo ECC (<em>Error Checking and Correction</em>) para garantir a confiabilidade dos dados. Sua única desvantagem é o fato de não possuir a capacidade de comprimir os dados.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana,geneva; font-size: 14px;">É por isso que aos poucos ele foi substituido pelo <a href="http://www.linux-mtd.infradead.org/doc/jffs2.html" target="_blank">JFFS2</a>, o mais usado e padrão atual. O JFFS2 possui todas as caracteristicas do YAFFS2, além de suportar memórias flash NOR e comprimir os dados em tempo de execução, economizando espaço na flash. Sua única deficiência é no tempo de boot. O JFFS2 não armazena informações da estrutura de diretórios, isso significa que para o kernel identificar a estrutura de diretórios e montar uma partição JFFS2, ele precisa varrer toda a flash. Por este motivo, o tempo de boot fica realmente lento em memórias flash muito grandes. Habilitando no kernel a opção CONFIG_JFFS2_SUMMARY reduz drasticamente este tempo de montagem.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana,geneva; font-size: 14px;">Já o <a href="http://www.linux-mtd.infradead.org/doc/ubifs.html" target="_blank">UBIFS</a> (<em>Unsorted Block Images Filesystem</em>) é um sistema de arquivo para flash mais recente. É considerado a evolução do JFFS2, e trabalha com volumes lógicos em cima de dispositivos MTD. Tem todas as vantagens do YAFFS2 e do JFFS2. Sua única desvantagem é o overhead de metadados. Ou seja, a quantidade de dados que ele precisa armazenar para controlar as partições pode ser muito grande quando trabalhamos com memórias flash com pouca capacidade de armazenamento. Mas com a capacidade das memórias flash aumentando cada vez mais, deve se tornar nos próximos anos o sistema de arquivo padrão para dispositivos MTD.</span></p>
<p style="text-align: justify;"><strong><span style="font-family: verdana,geneva; font-size: 14px;">CUIDADOS COM MEMÓRIAS FLASH</span></strong></p>
<p style="text-align: justify;"><span style="font-family: verdana,geneva; font-size: 14px;">Mesmo trabalhando com um sistema de arquivo voltado à memórias flash, você precisa tomar alguns cuidados para aumentar a vida útil do dispositivo, dentre eles:</span></p>
<ul>
	<li style="text-align: justify;"><span style="font-family: verdana,geneva; font-size: 14px;">Não use a memória flash como região de swap!</span></li>
	<li style="text-align: justify;"><span style="font-family: verdana,geneva; font-size: 14px;">Não use a memória flash para armazenamento volátil como logs e arquivos temporários (use tmpfs nestes casos).</span></li>
	<li style="text-align: justify;"><span style="font-family: verdana,geneva; font-size: 14px;">Monte seu rootfs como apenas leitura, ou use o squashfs, quando possível.</span></li>
	<li style="text-align: justify;"><span style="font-family: verdana,geneva; font-size: 14px;">Use a opção de montagem ”noatime” para evitar a escrita na flash toda vez que você ler um arquivo.</span></li>
	<li style="text-align: justify;"><span style="font-family: verdana,geneva; font-size: 14px;">Não use a opção de montagem ”sync” (com esta opção habilitada, uma atualização no sistema de arquivos atualiza imediatamente a flash).</span></li>
	<li style="text-align: justify;"><span style="font-family: verdana,geneva; font-size: 14px;">Você pode decidir se quer ou não usar um sistema de arquivo com journal. Com ele aumenta-se a quantidade de escritas, mas deixa-se o sistema mais resistente à problemas de queda de energia.</span></li>
</ul>
<p style="text-align: justify;"><strong><span style="font-family: verdana,geneva; font-size: 14px;">EMULANDO DISPOSITIVOS DE BLOCO</span></strong></p>
<p style="text-align: justify;"><span style="font-family: verdana,geneva; font-size: 14px;">Pendrives e cartões SD/MMC trabalham com memórias flash. Mas como é que o kernel os identifica e gerencia como dispositivos de bloco? Como conseguimos montar nestes dispositivos sistemas de arquivo voltados à dispositivos de bloco como o ext3?</span></p>
<p style="text-align: justify;"><span style="font-family: verdana,geneva; font-size: 14px;">Isso é possível porque estes dispositivos possuem uma controladora implementada em hardware/firmware que emula um dispositivo de bloco em cima da memória flash. Esta controladora é que faz o controle de bad blocks e wear leveling. No nível do sistema operacional, não temos nenhum controle sobre esta controladora, nem podemos acessar diretamente a memória flash. Ou seja, como não conhecemos a qualidade desta controladora, é altamente recomendável limitar o número de escritas nestes dispositivos.</span></p>
<p style="text-align: justify;"><strong><span style="font-family: verdana,geneva; font-size: 14px;">ESCOLHENDO UM SISTEMA DE ARQUIVO</span></strong></p>
<p style="text-align: justify;"><span style="font-family: verdana,geneva; font-size: 14px;">Vimos nestes dois artigos diversas soluções de sistemas de arquivo para Linux embarcado. Como escolher o melhor para sua aplicação?</span></p>
<p style="text-align: justify;"><span style="font-family: verdana,geneva; font-size: 14px;">O diagrama abaixo disponibilizado pelo pessoal da <a href="http://free-electrons.com/" target="_blank">Free Electrons</a> ilustra muito bem este processo de decisão, dependendo das necessidades do seu projeto:</span></p>
<p style="text-align: center;"><span style="font-family: verdana,geneva; font-size: 14px;"><a href="http://sergioprado.org/wp-content/uploads/2012/03/selecting_fs.png" target="_blank"><img class="aligncenter size-full wp-image-2525" title="selecting_fs" src="http://sergioprado.org/wp-content/uploads/2012/03/selecting_fs.png" alt="selecting fs Sistemas de arquivo em Linux embarcado   Parte 2" width="550" height="256" /></a></span></p>
<p style="text-align: justify;"><span style="font-family: verdana,geneva; font-size: 14px;">Pois é, não tem segredo! </span></p>
<p style="text-align: justify;"><span style="font-family: verdana,geneva; font-size: 14px;">Procurei expor nesta série de artigos os detalhes e as características dos principais sistemas de arquivo usados em Linux embarcado. Agora é só analisar os requisitos do seu produto e escolher o mais adequado para sua aplicação.</span></p>
<p style="text-align: justify;"><span style="font-family: verdana,geneva; font-size: 14px;">Um abraço,</span></p>
<p style="text-align: justify;"><span style="font-family: verdana,geneva; font-size: 14px;">Sergio Prado</span></p>
<div id="-chrome-auto-translate-plugin-dialog" style="opacity: 1 !important; background-image: initial !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important; background-color: transparent !important; position: absolute !important; top: 0px; left: 0px; overflow-x: visible !important; overflow-y: visible !important; z-index: 999999 !important; text-align: left !important; display: none; background-position: initial initial !important; background-repeat: initial initial !important; padding: 0px !important; margin: 0px !important;">
<div style="max-width: 300px !important; color: #fafafa !important; opacity: 0.8 !important; border-color: #000000 !important; border-width: 0px !important; -webkit-border-radius: 10px !important; background-color: #363636 !important; font-size: 16px !important; padding: 8px !important; overflow: visible !important; background-image: -webkit-gradient(linear, left top, right bottom, color-stop(0%, #000), color-stop(50%, #363636), color-stop(100%, #000)); z-index: 999999 !important; text-align: left  !important;"></div>
<img style="position: absolute !important; z-index: -1 !important; right: 1px !important; top: -20px !important; cursor: pointer !important; -webkit-border-radius: 20px; background-color: rgba(200, 200, 200, 0.3) !important; padding: 3px 5px 0 !important; margin: 0 !important;" onclick="document.location.href='http://translate.google.com/';" src="http://www.google.com/uds/css/small-logo.png" alt="small logo Sistemas de arquivo em Linux embarcado   Parte 2"  title="Sistemas de arquivo em Linux embarcado   Parte 2" /></div>
<div class="shr-publisher-2522"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic --><p>Posts relacionados:</p><ol>
<li><a href='http://sergioprado.org/sistemas-de-arquivo-em-linux-embarcado-parte-1/' rel='bookmark' title='Sistemas de arquivo em Linux embarcado — Parte 1'>Sistemas de arquivo em Linux embarcado — Parte 1</a></li>
<li><a href='http://sergioprado.org/linux-device-drivers-parte-1/' rel='bookmark' title='Linux Device Drivers — Parte 1'>Linux Device Drivers — Parte 1</a></li>
</ol><p><p>Sergio Prado atua com desenvolvimento de software para sistemas embarcados há mais de 15 anos. É sócio-fundador da Embed­ded Lab­works, uma empresa focada em te aju­dar a desen­volver soft­ware de qual­i­dade para sis­temas embar­ca­dos. Se você pre­cisa de ajuda para desen­volver seu pro­duto, ou quer saber mais sobre o que a Embed­ded Lab­works pode fazer por você, acesse <a href=”http://e-labworks.com/servicos/”> http://e-labworks.com/servicos</a>.</p>
<p>Este post foi originalmente publicado em <a href="http://sergioprado.org/sistemas-de-arquivo-em-linux-embarcado-parte-2/">Sistemas de arquivo em Linux embarcado — Parte 2</a>.</p></p>]]></content:encoded>
			<wfw:commentRss>http://sergioprado.org/sistemas-de-arquivo-em-linux-embarcado-parte-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 2.634 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2012-05-18 14:36:50 -->

