Nas últi­mas sem­anas tenho rece­bido alguns emails de pes­soas com intenção de entrar ou se apri­morar na área de desen­volvi­mento de soft­ware para sis­temas embar­ca­dos. Isso me motivou a escr­ever este post, e pas­sar um pouco da minha exper­iên­cia sobre como se desen­volver numa área tão dinâmica como a nossa.

Primeira­mente, gostaria de ressaltar que não existe uma “receita de bolo”. O que descrevo aqui foi o que fun­cio­nou (e con­tinua fun­cio­nando) para mim. Isso não sig­nifica que vai fun­cionar para qual­quer um. Adapte-se à sua forma de tra­balho, às suas ati­tudes, ao tempo que você tem disponível, e prin­ci­pal­mente aos seus obje­tivos de carreira.

Então vamos lá. Você quer ser um profis­sional extrema­mente com­pe­tente na área de desen­volvi­mento de soft­ware para sis­temas embar­ca­dos. Então você pre­cisa se desen­volver em três esferas diferentes:

1. Con­hec­i­mento: você pre­cisa con­hecer a teo­ria envolvida em sis­temas embar­ca­dos. Isso sig­nifica hard­ware e soft­ware. É impos­sível ser um com­pe­tente desen­volve­dor de soft­ware embar­cado sem con­hecer a fundo a arquite­tura de hard­ware a qual esta trabalhando.

2. Habil­i­dade: você pre­cisa obter exper­iên­cia na área. Pre­cisa de prática. Você pode dec­o­rar todos os mnemôni­cos do assem­bler do PIC, mas de nada vai adi­antar se você não sou­ber acionar um led com este conhecimento.

3. Ati­tude: acima de tudo, você pre­cisa de ati­tudes que vão te fazer crescer nesta área. É uma área muito dinâmica, com mudanças e evoluções fre­quentes. Voce pre­cisa estar sem­pre motivado(a), ser auto-didata, gostar de apren­der, “fuçar” e enten­der como as coisas fun­cionam. Sem ati­tudes deste tipo você vai desi­s­tir logo. Porque nesta área você pre­cisa ser muito, mas muito persistente.

Mas como colo­car tudo isso em prática? Con­forme disse, não existe uma regra ou sequên­cia a ser seguida, vai depen­der muito tam­bém das opor­tu­nidades que apare­cerem para você, além da sua capaci­dade de criá-las. Mas você vai pre­cisar desen­volver seu con­hec­i­mento para então aplicá-los, e as dicas abaixo são um bom começo.

1. O que você pre­cisa apren­der de hard­ware (pelo menos)

Con­heça bem pelo menos uma arquite­tura de 8 bits. Eu come­cei com o 8051 e depois acabei apren­dendo PIC. Aprenda como fun­ciona sua arquite­tura interna, como ele geren­cia a memória e os I/Os. Faça alguns pro­gra­mas sim­ples e brinque com o Assem­bly dele. Se você não tem condições de com­prar ou mon­tar um kit de desen­volvi­mento, você pode baixar gra­tuita­mente o fer­ra­men­tas da IAR e usar o sim­u­lador inte­grado à IDE para tes­tar sua aplicação.

Saiba como inter­facear alguns dis­pos­i­tivos de I/O nor­mal­mente uti­liza­dos: switchs, leds, tecla­dos, dis­plays, inter­faces seri­ais e para­le­las, etc. Invista em você mesmo e monte ou adquira um kit de desen­volvi­mento, como os da Micro­ge­nius. Vai valer a pena.

Aprenda pelo menos uma, e se pos­sível duas, arquite­turas de 32 bits. Eu come­cei com o x86 mesmo, depois aprendi PPC, ARM e agora tra­balho mais com MIPS. São arquite­turas bem mais com­plexas, vale a pena uma leitura detal­hada no datasheet para enten­der toda sua estru­tura. Não é essen­cial con­hecer todo seu con­junto de mnemon­i­cos Assem­bly (você vai ficar louco e ser inter­nado provavel­mente se fizer isso), mas vale a pena dar uma pas­sada para con­hecer as pos­si­bil­i­dades da arquitetura.

Na maio­ria dos casos estas CPUS rodam algum SO (RTOS, Linux, Win­dows, etc), então não se pre­ocupe muito com o Assem­bly. Talvez você pre­cisa con­sul­tar o datasheet de vez em quando, mas na maio­ria das vezes você vai desen­volver em C ou C++ nes­tas CPUs.

Com um pouco de exper­iên­cia e per­sistên­cia, você vai poder avançar e começar a tra­bal­har com inter­faces mais avançadas, como USB, Eth­er­net, Blue­tooth, etc.

2. O que você pre­cisa apren­der de soft­ware (pelo menos)

Desen­volvi­mento de soft­ware em geral, e para sis­temas embar­ca­dos em especí­fico, é uma arte. E é a arte de fazer mais com menos.

Você pre­cisa de habil­i­dades para tra­bal­har com recur­sos lim­i­ta­dos. Você não tem um Duo Core de 2GHz em mãos, e sim um PIC de 4MHz. Você não tem 4G de RAM, mas ape­nas 4K bytes para sua apli­cação. O seu dis­play não á um LCD de 19″, e sim um LCD de 2x16 caracteres.

Seu código pre­cisa ser mais efi­ciente e con­fiável. Você con­fi­aria em um soft­ware que você desen­volveu rodando em um marca-passo se sua vida depen­desse deste marca-passo? É mais ou menos assim que você deve se sen­tir quando desen­volve uma apli­cação de mis­são crítica em sis­temas embarcados.

Você pre­cisa então con­hecer pelo menos Lin­guagem C e Assembly.

Assem­bly é tão voltada ao hard­ware que a men­cionei no tópico acima. Você pre­cisa ser, mais do que tudo, um “mestre” em lin­guagem C. Con­hecer todas as suas nuances. Con­hecer cada palavra-chave e saber utilizá-la. Saber quando usar const, volatile, sta­tic. Saber a difer­ença entre heap e stack. Saber desen­volver roti­nas de trata­mento de inter­rupção (ISR). Saber o que é e como desen­volver funções reen­trantes. E por aí vai.

Mas como desen­volver tudo isso? Muito estudo, leitura e prática. Eu come­cei estu­dando pelo “C Com­pleto e Total”. É um ótimo livro para começar, para con­hecer a lin­guagem, mas não é focado em sis­temas embarcados.

Os livros do Fabio Pereira tam­bém são muito bons para estu­dar deter­mi­nada arquitetura.

Foca­dos em sis­temas embar­ca­dos, dois muito bons são “Pro­gram­ming Embed­ded Sys­tems in C and C++” e “An Embed­ded Soft­ware Primer”, e gosto muito destes 2 livros do Jack Ganssle: “The Art of Design­ing Embed­ded Sys­tems” e “The Firmware Hand­book (Embed­ded Tech­nol­ogy)”.

A mel­hor forma de desen­volver novas téc­ni­cas de cod­i­fi­cação é lendo códi­gos. Então pro­cure sem­pre ler o máx­imo pos­sível de códi­gos open-source disponiveis. Eu cos­tumo anal­isar tre­chos das imple­men­tações do ker­nel do linux e de seus device dri­vers e de pacotes opensource.
 
3. Além disso, estude sis­temas operacionais
 
A par­tir de certo nivel, você terá con­tato com algum tipo de sis­tema opera­cional. E se não tiver opor­tu­nidade, crie uma.
 
A uns seis anos atrás, eu que­ria apren­der a arquite­tura de um RTOS, mas onde tra­bal­hava não exis­tia nen­huma pos­si­bil­i­dade de uti­liza­ção. Então eu pen­sei em estu­dar soz­inho. Mas eu pre­cisava de um ambi­ente, de pref­er­en­cia um kit de desen­volvi­mento para estudá-lo. Então tive a idéia de entrar em con­tato com algu­mas empre­sas com o intu­ito de por­tar um RTOS (escolhi o FreeR­TOS) para sua arquite­tura, e em troca eles me emprestariam uma placa de desen­volvi­mento para realizar o tra­balho. Eles sairiam gan­hando, pois teriam um RTOS livre por­tado para a plataforma deles, e eu sairia gan­hando com a pos­si­bil­i­dade de apren­dizado. Recebi uma resposta da NXP, que tem um escritório de R&D aqui em São Paulo, e o tra­balho com um ARM LPC2138 levou em torno de 3 meses. No fim, acabei apren­dendo bas­tante sobre ARM e RTOS, fiz alguns con­tatos com a NXP, com a IAR que forneceu o kit e com o desen­volve­dor do FreeR­TOS, o que pos­si­bil­i­tou ainda o desen­volvi­mento do meu networking.
 
Além de con­hec­i­men­tos em sis­temas de tempo real, sugiro que estude bas­tante linux, e em espe­cial linux embar­cado. Temos hoje linux rodando em dis­pos­i­tivos tão diver­sos como reló­gios, roteadores, set-top-boxes e smart­phones. Em espe­cial os smart­phones, com os sis­temas opera­cionais linux-based Android(Google), Maemo(Nokia), Moblin(Intel) e LiMo (con­sór­cio de empre­sas) brig­ando de frente com a Apple e a Microsoft e seus respec­tivos sis­temas operacionais.
 
4. Você pre­cisa de uma formação
 
Con­heço muitos hob­bystas que são extrema­mente com­pe­tentes, até mais do que alguns grad­u­a­dos, pois gostam do que fazem, são auto-didatas e muito inven­tivos. Mas con­sidero uma for­mação algo essen­cial para se desen­volver na car­reira, seja em engen­haria elétrica ou cien­cias da com­putação. Você não vai apren­der tudo em uma fac­ul­dade, na ver­dade vai apren­der ape­nas uma pequena parte. Mas você vai poder desen­volver seu net­work­ing, e um diploma, prin­ci­pal­mente em uma fac­ul­dade con­ceitu­ada, vai aju­dar a abrir muitas por­tas no mer­cado de trabalho.
 
5. Não pare, con­tinue apren­dendo e desen­vol­vendo seu networking!
 
Não pare no tempo. É bem provável que o que você apren­deu hoje não vai lhe servir no ano que vem!
 
Os sites que acesso diari­a­mente são o por­tal Embedded.com e o LinuxDevices.com, além do Por­tal Embar­ca­dos. Assino as newslet­ters de play­ers do mer­cado (NXP, Atmel, Microchip, Freescale, etc), uso o Google Reader para assi­nar blogs e ler posts de profis­sion­ais da área.
 
Uso tam­bém este blog como mecan­ismo de dis­ser­tar sobre algum tema e refres­car minha memória, o que ajuda a fixar con­ceitos e teo­rias, e me man­tém apren­dendo diari­a­mente e inter­agindo com pes­soas da área.
 
6. Lição final: compartilhe!
 
De nada adi­anta você ter capaci­dade e con­hec­i­mento em deter­mi­nada área, se você não pode com­par­til­har este con­hec­i­mento e expe­ri­en­cia, e apren­der com as expe­ri­en­cias de out­ras pessoas.
 
Foi com esta idéia que criei o grupo sis_embarcados no Yahoo, e junto com o Diego cri­amos o Por­tal Embar­ca­dos.
 
Ninguém mais sobre­vive neste mer­cado sem capaci­dade de comu­ni­cação. Por­tanto, desenvolva-a, Escreva bas­tante, leia bas­tante, e troque expe­ri­en­cias. Faça 1 + 1 ser igual a 3. Nossa comu­nidade de sis­temas embar­ca­dos agradece!
 
Um grande abraço,
 
Ser­gio Prado
VN:F [1.9.17_1161]
Rat­ing: 9.5/10 (26 votes cast)
Como se tornar um desen­volve­dor de soft­ware embar­cado, 9.5 out of 10 based on 26 ratings

Sem posts relacionados.

  • http://www.embarcados.com.br Diego

    Parabéns por mais um ótimo post Sergio.

    Suas dicas estão sendo valiosas tanto para quem está começando quanto para quem já tem exper­iên­cia e começa a ver as coisas de uma ótica diferente.

    Um forte abraço,

    *dS

    VA:F [1.9.17_1161]
    Rating: 0.0/5 (0 votes cast)
  • Rodrigo De Presbiteris

    Jão, você é o cara.

    Como não é a minha área de desen­volvi­mento, nem me arrisco a ir fundo na leitura de códi­gos téc­ni­cos, mas sobre os con­ceitos que você disse, em geral, serve tam­bém para out­ras áreas de desenvolvimento.

    Ótimo post.

    VA:F [1.9.17_1161]
    Rating: 0.0/5 (0 votes cast)
  • Vitor Bicca

    Parabéns. Parabéns pela clareza com que trans­mi­tiste as infor­mações.
    Tra­balho desde 1981 com pro­gra­mação… 8 bits, 16, 32, 64, DOS e Win­dows, e mais recen­te­mente desen­volvi pro­jeto com micro­con­tro­lador HCS08 da Freescale.
    Como sou ini­ciante no desen­volvi­mento de sis­temas embar­ca­dos, real­mente tive van­tagem sig­ni­fica­tiva por con­hecer como fun­ciona o hard­ware.
    A exper­iên­cia em ambi­entes UNIX, no meu caso EDIX, e SCO-UNIX, aju­dou bas­tante tam­bém.
    O con­hec­i­mento de “C” com­bi­nado com as décadas de desen­volvi­mento em COBOL, foi fun­da­men­tal para o sucesso do pro­jeto.
    O que me fal­tou mesmo, foi o con­hec­i­mento de eletrônica, para o pro­jeto das pla­cas.
    Boa Sorte

    VA:F [1.9.17_1161]
    Rating: 0.0/5 (0 votes cast)
  • Pingback: Como se tornar um desenvolvedor de software embarcado | Blog do Sergio Prado « Devaneios

  • http://www.blogdoje.com.br Jeron­imo

    Ser­gio, muito bom o seu post. Intu­iti­va­mente venho seguindo algu­mas das suas ori­en­tações e venho me ded­i­cando seri­amente a ser um desen­volve­dor de soft­ware embar­cado. O seu post traz mais ori­en­tações nesse cam­inho e dicas que serão inves­ti­gadas e estu­dadas com atenção. Valeu !!!
    Jeron­imo
    http://www.blogdoje.com.br
    AVR,Arduino & ARM

    VA:F [1.9.17_1161]
    Rating: 0.0/5 (0 votes cast)
  • Marcelo

    Ser­gio,

    Parabéns, impres­sio­n­ante a riqueza do con­teúdo e a clareza deste post.

    - Com seu post, tenho agora uma ori­en­tação que posso seguir, o que será de grande valia para meus estu­dos e desenvolvimento.

    - Dividi os prin­ci­pais tópi­cos do seu post, e estarei os usando para auto avali­ação, em qual área pre­ciso mel­hor; hard­ware, software…etc.

    O Livro: Pro­gram­ming Embed­ded Sys­tems in C and C++, já estava lendo e estou gostando.

    Nova­mente parabéns pelo exce­lente post!!!

    Abraços,
    Marcelo Guerra

    VA:F [1.9.17_1161]
    Rating: 0.0/5 (0 votes cast)
  • flavio

    Um link com alguns dos livros recomen­da­dos e com a doc­u­men­tação de uma TCP/IP stack muito usada em sis­temas embar­ca­dos:
    [link moderado]

    VA:F [1.9.17_1161]
    Rating: 0.0/5 (0 votes cast)
    • http://www.embarcados.com.br Ser­gio Prado

      Olá Flavio,

      Agradeço pelo comen­tário, mas infe­liz­mente não posso divul­gar seu link, já que infrige os dire­itos autorais dos livros com cópias não autor­izadas dos mesmos.

      Um abraço e con­tinue acom­pan­hando o blog.

      Ser­gio Prado

      VA:F [1.9.17_1161]
      Rating: 0.0/5 (0 votes cast)
  • Marcelo Araujo

    Flávio,

    voce não pode enviar o nome dos livros ao invés de pas­sar esse link ?

    Marcelo

    VA:F [1.9.17_1161]
    Rating: 0.0/5 (0 votes cast)
  • caio átila

    exce­lente post!

    VA:F [1.9.17_1161]
    Rating: 0.0/5 (0 votes cast)
  • Vini­cius

    Ser­gio, parabens  pelo post.
    Sou estu­dante de Engen­haria de Com­puta­cao pre­tendo focar minha car­reira em sis­tema embar­ca­dos e Redes. E eh bas­tante moti­vante ler posts (de qual­i­dade) de uma pes­soa que atua nessa area de embed­ded e com­par­tilha com a gente a sua expe­ri­en­cia.
     
    Obrigado!

    VA:F [1.9.17_1161]
    Rating: 0.0/5 (0 votes cast)
  • Ronaldo Z. Afonso

    Ser­gio,

    Exce­lente post. Adorei as dicas. Vou ten­tar praticá-las.
    Um abraço.

    VA:F [1.9.17_1161]
    Rating: 0.0/5 (0 votes cast)
  • Fabi­ano

    Parabéns pelo post Sérgio.

    Sou recém for­mado em ciên­cia da com­putação e estou entrando no mer­cado de embar­ca­dos, acred­ito que suas dicas serão de muita valia…
     
    vlw…
    abraço

    VA:F [1.9.17_1161]
    Rating: 0.0/5 (0 votes cast)
  • wev­er­ton costa

    Cara voçê é um gênio!!!!!!!!!voce tirou min­has dúvi­das de 3 anos e meio que eu estou na faculdade.eu per­gun­tava para pes­soas sobre o assunto, e todo mundo dizia que isso era besteira!! que eu ia ficar doido ‚mas é algo que eu sinto ecstasy de curiosi­dade e von­tade de aprender.eu curso sist. de infor­mação
    gostaria que voce me aju­dasse nessa missão!!!!!(apesar de já ter aju­dado e muito)
    DESDE AGRADEÇO PELO SEU POST!!!!
    ABRAÇOS!!

    VA:F [1.9.17_1161]
    Rating: 0.0/5 (0 votes cast)
  • Renato

    Msn ?

    VA:F [1.9.17_1161]
    Rating: 0.0/5 (0 votes cast)
    • http://www.sergioprado.org ser­gio­prado

      Olá Renato,

      Você pode me encon­trar no skype: sergio_prado.

      Abraços!

      VA:F [1.9.17_1161]
      Rating: 0.0/5 (0 votes cast)
  • Oswaldo

    Obri­gado Ser­gio! Ótimo post!
    Já estou virando fã ^^
    abraços.
    Tudo de bom e Feliz Natal e um próspero ano novo!

    VA:F [1.9.17_1161]
    Rating: 0.0/5 (0 votes cast)
  • allan cas­tro

    Ser­gio, fiz curso téc­nico em eletrônica com ênfase na área digital,hoje sou estu­dante de automação indus­trial e sou fasci­nado por tec­nolo­gia.
    Estava em duvi­dada de qual seria o passo seguinte na minha car­reira e você abriu minha visão com esse post.…meu amigo eu sei que estou engat­in­hando nessa área ‚pro­gramo um pouco em c e con­heço alguns PIC da familia 16,já fiz alguns pro­je­tos com eles e acho que estou no cam­inho certo, fico con­tente quando pes­soas como você pos­sam aju­dar out­ras a se desen­volverem nesse mundo de pura ded­i­cação que e a programação.

    VA:F [1.9.17_1161]
    Rating: 0.0/5 (0 votes cast)
  • fred­eri­com

    Exce­lente !

    VA:F [1.9.17_1161]
    Rating: 0.0/5 (0 votes cast)
  • Pingback: Como se tornar um desenvolvedor de Linux embarcado

  • Pingback: Sistemas embarcados, software, carreira e filosofia de vida

  • Anselmo

    Muito bom, acho que todos que pre­ten­dem entrar nessa area, dev­e­riam ler esse post. vou enviar pro meu pro­fes­sor da fac­ul­dade. assim poderar abrir os olhos daque­les que estao comecando.

    VA:F [1.9.17_1161]
    Rating: 0.0/5 (0 votes cast)
    • http://www.sergioprado.org ser­gio­prado

      Obri­gado Anselmo!

      Um abraço.

      VA:F [1.9.17_1161]
      Rating: 0.0/5 (0 votes cast)
  • http://www.ifi.unicamp.br/~mzimbres Marcelo

    Me fez lem­brar do ditado: “those who learn and do not teach are thieves”. Se todos que adquirem con­hec­i­mento tivessem a mesma ini­cia­tiva, o pro­gresso tec­no­logico andaria mais rapido.

    Seus arti­gos sao espe­cial­mente uteis para mim. Eu tra­balho ha mais de tres anos com pro­gra­macao C++ em fisica, algo bem dis­tante de embar­ca­dos. Durante todo esse peri­odo meu entu­si­asmo com embra­ca­dos, linux, desen­volvi­mento de soft­ware etc. tem crescido, e estou ten­tando apren­der o max­imo para entrar no mercado.

    VA:F [1.9.17_1161]
    Rating: 0.0/5 (0 votes cast)
    • http://www.sergioprado.org ser­gio­prado

      Olá Marcelo,

      Obri­gado pelos elo­gios! O meu obje­tivo é exata­mente esse: dis­sim­i­nar o con­hec­i­mento e moti­var out­ras pes­soas a faz­erem o mesmo.

      Um abraço!

      VA:F [1.9.17_1161]
      Rating: 0.0/5 (0 votes cast)
  • mar­cos

    Parabéns

    VA:F [1.9.17_1161]
    Rating: 0.0/5 (0 votes cast)
  • http://www.emilianoveiga.com.br Emil­iano

    Parabéns pelo post Sér­gio. Tenho tril­hado este cam­inho a pouco tempo e você é um exem­plo para os novos profis­sion­ais da área.

    VA:F [1.9.17_1161]
    Rating: 0.0/5 (0 votes cast)
    • http://www.sergioprado.org Ser­gio Prado

      Obri­gado Emiliano!

      Con­tinue acom­pan­hando o blog!

      Abraços.

      VA:F [1.9.17_1161]
      Rating: 0.0/5 (0 votes cast)
  • Anto­nio Caser

    Sér­gio;

    Qual a noção que pre­ciso ter do inglês, para apren­der essa “programática”?

    Abraços.

    VA:F [1.9.17_1161]
    Rating: 0.0/5 (0 votes cast)
    • http://www.sergioprado.org Ser­gio Prado

      Olá Anto­nio,

      No mín­imo, inglês téc­nico para leitura de doc­u­men­tos e livros.

      Um abraço.

      VA:F [1.9.17_1161]
      Rating: 0.0/5 (0 votes cast)
  • Sil­vio

     Ser­gio parabens pela matéria, bas­tante obje­tiva e ser rodeios.
    Silvio

    VA:F [1.9.17_1161]
    Rating: 0.0/5 (0 votes cast)
  • vic­torino

    sou vic­torino angolano, ser­gio esta mate­ria e a primeira para quem pre­tende entrar nesta area con­tinue que Deus con­tinue a ilu­mi­nar os teus con­hec­i­mento, porque podes fazer + do fizeste.

    Abraço

    VA:F [1.9.17_1161]
    Rating: 0.0/5 (0 votes cast)
  • Marcelo_curtys

    Muito obri­gado, seu artigo foi muito util para min, ele abriu minha mente e acred­ito que farei bom uso das infor­mações que voce apre­sen­tou, sucesso para voce e con­tinue sem­pre dtendo boas ideias como essas.

    VA:F [1.9.17_1161]
    Rating: 0.0/5 (0 votes cast)