마이크로 컨트롤러와 마이크로 프로세서의 프로그래밍 차이점은 무엇입니까?


9

그래서 나는 종종 마이크로 프로세서에 어셈블리로 프로그래밍 할 때 책 / 자습서와 참고 문헌을 본다.…

예를 들어 Atmel ATtiny2313 ....에 대한 튜토리얼을 보았습니다. 일부는 마이크로 프로세서, 일부는 마이크로 컨트롤러?

무엇 이니? 프로그래밍하는 것이 기본적으로 동일합니까? (조립 중)



1
@ Kellenjb : 프로그래밍 차이점에 대해 묻지 않았다면 가능합니다. 나는 이것이 닫히지 않을 정도로 다르다고 생각합니다.
BG100

1
@ BG100은 대답이 프로그래밍 차이가 아니라 실제로 차이를 설명했습니다.
Kortuk

답변:


14

이것은 실제로 두 가지 질문입니다 ...

첫째, 마이크로 컨트롤러와 마이크로 프로세서의 차이점은 무엇입니까?

마이크로 프로세서 는 외부 메모리 버스에서 읽은 일련의 명령을 따르는 CPU입니다. 외부 통신 버스를 통해 외부 주변 장치 (예 : 화면, 키보드, 마우스, 하드 드라이브 등)를 제어합니다. 마이크로 프로세서를 프로그래밍 할 때 프로그램은 장치 외부에 있습니다. 컴퓨터에서이 메모리는 처음에 부팅 BIOS ROM으로, 처음에는 운영 체제를 하드 드라이브에서 RAM 메모리로 읽은 다음 거기서 계속 실행합니다.

마이크로 컨트롤러 는 올인원 CPU + 메모리와 비슷하며 외부 포트와 통신하기위한 외부 포트가 있습니다. 자체 포함되어 있으며 외부 메모리를 사용하여 프로그램을 보유하지 않습니다 (필요한 경우 작업 데이터를 읽고 외부 메모리에 쓸 수는 있지만).

둘째, 마이크로 컨트롤러와 마이크로 프로세서 프로그래밍이 동일합니까?

어떤면에서는 그렇습니다. 어떤면에서는 그렇습니다.

어셈블리 언어는 CPU가 직접 이해할 수있는 일련의 명령어를 설명하는 광범위한 용어입니다. 어셈블리 언어를 '컴파일'하면 실제로 컴파일되지 않으며 명령을 나타내는 바이트 시퀀스로 변환하고 일부 상대 메모리 위치에 연결합니다. 이것은 마이크로 프로세서와 마이크로 컨트롤러에 공통입니다.

그러나 다른 유형의 CPU는 다른 일련의 CPU 명령을 이해합니다. 예를 들어, pic 16F877 마이크로 컨트롤러와 함께 작동하는 어셈블리 언어 프로그램을 작성하면 마이크로 프로세서 또는 16Fxxx 제품군의 마이크로 컨트롤러 외부에있는 다른 마이크로 컨트롤러에 대해 전혀 의미가 없습니다.

따라서 어셈블리는 모든 마이크로 프로세서와 마이크로 컨트롤러에서 유사한 방식으로 작동하지만 실제로 작성하는 명령어 목록은 매우 다릅니다. 어셈블리 언어로 쓰려면 디바이스 아키텍처에 대한 깊이있는 지식이 있어야하며, 일반적으로 마이크로 컨트롤러의 경우 데이터 시트에서 얻을 수 있습니다.


글쎄, 내가 의미하는 것은 ASM이 각각마다 다를 것입니다 .....하지만 명령과 등은 일반적으로 MC와 MP 사이에서 동일하거나 동일한 방식으로 수행됩니다 ... MC에 MP가 있음을 의미합니다 그래서 나는 그렇게 생각합니다 .. (메모리 빼기)

@Sauron : 아니요, 실제로는 아닙니다. add, mov, sub 등과 같은 장치 간에는 일부 명령이 비슷할 수 있지만 명령이 다르게 구현되어 장치간에 이식되지 않습니다.
BG100

1
훌륭한 답변과 마이크로 프로세서 수업을 시작할 때 도움이되었을 것입니다.
pfyon

마이크로 컨트롤러에 CPU가 내장되어 있기 때문에 어셈블리 명령어는 주변의 구성 요소가 아닌 실제 CPU를 대상으로합니다.

@ Sauron : 네, 맞습니다.
BG100

10

차이점은 마이크로 컨트롤러에는 Flash EEPROM 및 RAM과 같은 온칩 메모리와 병렬 및 직렬 I / O와 같은 주변 장치가 포함된다는 것입니다. 첫 번째 마이크로 프로세서에서는 모두 외부 장치였습니다. I / O의 마이크로 프로세서 대신 주소와 데이터 버스가 핀으로 연결되었습니다.
어느 쪽이든 코드를 작성하는 방법은 동일합니다.

그 점을 설명하기 위해 : 매우 동일한 CPU를 마이크로 컨트롤러 (칩에 모든 코드 및 데이터 메모리가있는), 마이크로 프로세서 (모든 코드 및 데이터 메모리가 외부인) 또는 하이브리드 (일부)로 사용할 수있는 아키텍처 (예 : ARM)가 있습니다. 칩에 메모리가 있지만 대부분의 응용 프로그램의 경우 외부 메모리를 추가합니다. CPU는 동일하므로 프로그래밍 (CPU 명령의 의미에서)은 동일합니다.


오케이 더 이해가되지만 각각에 대한 ASM은 기본적으로 동일합니까?

내가 Cortex M 시리즈를 코딩하는 법을 배우면 Cortex A 시리즈도 코딩 할 수 있습니까 ??
0xakhil

기본적으로 두 질문에 모두 그렇습니다. asm 명령어는 동일합니다 (다양한 ARM 버전이 특정 명령어를 추가 할 수있는 것처럼 약간의 변형이있을 수 있음). 그러나 CPU 외부 (캐시, 인터럽트 컨트롤러, 주변 장치 등)를 사용할 때마다 큰 차이가 있습니다.
Wouter van Ooijen

8

이것이 회색 영역 인 경향이 있지만, 마이크로 컨트롤러와 마이크로 프로세서의 또 다른 공통적 인 차이점은 마이크로 컨트롤러가 종종 하버드 아키텍처 (코드와 데이터에 별도의 주소 공간)를 사용하는 반면 , 마이크로 프로세서는 거의 모두 Von Neumann 아키텍처 (코드와 데이터에 대한 조합 된 주소 공간)를 사용한다는 것입니다 .

하버드 아키텍처를 사용하는 microntroller 제품군의 예로는 AVR, Intel 8051, PIC (PIC32 제외, 아래 참조) 및 ARM Cortex-M3이 있습니다. 시차 프로펠러와 마찬가지로 Von Neumann 아키텍처를 사용하는 HCS08과 같은 프리 스케일 프로세서는 예외입니다.

이는 여러 가지 방식으로 프로그래밍에 영향을 미칩니다 (아래에 표시된 예는 C 사용).

각각 고유 한 주소 공간이있는 여러 유형의 RAM이있을 수 있습니다. 예를 들어, 8051은 외부 데이터 (xdata)를 가지고 있으며,이 둘은 동일한 칩에서 구현 되더라도 RAM의 첫 256 바이트와 별도로 주소가 지정됩니다. 따라서 변수 선언에 한정자를 사용해야합니다.unsigned int xdata foo;

상수가 코드 메모리에 선언되면 액세스하기 전에 RAM에 복사해야합니다. 또는 코드 메모리가 데이터 인 것처럼 코드 메모리에 액세스 할 수있는 방법이 필요합니다 (예 : 8051s의 코드 한정자 또는 PIC의 PSV (Program Space Visiblity) 기능).

코드와 RAM에 액세스하는 이러한 비표준 방식은 C 칩을 한 칩 제품군에서 다른 칩 제품군으로 포팅 할 때 (주변 장치와는 다른) 큰 차이가있는 경향이 있습니다.

엄격한 Harvard 아키텍처에서는 RAM에서 코드를 실행할 수 없으므로 자체 수정 코드를 사용할 수 없습니다 (즉시 재 플래시 프로그램 메모리를 계산하지 않는 한). 그러나 PIC32에는 RAM에서 코드를 실행할 수있는 수정 된 하버드 아키텍처가 있습니다. 시차 프로펠러는 실제로 하드웨어 스택이 없기 때문에 코드를 수정하여 서브 루틴 리턴을 수행하는 기능을 사용합니다.


1

마이크로 컨트롤러는 일반적으로 계산 및 주변 기능을 제공하는 단일 칩 솔루션입니다.

마이크로 프로세서는 계산 기능을 제공하지만 주변 기능은 제공하지 않습니다.

주변 기능은 몇 비트의 간단한 I / O를 갖는 것만 큼 간단 할 수 있습니다. 또는 정교한 카운터 및 타이머, 비디오 디스플레이, 이더넷, 모터 제어, 오디오 및 비디오 코덱 등을 포함 할 수 있습니다.

특정 아키텍처 (예 : x86 기반 CPU 및 MCU)의 경우 "계산"코딩이 동일합니다. 그러나 주변 장치 기능에 액세스하는 방법은 다양하므로 대상 하드웨어에서 주변 장치 기능이 구현되는 방식에 따라 수행 할 하드웨어 별 코딩이 달라집니다.


1

마이크로 프로세서는 일반적으로 아직 결정되지 않은 임의의 목적으로 프로그램을 실행하도록 구성된 컴퓨터에서 사용됩니다. 이러한 컴퓨터에는 일반적으로 사용자 제공 코드와 상호 작용할 것으로 예상되는 공급 업체 제공 코드가 있습니다. 대조적으로, 마이크로 컨트롤러는 일반적으로 단일 프로그램을 실행하기위한 목적으로 만들어진 머신에 사용됩니다. 종종 마이크로 컨트롤러 용 코드를 작성하는 사람은 기계가 실행할 모든 단일 명령을 제공합니다.

일부 마이크로 컨트롤러는 일반적인 마이크로 프로세서와 동일한 명령어 세트를 사용합니다. 개인용 컴퓨터의 원래 Macintosh, Amiga 및 Atari ST 라인에 사용 된 68000 명령어 세트는 일부 마이크로 컨트롤러에서도 사용되었습니다. 그러나 Macintosh와 68HC340 기반 제어 보드에서 사용되는 명령어 세트는 동일하지만 두 플랫폼의 프로그래밍은 매우 다른 경향이 있습니다. Macintosh에서는 사용자 제공 프로그램이 실행될 때 많은 시스템이 이미 "설정"되어 있습니다. 메모리 블록을 원하는 코드는 필요한 양의 레지스터를로드하고 "A- 트랩"명령을 실행할 수 있습니다. 그런 다음 Macintosh OS는 이전에 다른 목적으로 할당되지 않은 일부 메모리에 대한 포인터를 반환하고 해당 메모리 영역을 표시합니다. 원래 수신자가 더 이상 필요하지 않을 때까지 다시 할당하지 마십시오. 반대로, 68HC340 및 128K의 RAM이있는 보드에서는 RAM을 "요청"할 필요가 없습니다. 프로그램이 시작되면 128K를 "가져 오지만"원하는대로 사용할 수 있습니다. 다른 어떤 것도 그것을 사용하지 않지만, 반대로 사용자 프로그램은 다른 어떤 것도 그것을 추적하지 않기 때문에 어떤 목적으로 어떤 영역을 사용하고 있는지 추적해야합니다.

여기서 마이크로 컴퓨터 와 마이크로 컨트롤러 사이의 차이점이 있지만 마이크로 프로세서에 대한 문제는 마이크로 프로세서 프로그래밍에 대한 대부분의 논의에서 범용 컴퓨터와 관련하여 논의됩니다.


0

마이크로 프로세서 : 명령을 실행하는 디지털 하드웨어 모듈. 모듈은 완전한 집적 회로 일 수 있습니다.

마이크로 컨트롤러 : 다른 모듈 외에 내부 메모리가있는 마이크로 프로세서를 포함하는 완전한 모듈입니다.


EE.SE에 오신 것을 환영합니다. Mike. 단락 나누기에 <enter> x 2를 사용하십시오. 당신을 위해 고쳤습니다.
Transistor
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.