전자 엔지니어를위한 프로그래밍 언어


22

저는 전자 및 통신 공학 학생이며 대학에 진학하기 전에 프로그래밍 및 컴퓨터 응용 프로그램에 관심이있었습니다. 저는 Windows 응용 프로그램을 디자인하고 그 기술을 배우는 데 중점을 두었지만 지금은이 분야에서 쓸모가 없다고 생각합니다 ... 컴퓨터 과학 및 소프트웨어 개발에 대한 모든 것을 배울 필요는 없습니다! (나는 이것에 대해 맞습니까?)

VB .Net, C # 및 C ++을 알고 있습니다. 저는 휴일에 많은 시간을 할애하여 "전자 분야"에서 프로그래밍 방식으로 더 깊이 탐구하고 싶습니다. 그렇다면 무엇을 배우거나 집중할 것을 권장하십니까?

마이크로 컨트롤러 및 기타 집적 회로 프로그래밍에 이러한 언어를 사용하고 싶습니다. C ++로 충분합니까, 아니면 C도 마스터해야합니까? 당신의 생각을 말 해주세요.


3
"판매자"또는 더 진지하게, 현재 C는 파이썬이 약간 유행하지만 일반 C는 지원 도구에 대해 상당히 전통적입니다.
Chris Stratton

답변:


29

그렇습니다. C를 사용하는 법을 배우는 것이 거의 확실합니다. (C ++은 유용한 출발점을 제공 할 것입니다. 비록 남은 음표와 같이 , 특히 작은 임베디드 시스템의 코딩 사이의 차이점은 여전히 ​​많이 있습니다. 그것이 유비쿼터스라는 점에서 Windows와 같은 것을 쓰는 것과 비교할 때).

특정 크기 (예 : PIC, AVR, MSP430 등) 미만의 대부분의 마이크로 컨트롤러는 고품질 (무료 및 $$ 버전-예를 들어 많은 상용 컴파일러는 무료 GCC 컴파일러를 기반으로 함) C 컴파일러가 있으므로 C (또는 어셈블러)를 사용합니다. .
우수한 JAL for PIC (원본 저자 Wouter Van Ooijen), PICBASIC, Ada 변형과 같은 다른 언어를 얻을 수 있지만 인기와 컴파일러 수 때문에 C가 선택한 언어라고 말할 수 있습니다. 대부분. 이것이 확실히 최고의 언어라는 것을 의미하지는 않지만 가장 널리 사용되는 언어를 사용하면 명백한 이점 (문서, 지원, 이식성, 협업 등)
이 제공됩니다. 많은 ARM 변형과 같이 더 복잡하고 더 큰 32 비트 마이크로에는 C ++ 및 기타 컴파일러를 사용할 수 있습니다.

나는 바로 뛰어 들어 몇 개의 개발 보드를 잡고 코딩을 얻는다. PIC16F (Microchip Direct의 많은 스타터 키트)와 같은 저가형 8 비트 마이크로를 선택할 수 있습니다
. PIC24와 같은 16 비트 마이크로 범위의 중간 및 일종의 C / C ++ / 임베디드 Linux ARM-STM32F4 ARM Cortex M4 Discovery는 잡을 가치가있는 매우 저렴한 개발 보드입니다.
프로그래머블 로직 및 하드웨어 기술 언어 (HDL-큰 두 가지는 Verilog 및 VHDL) 측면에서 Diglent 또는 유사한 FPGA 또는 CPLD 개발 보드를 보유 할 가치가 있습니다.

개발 보드를 기다리지 않으려면 MPLAB 또는 MPLABX를 다운로드하고 우수한 시뮬레이터를 사용하여 PIC 개발을 시도하십시오. 예를 들어 Xilinx ISE Webpack을 무료로 다운로드하고 HDL 및 프로그래머블 로직 디자인을 시험해 볼 수 있습니다.


9
PIC는 저렴하지만 화염 전쟁을 시작할 위험이 있으므로 PIC를 학습 도구로 사용하면 범용 마이크로 컨트롤러를 프로그래밍하도록 가르치는 대신 PIC를 프로그래밍하도록 가르 칠 수 있다고 주장합니다. 이를 위해 MSP, AVR (Arduino), 로우 엔드 ARM Cortex 또는 유능한 8051 프로세서는보다 쉽게 ​​전송할 수있는 기술을 제공합니다.
uɐɪ

대단히 감사합니다 ... 이것은 매우 유용했습니다. 그러나 당신의 대답을 요약하면 : 지금 당장 필요한 것은 C ++ 및 C 마스터 링, Verilog 또는 VHDL 또는 둘 다를 배우고 시뮬레이터를 연습하거나 시작하기 위해 몇 가지 개발 보드를 얻는 것입니다.
Siraj Muhammad

1
@SirajMuhammad-그렇습니다 .Verilog와 VHDL을 배우는 것 외에는 일반적으로 디자인에 함께 사용할 수 있기 때문에 아마도 필요하지 않을 것입니다 (예를 들어 VHDL의 다른 사람이 디자인 한 소프트 코어 프로세서를 사용할 수 있음) Verilog 디자인과 잘 작동합니다.) 하나만 선택하면됩니다.
Oli Glaser

4
@Ian - 내가 제안하고 있지 않다 그것을 가지고 당신이 C로 프로그래밍하는 경우 (이하 "PIC는 같은"따라서) 어떤 경우에, 나는 많은 전체의이 생각하지 않는다 단지 예제 PIC는, 수 작은 마이크로들 사이의 차이. 물론 하나의 마이크로 인사이드 아웃 (어셈블리 및 모두)을 실제로 아는 것이 유용하지만, 더 높은 레벨에서 시작하기 위해서는 툴이 다른 것만 똑같이 보일 것입니다. 나는 커밋하기 전에 몇 가지 시도해 볼 가치가 있다고 생각합니다.
Oli Glaser

2
"이미 C ++을 알고 있다면 너무 힘들지 않아야합니까?" "VB .Net, C♯ 및 C ++"를 아는 사람은 아마도 후자를 다소 높은 수준의 객체 지향 RAII 스타일로 사용하고 매뉴얼을 제대로 이해하는 데 시간이 필요할 수도 있다는 것에 동의하지 않을 것입니다 메모리 관리.
leftaroundabout

23

C를 배우고 MSP430 또는 ARM Cortex와 같은 저렴한 마이크로 컨트롤러 개발 보드를 얻고 최소한 C 프로그램을 작성하고로드하십시오.

컴퓨터 과학 학위와 소프트웨어 개발 배경, 주로 게임용 C ++ 프로그래밍, 이제 iOS 게임 및 앱이 있지만 마지막 작업은 ARM Cortex M3 시스템 용 펌웨어 프로그래밍을 시작한 세미 프로 EE 공연이었습니다. 그런 다음 기본 회로 설계 및 보드 레이아웃을 수행하고 몇 가지 간단한 보드를 설계하는 방법을 배우게되었습니다. 그래서 기본적으로 하드웨어 / 소프트웨어 디자인을 양 끝을 담당하는 사람으로 브리징하기 위해 최고의 프로그래밍 언어를 사용하는 문제에 직면했습니다.

C는 반드시 알아야 할 언어입니다. C ++로 프로그래밍하는 사람들이 쉽게 사용할 수 있으며 실제로 "같은 것"이라고 말하는 C의 기능으로 제한 할 필요는 없지만 그렇지 않습니다. 특히 C ++이 기능을 발전시키고 수집 한 방식과 주류 C ++ 프로그래머가 이러한 기능을 사용하는 방식은 C ++ 애플리케이션과 달리 합리적으로 큰 C 애플리케이션에서 작동하는 방식과는 매우 다릅니다. 펌웨어 SDK는 많은 C 라이브러리가 될 것이며 MCU에 적합한 다른 것은 C 라이브러리가 될 것이며 MCU에 적합한 OS는 C 등으로 작성 될 것입니다.

즉, 많은 MCU 툴체인이 GCC를 컴파일러로 사용하기 때문에 괜찮은 MCU 제품군을 사용하는 경우 C ++ 컴파일러를 사용할 수 있습니다. 그러나 사용하는 기능, 특히 표준 라이브러리의 항목에 대해서는 매우 조심해야합니다. 장치에 너무 큰 바이너리를 만드는 것은 매우 쉽습니다. 임베디드 장치에서 C ++을 사용하기 위해 좋은 사례가 있다고 생각합니다 .C ++에는 크기 나 속도에 영향을 미치지 않는 몇 가지 멋진 기능이 있습니다. 현재 수행중인 작업을 알고 코드를 작성해야합니다. 영리한 기능 사용 측면에서 스펙트럼의 STL 끝보다 스펙트럼의 C 스타일 끝에서 더 나아가 야합니다.

올바른 임베디드 인터프리터가있는 MCU에서 Lua 또는 Python을 사용할 수 있다고 말하는 사람들에게는 너무주의를 기울이지 마십시오. 사실, 나는 그것을 해냈고 재미 있지만, 현재는 Hack a Day에 나오는 장난감 프로젝트와 물건에 더 가깝습니다. 무어의 법칙이 가장 작은 프로세서에도 끊임없이 적용됨에 따라 더 많은 것을 보게 될 것이라고 생각합니다. 이것은 많은 어셈블리가 있었던 게임에서 발생했으며 C와 C ++로 더 오래 지속되었습니다. 다른 모든 사람들보다 훨씬 빠르며 이제는 모든 것이 매우 빠르며 개발자 생산성이 매우 중요하므로 임베디드 고급 언어 또는 고급 언어로 많은 개발이 이루어집니다. 그럼에도 불구하고 파이썬과 루아 배경을 가진 펌웨어 프로그래머를 고용하는 회사를보기까지 몇 년이 걸릴 것입니다.

조립에 너무 많은 시간을 소비하지 마십시오. 개념에 익숙한 것은 나쁘지 않지만, 어셈블리 프로그래밍이라면 많은 일을 할 것 같지 않습니다. 게임에 대한 이러한 기존의 지혜와 마찬가지로 "알아두기"좋은 어셈블리라는 말이 있습니다. 종종 해당 분야에서 일하지 않는 사람들에 의해 반복되는 경우가 많습니다. 그러나 실제로는 어셈블리를 전혀 작성하지 않을 가능성이 거의 없으며, 그렇게하면 최적화를위한 몇 줄이거 나 API가없는 하드웨어가있는 것일 수 있습니다 (그러나 어셈블리 몇 줄을 감싼 줄을 쓴 후). 나는 여러 게임을 해왔으며 보드 / 펌웨어 디자인 프로젝트와 상업 프로젝트를 위해 작성한 총 어셈블리 수는 10 대 미만일 것이다. 그것'


1
몇 줄의 어셈블리가 인라인 어셈블리 문 ( asm())에 포함될 가능성이 있으며 C 코드에 멋지게 포함되어 있다고 말할 가치가 있습니다 . 이것은 모든면에서 승리의 조합입니다. 예를 들어 타이밍이 정확해야하는 경우 조립 수준이 급격히 낮아지는 수준이 높지만 컴팩트합니다. avr-gcc툴체인은 이미 C 매크로와 많은 수행 통지 결코 그렇게.
Alexios

9
어셈블리를 작성하는 대신 어셈블리를 읽을 수 있어야합니다. 이를 통해 컴파일러가 마이크로에게 지시하는 내용을 이해할 수 있으며 매우 드문 경우에 컴파일러에서 오류를 발견 할 수 있습니다. 또한 디버그 도구를 최대한 활용하고 제공하는 단일 단계 기능을 사용하려면 어셈블리에 대한 이해가 필요합니다.
uɐɪ

1
확실히 동의합니다. 야심 찬 프로그래머를위한 최고의 연습 중 하나는 적어도 스택 프레임의 모양과 어셈블리의 프로그래밍 언어의 기본 요소를 배우기 위해 함수, 배열 및 구조체를 처리하는 장난감 언어 컴파일러 및 코드 생성기를 작성하는 것입니다. .
Suboptimus

3
@Ian-어셈블러를 읽는 방법을 모른다면 어셈블러를 읽을 수 있다는 것은 쓸모가 없습니다. 당신은 그것을 읽고 당신이 그것을 작성했을 때 무엇을했는지 비교해야합니다.
Rocketmagnet

2
@Rocketmagnet-컴파일러가 가장 효율적인 어셈블리 구현을 생성했는지 확인하지 않았습니다. 요구 사항은 생성 된 어셈블러를 읽고 구현 된 코드의 논리가 의도와 일치하는지 확인할 수있는 능력이 있어야합니다. 이것은 다른 인간 언어를 사용하는 것과 같습니다. 나는 말하거나 쓰는 것보다 훨씬 더 많은 프랑스어, 독일어 및 라틴어를 읽고 이해할 수 있습니다.
uɐɪ

10

나는 C에서 매우 유능해야한다는 다른 모든 사람들에게 동의합니다.

또한 적어도 하나의 어셈블리 언어를 배우는 것이 좋습니다. 이렇게하면 훨씬 더 나은 C 프로그래머가 될 것입니다. 당신은 어떤 일이 벌어지고 있는지 알고 있어야하며, 이것은 PC 세계보다 임베디드 세계에서 훨씬 더 사실입니다.

C가 생성하는 어셈블러를 이해하면 속도와 소형화 측면에서 더 최적의 C를 작성할 수 있습니다. 빠른 코드 의미 :

  • 더 저렴한 MCU를 사용하여 경쟁 업체를 약화시킬 수 있습니다.
  • EMC 컴플라이언스를 향상시키기 위해 클럭 속도를 낮출 수 있습니다.
  • 저전력 애플리케이션에서 MCU는 더 많은 수면 시간을 소비하여 직접 배터리 수명을 늘릴 수 있습니다.

코드가 작을수록 메모리가 적은 저렴한 MCU를 사용할 수 있습니다. 또는 더 많은 기능을위한 공간이 있습니다.


학습을 고려할 수있는 다른 언어는 Verilog 입니다. 이 언어는 하드웨어 설명 언어이며 모양과 기능뿐만 아니라 C 와도 상당히 다릅니다. Verilog는 Cypress PSoC3 및 5와 같은 매우 강력한 칩을 활용할 수있는 길을 열 것 입니다. 아날로그 및 디지털 재 프로그래밍 가능한 하드웨어가 장착 된 마이크로 컨트롤러로 다른 MCU와는 매우 어려운 놀라운 일을 할 수 있습니다. FPGA 디자인 도 할 수 있습니다 .


"하나의 어셈블리 언어"는 무엇을 의미합니까? 어셈블리라는 언어가 있다는 것을 알고 있습니다. 제발 좀 말해 줄래? 답변 해 주셔서 감사합니다.
Siraj Muhammad

4
CPU 또는 MCU의 각 유형마다 지침이 다른 자체 어셈블리 언어가 있습니다. 그것들은 모두 상당히 비슷하지만 중요한 차이점이 있습니다. 사용중인 MCU에 대한 어셈블리 언어를 학습하십시오.
Rocketmagnet

1
정확히 이것을 말하려고했습니다. C와 어셈블리는 전자 공학에서 가장 많이 사용됩니다. 일반적으로 저수준을 다루기 때문입니다. Object Oriented는 실제로 잘 활용되지는 않으며 C / Assembly에서 오는 일종의 저수준 사고는 다른 작업에도 적용됩니다.
Muz

9

8 년 동안 국방 산업에서 일해온 MSEE로서, LabVIEW (그래픽 형식의 데이터 흐름 언어) 에서 프로그램을 잘 작성하는 방법을 이해 한다는 것은 결코 부족한 일이 없다는 것을 의미합니다.

LabVIEW는 하드웨어 엔지니어를위한 프로그래밍 언어로 시작했습니다. 코드가 회로도와 매우 유사하다는 사실을 알 수 있습니다. 그러나 지난 25 년 동안 LabVIEW는 객체 지향 및 멀티 스레딩을 지원하는 본격적인 풍부한 언어로 개발되었습니다. 사실, 텍스트 기반 또는 기타 프로그래밍 언어가 없으며 LabVIEW보다 멀티 스레드 어플리케이션을 프로그래밍하기가 더 쉽습니다. 이것은 대부분 데이터 흐름 패러다임으로 인해 발생합니다. CPU 코어 수가 계속 증가함에 따라 LabVIEW는 범용 언어로 점점 더 관련성이 높아질 것입니다.

LabVIEW를 알면 얻을 수있는 또 다른 이점은 LabVIEW FPGA 모듈 을 사용하여 FPGA를 프로그래밍 할 필요가 없다는 것입니다. LabVIEW FPGA 모듈 은 LabVIEW 코드를 가져와 Xilinx 컴파일러에 전달하기 전에 씬 뒤에서 VHDL로 변환합니다. 또한 LabVIEW 기술을 사용하여 VxWorks 또는 Phar Lap을 사용 하는 LabVIEW Real-Time Module 을 통해 프로그래밍 Real-Time 코드로 전환 할 수 있습니다 .

참고 : 저는 공인 LabVIEW 개발자입니다.

enter image description here


5
내가 본 모든 프로덕션 LabVIEW는 다음과 같습니다 : thedailywtf.com/Articles/Labview-Spaghetti.aspx 그런 코드를 기꺼이 유지하려는 사람들에게 강력한 직업 시장이 있는지 의심하지 않습니다.
markrages

@markrages 다이나믹 VI 호출과 글로벌이있을 때보 다 더 나빴던 코드를 유지 및 / 또는 확장하라는 요청을 받았습니다. 이 문제는 LabVIEW 인 양날의 검입니다. 한편으로는 모든 엔지니어가 프로그래밍 할 수있는 언어로 마케팅하지만 소프트웨어 아키텍처의 탄탄한 기반 없이는 이와 같은 코드를 얻게됩니다. 고맙게도 NI는 간단한 상태 머신부터 복잡한 OOP 기반 액터 프레임 워크에 이르기까지 아키텍처를위한 잘 작성되고 주석이 달린 템플릿을 제공함으로써 LabVIEW 2012에서이 문제를 충분히 해결했습니다.
SiegeX

@markrages 문제는 두 가지입니다. 첫째, 경영진은 엔지니어에게 위험 할 정도로 충분한 교육을 제공합니다. 저는 훈련을받은 회사에서 만난 9/10 명의 LabVIEW 프로그래머가 처음 두 가지 기본 과정 만 수강하여 기본적으로 구문을 알려줍니다. 둘째, LabVIEW는 오늘날의 모든 언어와 비교할 수있는 풍부한 기능을 갖춘 언어가되었습니다. 그래픽 관리는 그것이 쉬워야한다고 생각하기 때문입니다. Managemnt는 소프트웨어 엔지니어에게 중간에서 복잡한 회로를 설계하는 작업을 수행하지는 않지만 "LabVIEW를 알고"있으면 복잡한 소프트웨어 문제에서 EE를 발생시키는 데 아무런 문제가 없습니다.
SiegeX

@markrages : LabVIEW를 좋아하는 이유를 떠 올렸을 때, 나는 당신의 의견을보고 왜 그것을 싫어했는지 기억했습니다. 아, 좌절의 시간은 모두 한 번에 돌아 왔습니다.
Jonny B Good

6

마이크로 컨트롤러의 저수준 프로그래밍을 원한다면 어셈블리 언어 프로그래밍에 익숙해야하며 (아주 다른 아키텍처 일수록) C ++를 사용하는 것보다 C를 훨씬 더 많이 사용할 것이다.

일반적인 엔지니어링 작업의 경우 Matlab (Scilab 및 GNU Octave)과 같은 수학 중심 언어가 모델링 및 프로토 타이핑에 일반적으로 사용됩니다.

또한 소프트웨어 및 하드웨어를위한 많은 IDE는 일반적으로 TCL 또는 LUA를 사용하여 스크립팅 할 수 있으므로 일반적으로 스크립팅 언어 (Perl, Python, PHP, Javascript 등)에 어느 정도 익숙한 것이 유용합니다.

For hardware design, you're going to need Verilog and/or VHDL skills.


6

Is C++ enough? Maybe.

Please remember that C is used in something like 90-99% of all the mcu:s out there, so C is a must on your resume.

But since you are a high level guy you could start to play with the Arduino:s since they are programmed with a scaled down C++, and that would give a rough idea what C++ can do in the mcu world right now.


3

For microcontrollers (and I'll only address microcontrollers), I think C is a much better entry language than C++. Assembly would be the next step, fantastic for helping you understand how your C compiler is screwing you up, creating bugs, stealing clock ticks, etc., and squeezing the most performance out of your platform. This is all assuming you're talking about a microcontroller -- not an arduino, BASIC Stamp, or any other platform involving a wrapped-up microcontroller.

Hard to say what's useful for "your field" -- and suggest that as a student you might not really know what your field is yet!! -- but I think that your language set seems pretty reasonable and you'll find yourself using it over and over again. At the very least, having a good grip on one structured language makes the next one that much easier, but I think you'll always find your windows programming skills nice to have in your pocket.


2

You could learn C and the type of assembler code that is generated by C statements if you work with processors, but you should also teach yourself how to use a Unix command line shell such as bash and the tools that go with it such as sed, ed, awk, vim/vi, find, tar, gzip, ... as well as Python which you can use on many platforms and is a good way to "get things done".


2

You must learn C if you want to be a serious embedded developer. You should also know assembler even though you will probably very rarely use it.


0

I'll first define electronics engineer to mean someone involved in hardware design from firmware through to board design and onto chip design. In some cases you will be doing firmware, as stated above you'll need "C". Deeper down software becomes simply a tool, understanding some comp sci concepts in complementary languages from C/C++ to Lisp like languages will be more important than specifics. You will need software to support your design efforts but that doesn't take precedence to understanding the fundamental limits of what can be done in a physical implementation. Digital design is NOT Verilog/VHDL even if the design is expressed in those languages. Into full custom and in-silico design you'll see Lisp like languages and C - functional languages. Things are trending more towards Python for scripting but there is a lot of Perl/Skill/C/System C/ Verilog-A/VHDL test benches and checking software/scripts.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.