Sou estudante de Engenharia Eletrônica e de Comunicações. Antes de entrar na faculdade, me interessei por programação e aplicativos de computador. Eu me concentrei no design de aplicativos Windows e no aprendizado de suas técnicas, mas agora sinto que isso é inútil no meu campo ... Não preciso aprender tudo sobre ciência da computação e desenvolvimento de software! (Estou certo sobre isso?)
Eu sei VB .Net, C # e C ++. Eu tenho bastante tempo nas minhas férias, então eu quero me aprofundar programaticamente no "campo da eletrônica". Então, o que você recomendaria para aprender ou focar?
Eu quero aquelas linguagens usadas na programação de microcontroladores e outros circuitos integrados. C ++ é suficiente ou devo dominar C também? Diga-me seus pensamentos, por favor.
fonte
Respostas:
Sim, é quase certamente uma boa maneira de aprender a usar o C da melhor maneira possível (o C ++ fornecerá um ponto de partida útil, embora, como observamos anteriormente , ainda haja muito o que aprender , especialmente as diferenças entre a codificação para pequenos sistemas embarcados comparado a escrever para algo como o Windows), dada a sua onipresença.
A maioria dos microcontroladores abaixo de um determinado tamanho (por exemplo, PIC, AVR, MSP430, etc) usa C (ou montador), pois existem muitas versões de alta qualidade (gratuitas e $$ - por exemplo, muitos compiladores comerciais são baseados no compilador GCC gratuito) .
Você obtém outros idiomas, como o excelente JAL para PIC (autor original Wouter Van Ooijen, que é membro aqui), PICBASIC, variantes Ada, mas devido à sua popularidade e número de compiladores disponíveis, eu diria que C é o idioma de escolha para a maioria. Embora isso certamente não signifique que é o melhor idioma, o uso do idioma mais popular traz vantagens óbvias (documentação, suporte, portabilidade, colaboração, etc.)
Para os micros de 32 bits mais complexos e maiores, como muitas variantes do ARM, também existem C ++ e outros compiladores disponíveis.
Eu pularia direto e pegaria algumas placas de desenvolvimento e obteria codificação. Você pode escolher um micro low end de 8 bits como o PIC16F (muitos kits iniciantes no Microchip Direct).
Um micro de 16 bits intermediário como o PIC24 e também um braço C / C ++ / linux incorporado de algum tipo - o STM32F4 O ARM Cortex M4 Discovery é uma placa de desenvolvimento muito barata que pode valer a pena ser agarrada.
No lado programável da linguagem de descrição de lógica e hardware (HDL - os dois grandes são Verilog e VHDL), também pode valer a pena procurar uma placa de desenvolvimento FPGA ou CPLD da Diglent ou similar.
Se você não quiser esperar por uma placa de desenvolvimento, faça o download do MPLAB ou MPLABX e use o excelente simulador para testar o desenvolvimento do PIC. O mesmo vale para outras ferramentas, por exemplo, você pode baixar o Xilinx ISE Webpack gratuitamente e experimentar HDLs e design lógico programável.
fonte
Aprenda C e obtenha uma placa de desenvolvimento de microcontrolador barata, como um MSP430 ou ARM Cortex, e pelo menos grave e carregue alguns programas em C.
Tenho um diploma em ciência da computação e um conhecimento em desenvolvimento de software, principalmente programação C ++ para jogos e agora jogos e aplicativos iOS, mas meu último trabalho foi um show semi-profissional de EE que começou com a programação de firmware de um sistema ARM Cortex M3 , e acabei aprendendo a fazer alguns projetos básicos de circuito e layout de placas, além de projetar algumas placas simples. Então, basicamente, tive que enfrentar o problema de usar a melhor linguagem de programação para conectar o design de hardware / software como alguém responsável por ambas as extremidades.
C é absolutamente o idioma que você precisa saber. É fácil para as pessoas que programam em C ++ e nunca precisam se restringir ao conjunto de recursos de C para dizer "é a mesma coisa", mas não é. Especialmente da maneira como o C ++ evoluiu e reuniu recursos, e da maneira como os programadores convencionais de C ++ usam esses recursos, é realmente muito diferente trabalhar em um aplicativo C razoavelmente grande em oposição a um aplicativo C ++. O SDK do firmware será um monte de bibliotecas C, qualquer outra coisa que caiba em uma MCU será uma biblioteca C, qualquer sistema operacional que faça sentido em uma MCU será gravado em C, etc. etc.
Dito isto, como muitas das cadeias de ferramentas do MCU por aí acabam usando o GCC como compilador, você quase certamente terá um compilador C ++ disponível se estiver usando uma família decente de MCU. Mas é preciso ter muito cuidado com os recursos que você usa, especialmente as da biblioteca padrão, pois é muito fácil acabar com um binário muito grande para caber no seu dispositivo. Eu acho que há um bom argumento a ser usado no uso do C ++ em dispositivos embarcados, o C ++ possui alguns recursos interessantes que não têm tamanho ou não têm penalidade de velocidade ou tamanho, você só precisa saber o que está fazendo e escrever um código que seja adequado mais adiante na extremidade C do estilo C do que na extremidade STL do espectro em termos de uso inteligente de recursos.
Não preste muita atenção nas pessoas que dizem que você pode usar Lua ou Python em um MCU com o intérprete incorporado certo blá, blá. É verdade, eu fiz e é divertido, mas no momento é mais para projetos de brinquedos e outras coisas que aparecem no Hack a Day. Acho que veremos mais coisas desse tipo, pois a Lei de Moore é aplicada incansavelmente até mesmo nos processadores menores, isso é algo que aconteceu com os jogos em que costumava haver muita montagem, e eles resistiram com C e C ++ por mais tempo. do que todos os outros, e agora tudo é tão rápido, e a produtividade do desenvolvedor é tão importante que muito desenvolvimento é feito com linguagens de alto nível incorporadas ou em uma linguagem de alto nível. Mesmo assim, levará alguns anos até que você veja empresas contratando programadores de firmware com experiência em Python e Lua.
Também não gaste muito tempo na montagem. Não é ruim estar familiarizado com os conceitos, mas é improvável que você se veja fazendo muito, se houver alguma programação de montagem. Existe uma sabedoria convencional com jogos incorporados que é "bom saber" montagem, muitas vezes repetida por pessoas que realmente não trabalham nessas áreas. Mas, na realidade, é muito improvável que você escreva qualquer assembly, e se o fizer, provavelmente haverá apenas algumas linhas para otimização ou algo com o hardware para o qual você não tem uma API (mas você depois de escrever um que envolva algumas linhas de montagem). Já trabalhei em vários jogos e esse projeto de design de placa / firmware e o número total de linhas de montagem que escrevi para projetos comerciais provavelmente estão na adolescência. Isto'
fonte
asm()
), bem incorporadas ao seu código C. Esta é uma combinação vencedora em todos os aspectos. Alto nível, mas compacto, com mergulhos ocasionais na montagem quando, por exemplo, o momento precisa ser o correto. Aavr-gcc
cadeia de ferramentas já faz isso muito com macros C, para que você nunca note.Concordo com todos que você precisa ser muito competente em C.
Também recomendo aprender pelo menos uma linguagem assembly. Fazer isso fará de você um programador C muito melhor. Você precisa saber o que está acontecendo sob o capô, e isso é muito mais verdadeiro no mundo incorporado do que no mundo dos PCs.
A compreensão do montador que seu C está gerando permitirá que você escreva um C mais ideal em termos de velocidade e compacidade. Código mais rápido significa:
Um código mais compacto significa que você pode usar um MCU mais barato com menos memória. Ou tenha espaço para mais recursos.
O outro idioma que você pode considerar aprender é o Verilog . Essa é uma linguagem de descrição de hardware, e realmente bem diferente de C, não apenas na aparência, mas também em sua funcionalidade. A Verilog abrirá o caminho para tirar proveito de chips muito poderosos como o Cypress PSoC3 e 5 . É um microcontrolador com hardware reprogramável analógico e digital, que permite fazer algumas coisas surpreendentes que são muito difíceis de fazer com qualquer outro MCU. Você também poderá fazer o design do FPGA .
fonte
Como um MSEE que trabalha na indústria de defesa há 8 anos, posso dizer que entender como programar bem no LabVIEW (uma linguagem gráfica, estritamente tipificada e de fluxo de dados) significa que você nunca ficará sem trabalho.
O LabVIEW começou como uma linguagem de programação para engenheiros de hardware, você pode ver isso no fato de que o código se parece muito com um diagrama de circuitos. No entanto, nos últimos 25 anos, o LabVIEW se desenvolveu em uma linguagem completa e rica em recursos, com suporte para Orientação a Objetos e multiencadeamento. De fato, eu argumentaria que não há outra linguagem de programação, baseada em texto ou de outra forma, que seja mais fácil programar uma aplicação multiencadeada do que o LabVIEW; isso ocorre em grande parte devido ao seu paradigma de fluxo de dados. À medida que o número de núcleos de CPU continuar aumentando, o LabVIEW se tornará cada vez mais relevante como uma linguagem de uso geral.
Outro benefício de conhecer o LabVIEW é que você está a poucos passos de programar FPGAs usando o módulo LabVIEW FPGA, que pega seu código LabVIEW e o converte em VHDL nos bastidores antes de passá-lo ao compilador Xilinx. Você também pode usar suas habilidades no LabVIEW para fazer a transição para a programação do código em tempo real através do LabVIEW Real-Time Module, que usa o VxWorks ou o Phar Lap.
Nota: Eu sou um desenvolvedor certificado do LabVIEW.
fonte
Se você deseja fazer uma programação de baixo nível de microcontroladores, deve se familiarizar com a programação de montagem de linguagem (quanto mais diferentes as arquiteturas, melhor) e, sim, você usará C muito mais do que C ++.
Para trabalhos gerais de engenharia, linguagens orientadas à matemática como Matlab (também Scilab e GNU Octave) serão comumente usadas para modelagem e prototipagem.
Além disso, muitos IDEs para software e hardware são programáveis, geralmente usando TCL ou LUA, portanto, alguma familiaridade com linguagens de script em geral (também Perl, Python, PHP, Javascript, etc.) seria útil.
Para o design de hardware, você precisará das habilidades de Verilog e / ou VHDL.
fonte
C ++ é suficiente? Talvez.
Lembre-se de que C é usado em algo como 90-99% de todos os mcu: s disponíveis, portanto, C é uma obrigação em seu currículo.
Mas como você é um cara de alto nível, pode começar a brincar com o Arduino: s, pois eles são programados com um C ++ reduzido e isso daria uma idéia aproximada do que o C ++ pode fazer no mundo do mcu agora.
fonte
Para microcontroladores (e abordarei apenas microcontroladores), acho que C é uma linguagem de entrada muito melhor que C ++. A montagem seria o próximo passo, fantástica para ajudar você a entender como o seu compilador C está enganando você, criando bugs, roubando tiquetaques de relógio, etc., e tirando o máximo desempenho da sua plataforma. Isso tudo pressupõe que você esteja falando de um microcontrolador - não de um arduino, do BASIC Stamp ou de qualquer outra plataforma que envolva um microcontrolador finalizado.
Difícil dizer o que é útil para "seu campo" - e sugerir que, como estudante, você talvez ainda não saiba qual é o seu campo! - mas acho que o seu conjunto de idiomas parece bastante razoável e você poderá usá-lo repetidamente. No mínimo, ter uma boa compreensão de uma linguagem estruturada torna a próxima muito mais fácil, mas acho que você sempre encontrará boas habilidades de programação do Windows em seu bolso.
fonte
Você pode aprender C e o tipo de código do assembler que é gerado pelas instruções C se trabalhar com processadores, mas também deve aprender a usar um shell de linha de comando Unix, como o bash, e as ferramentas que o acompanham, como sed, ed, awk, vim / vi, find, tar, gzip, ... assim como o Python, que você pode usar em muitas plataformas e é uma boa maneira de "fazer as coisas".
fonte
Você deve aprender C se quiser ser um desenvolvedor incorporado sério. Você também deve conhecer o assembler, embora provavelmente o use muito raramente.
fonte
Primeiro, definirei engenheiro eletrônico como alguém envolvido no projeto de hardware, do firmware ao design da placa e ao design do chip. Em alguns casos, você estará executando o firmware, conforme indicado acima, você precisará de "C". Um software mais profundo torna-se simplesmente uma ferramenta, entender alguns conceitos de ciência da computação em linguagens complementares, de C / C ++ a Lisp, como linguagens, será mais importante do que específico. Você precisará de software para apoiar seus esforços de design, mas isso não tem precedência para entender os limites fundamentais do que pode ser feito em uma implementação física. O design digital NÃO é Verilog / VHDL, mesmo que o design seja expresso nesses idiomas. No design totalmente personalizado e in-silico, você verá Lisp como idiomas e C - idiomas funcionais.
fonte