2009-12-21 5 views
13

저는 마이크로 컨트롤러 프로그래밍을 시작하고 대조되는 의견을 듣고 있습니다. 마이크로 컨트롤러 프로그래밍을 위해 업계에서 가장 많이 사용되는 언어는 무엇입니까? 이것은 당신이 당신 자신의 일에서 사용하는 것입니까? 그렇지 않다면 왜 안 되겠습니까?마이크로 컨트롤러 프로그래밍을 위해 배울 언어는 무엇입니까?

추신 : 답변은 어셈블리 언어가 아니길 바래요.

+8

Assemb ... – Pierreten

+0

는 글쎄요, 말하기 어렵습니다 ... .. 마이크로 컨트롤러는 상대적으로 낮은 수준의 장치가 있다는보고를 기다립니다 일반적으로 비 휴대용 명령어 세트를 가지고있다. 어떤 가족에 들어갔습니까? – futureelite7

+3

나는 브래디라는 이름의 가족을 얻으려고했지만 그때는 잠깐이었다. ;-) –

답변

37

내 경험상 C를 꼭 알아야하며 어셈블리 언어도 도움이됩니다.

+0

질문에 대한 짧은 짧은 직접 대답 (광산이 아닙니다!). – Clifford

+0

C가 어셈블러로 어떻게 변환되는지, 그리고 관련된 모든 플랫폼의 취향 (예. 당신은 PIC에 대한 포인터 - 구조 코드를 작성할 수 있지만, 그것은 빨 것이다. assember를 읽을 수 있으면 디버깅에 도움이됩니다. 드물게 어셈블러에서 작성해야하며, C는 충분한 원시 액세스를 제공합니다. – pjc50

2

당신은 어셈블리 언어 프로그래밍을 알아야합니다. C와 C++에 대해서도 잘 알고 있어야합니다. 마이크로 컨트롤러 프로그래밍을보다 잘 전문화하기 위해 열심히 노력하십시오.

+1

임베디드 시스템 개발자로서 20 년 동안 나는 8051 년부터 완전한 어셈블러 명령어 세트를 배웠다. 어셈블리 언어가 무엇인지 알아야 할 때도 있고 때로는 명령어 세트 매뉴얼을 읽고 이해할 수 있어야 할 수도 있지만 C- 런타임 시작 코드를 처음부터 작성하지 않는 한이 요구 사항을 강조하지는 않을 것입니다 (그리고 기존 예제는 사용할 수없는 경우가 많습니다). – Clifford

+0

어셈블리가 더 이상 많은 마이크로 컨트롤러의 요구 사항이 아닙니다. 많은 공학 학사 과정은 미래가 결여 된 과정을 포기합니다. C와 C++는 줄곧 있습니다. – Mast

10

C 및 C++를 성공적으로 사용했지만 거의 모든 마이크로 컨트롤러 프로젝트에서 대상 마이크로 어셈블리 언어에 대해 잘 알고 있어야합니다. 저수준 하드웨어 문제를 디버깅하는 경우에만 어셈블리가 필수적 일 것입니다.

데스크탑 환경에서 마이크로로 이동할 때 가장 어려운 점은 거의 모든 것을 정적으로 할당해야한다는 것입니다. 어쩌면 외부 RAM이없는 한 자주 마이크로에서 malloc/new를 사용하지 않을 것입니다.

또한 질문을 FPGA 및 Verilog로 태그 지정하고 Altium을 살펴본 결과 C++ 하드웨어 컴파일러가 통합 환경에서 잘 작동한다는 것을 알게되었습니다.

2

그리고 VHDL을 잊지 마세요.

+2

마이크로 컨트롤러 용으로는별로 없습니다. –

+2

그는 – rzrgenesys187

12

(RS08 시리즈와 같이) 매우 기본적인 마이크로 컨트롤러를 다루지 않는다면 C 언어가 선택의 대상입니다. C를 익히고 휘발성 및 const와 같은 기능을 이해하십시오. 또한 효율적인 아키텍처, 그렇지 않은 아키텍처, CPU가 할 수있는 아키텍처 등을 이해하십시오. 이들은 "데스크탑"환경과 크게 다를 것입니다. stdint.h를 사랑하게됩니다.

프로젝트의 확장에 따라 C++ (또는 제한된 하위 집합)가 발생합니다.

그러나 CPU와 기본 어셈블리를 디버깅 도구로 읽는 방법을 이해해야합니다. 이 스킬 셋 없이는 훌륭한 임베디드 개발자가 될 수 없습니다. 어셈블러에 관한

+0

stdint.h가 좋긴하지만 fpga 태그를 가지고 있습니다. 특히 PC에서 코드를 테스트하는 데 적합합니다. –

9

:

  • 는 가능한 한 많은 어셈블러를 통해 C/C++를 선호합니다. C 또는 C++에서 가능한 한 많이 작성하여 생산성을 높일 수 있습니다. 여기에는 PC에서 코드를 실행할 수있는 기능이 포함되어있어 상위 수준 코드 (응용 프로그램 계층 기능)를 개발하는 데 도움이 될 수 있습니다.
  • 많은 임베디드 플랫폼에서 작은 어셈블러에 익숙한 사람이 프로젝트에 참여하는 것이 좋습니다. 대체로 시작 코드와 인터럽트가 잘 처리되고, 아마도 인터럽트 활성화/비활성화 기능이 있습니다. 그것은 정말 철저히 알고있는 것과 같지 않습니다. 단지 기초 지식만으로 충분할 것입니다.
  • RTOS (예 : µC/OS-II)을 새 플랫폼에 이식하는 경우 어셈블러에 대해 더 알고 있어야합니다. 그러나 이미 RTOS가 이미 플랫폼을 지원하고 있기를 바랍니다.
  • CPU 성능 한계에 맞서려한다면 어셈블러에 대해 더 자세히 알아야 할 것입니다. 그러나 성능 한계를 많이 넘기지는 않을 것입니다. 프로젝트의 실행 가능성에 영향을 미칠 수 있기 때문입니다.
  • DSP을 쓰려면 DSP 어셈블러를 상당히 철저히 알아야 할 것입니다.
+5

어셈블리로 작성하기 전에 C 또는 C++로 함수를 작성하십시오. 그런 다음 컴파일러에서 해당 함수의 어셈블리 목록을 생성하도록합니다. 컴파일러는 당신을 위해 대부분의 작업을 수행했습니다. 필요에 따라 뒤틀린 다. –

3

마이크로 컨트롤러는 원래 어셈블리 언어로만 프로그래밍되었지만 이제는 다양한 고급 프로그래밍 언어가 타겟 마이크로 컨트롤러에도 일반적으로 사용됩니다. 이러한 언어는 특수 목적으로 설계되었거나 C 프로그래밍 언어와 같은 범용 언어 버전입니다. 범용 언어 용 컴파일러에는 일반적으로 마이크로 컨트롤러의 고유 한 특성을보다 잘 지원하기위한 몇 가지 제한 사항과 개선 사항이 있습니다. 일부 마이크로 컨트롤러는 특정 유형의 응용 프로그램을 개발할 수있는 환경을 갖추고 있습니다. 마이크로 컨트롤러 공급 업체는 하드웨어를 쉽게 채택 할 수 있도록 도구를 자유롭게 사용할 수 있습니다.

많은 마이크로 컨트롤러가 너무 복잡하여 코드 라이브러리 나 정적 분석 도구와 같은 표준 도구 (하드웨어와 관련이없는 코드)를 사용하지 못하도록하는 8051 용 SDCC와 같이 자체적 인 비표준 C 방언이 필요합니다. 풍모. 통역사는 종종 그러한 낮은 수준의 단점을 숨기기 위해 사용됩니다.

일부 마이크로 컨트롤러에 대해서도 인터프리터 펌웨어를 사용할 수 있습니다. 예를 들어, 초기 마이크로 컨트롤러 인 Intel 8052 [4]의 BASIC; BASIC 및 FORTH는 Zilog Z8 [5]뿐 아니라 일부 최신 장치에서도 사용할 수 있습니다. 일반적으로 이러한 인터프리터는 대화 형 프로그래밍을 지원합니다.

시뮬레이터는 마이크로 칩의 MPLAB 환경과 같은 일부 마이크로 컨트롤러에서 사용할 수 있습니다. 이를 통해 개발자는 실제 부품을 사용하는 경우 마이크로 컨트롤러 및 해당 프로그램의 동작을 분석 할 수 있습니다. 시뮬레이터는 내부 프로세서 상태와 출력의 시뮬레이터 상태를 표시 할뿐만 아니라 입력 신호가 생성되도록합니다. 한편으로는 대부분의 시뮬레이터가 시스템의 다른 많은 하드웨어를 시뮬 레이팅 할 수 없다는 제한을받는 반면 물리적 구현에서 임의로 재생산하기 어려운 조건을 사용할 수 있으며 디버깅 및 분석을위한 가장 빠른 방법이 될 수 있습니다 문제.

11

'대조적 인'의견을 들었습니까? 어느 정도 그것은 마이크로 컨트롤러와 어플리케이션에 달려 있습니다. 그러나 C는 거의 모든 아키텍처에서 사용할 수 있습니다 (나는 모두라고 말하기를 망설이지 만, 아마도 당신이 만날 수있는 모든 것). 그래서 그 점을 혼자서 배우면 C가 당신에게 가장 큰 보상을 줄 것입니다.

모든 아키텍처에 대해 어셈블러와 C 컴파일러의 가용성은 거의 제공됩니다. 32 비트 및 대부분의 16 비트 아키텍처의 경우 C++도 사용할 수 있습니다. 주목할만한 예외는 마이크로 칩의 PIC24/dsPIC 부품으로 마이크로 칩 자체의 GNU 기반 컴파일러가 C++를 지원하지 않는다는 것입니다 (써드 파티 컴파일러가 그렇게 할지라도).

8 비트 마이크로 컨트롤러의 C++ 컴파일러는 이러한 플랫폼에서 유비쿼터스가 아니며 종종 컴파일러는 전체 언어의 하위 집합입니다. 8 비트가 일반적으로 사용되는 응용 프로그램의 유형 (또는 더 구체적으로 크기)에 대해 C++은 유용 할 수 있지만 훨씬 더 큰 응용 프로그램에있는 정도는 아니기 때문에 C가 일반적으로 적합합니다.

myths about C++ in embedded systems이 많이 있습니다. 언어가 C보다 크고 시스템의 성능이나 용량을 손상시킬 수있는 구조를 가지고 있지만 C++에서 사용하는 것에 대해서만 지불하면됩니다. 물론 당신이 사용하는 것이 C 부분 집합 일 뿐이라면 어떤 경우에도 C가 적합 할 것입니다.

C (및 C++)에 대한 요점은 시스템 수준 언어라는 점입니다. 추가 지원없이 마이크로 프로세서에서 실행될 수 있습니다. 프로세서 (및 외부 SDRAM)를 초기화하고, 정적 데이터를 초기화하고, 스택을 설정하고, C++ 호출 정적 생성자의 경우 매우 간단한 런타임 시작을 저장합니다.따라서 타겟 특정 어셈블러와 함께 운영 체제 및 커널을 빌드하는 데 사용됩니다. 운영 체제 나 커널 자체가 필요하지 않습니다.

내가 마이크로 컨트롤러에 의존 할 수 있다고 제안한 이유 중 하나는 예를 들어 몇 MB 크기의 외부 SDRAM이 있고 적어도 4Mb 플래시를 사용하는 ARM9 (일반적으로 외부 메모리 - 리눅스, WinCE, Symbian 또는 QNX 나 VxWorks와 같은 대형 RTOS 등 '헤비급'OS를 실행할 수 있습니다. 그렇다면 실시간 응용 프로그램 C 및 C++ (여전히 군대, 항공 전자 공학 및 일부 전송 응용 프로그램의 Ada)이 여전히 지배적 일지 모르지만 OS 선택에 따른 언어 선택이 OS의 영향을받을 것입니다.

중소 규모 응용 프로그램의 경우 수백 킬로바이트의 코드 및 데이터 공간 - .NET-Micro 플랫폼에서 실행되는 C#이 가능합니다. 그러나 저는 몇 년 전 영국의 임베디드 시스템 쇼 (Embedded Systems Show)에서 프레젠테이션을 시작했습니다. 내가 "실시간이지만" "WinCE가 필요하지 않습니다."라는 질문을 받았을 때 청중의 많은 사람들로부터 헐떡 거림과 신음 소리가 들렸습니다. 그리고 일부는 프레젠테이션을 떠나면서 시간 낭비를 멈추었습니다 그때 (나를 포함해서).

나는 아직도 당신이들은 '대조적 인'의견에 관심이있다. 가능하지만 다른 언어를 사용하기 때문에; 귀하의 질문에 대한 답 :

어떤 언어가 가장 microcontoller 프로그램의 산업에서 사용된다?

확실한 대답은 C입니다. 내가 준 이유 때문에. 이 단언에 이의를 제기 할 사람은 here are the statistics입니다 (2004 년 이후의 다른 조사 방법이 본문에서 설명됨에 유의하십시오). 그러나 대안 모음에 추가하기 위해, 나는 한 번 임베디드 시스템에서 Forth 프로그래밍을 2 년 동안 보냈다. 그리고 나는 아직도 그것을 사용하는 사람들을 알고 있지만 약간의 틈새이다.

2

마이크로 컨트롤러의 경우 어셈블러가 C 앞에옵니다. ARM이이 시장에 뛰어 들기 전에 컴파일러는 끔찍했고 메모리와 ROM은 정말 작았습니다. 코드를 이식하기에 충분한 자원이나 공통점이 없으므로 이식성을 위해 C로 작성하는 것이 타당하지 않습니다.

일부 마이크로 컨트롤러의 어셈블러는 그다지 좋지 않으며 ARM이 그 시장을 인수하고있다. 적은 비용, 적은 전력 및 적은 설치 공간으로 더 많은 리소스를 갖춘 32 비트 프로세서를 사용할 수 있습니다. 그것은 단지 의미가 있습니다. 코드가 아직 포트되지 않는 경우 많은 경우가 있지만 C로 가져올 수 있습니다.

결론, 어셈블러 및 C. BASIC이나 Java 등을 광고하는 경우 해당 회사를 블랙리스트에 표시하고 계속 진행합니다. 그곳에 있었으니 그걸 증명하고 흉터를 가져라.

0

첫 번째 어셈블리. C.

후 나는 누가 조립 및 C는 C를 알고있는 사람보다는 더 낫다 알고 있다고 생각

관련 문제