임베디드 시스템-약관

프로그램 카운터

프로그램 카운터는 실행할 다음 명령어의 주소를 포함하는 16 비트 또는 32 비트 레지스터입니다. PC는 명령을 가져올 때마다 다음 순차 메모리 위치로 자동 증가합니다. 분기, 점프 및 인터럽트 작업은 다음 순차 위치가 아닌 주소로 프로그램 카운터를로드합니다.

파워 온 리셋을 활성화하면 레지스터의 모든 값이 손실됩니다. 이는 리셋시 PC (프로그램 카운터)의 값이 0이라는 것을 의미하며, CPU가 ROM 메모리 위치 0000에서 첫 번째 opcode를 가져 오도록합니다. 즉, ROM 위치 0000에 업 코드의 첫 번째 바이트를 배치해야합니다. CPU는 첫 번째 명령을 찾을 것으로 예상합니다.

벡터 재설정

리셋 벡터의 중요성은 프로세서가 펌웨어의 첫 번째 명령어를 포함하는 메모리 주소를 가리 킵니다. 리셋 벡터가 없으면 프로세서는 어디에서 실행을 시작할지 알 수 없습니다. 리셋시 프로세서는 미리 정의 된 메모리 위치에서 리셋 벡터 값과 함께 프로그램 카운터 (PC)를로드합니다. CPU08 아키텍처에서는 $ FFFE : $ FFFF 위치에 있습니다.

재설정 벡터가 필요하지 않은 경우 개발자는 일반적으로이를 당연한 것으로 받아들이고 최종 이미지로 프로그래밍하지 않습니다. 결과적으로 프로세서는 최종 제품에서 시작되지 않습니다. 디버그 단계에서 발생하는 일반적인 실수입니다.

스택 포인터

스택은 RAM에서 구현되고 CPU 레지스터는 SP (Stack Pointer) 레지스터라고하는 액세스에 사용됩니다. SP 레지스터는 8 비트 레지스터이며 00h ~ FFh 범위의 메모리 주소를 지정할 수 있습니다. 처음에 SP 레지스터는 8051에서 스택에 사용되는 첫 번째 위치로 위치 08을 가리키는 값 07을 포함합니다.

CPU 레지스터의 내용이 스택에 저장 될 때이를 PUSH 연산이라고합니다. 스택의 내용이 CPU 레지스터에 저장되는 것을 POP 연산이라고합니다. 즉, 레지스터를 스택에 푸시하여 저장하고 스택에서 팝하여 검색합니다.

무한 루프

무한 루프 또는 무한 루프는 다음과 같은 이유로 루프에서 끝없이 실행되는 컴퓨터 프로그램의 명령 시퀀스로 식별 될 수 있습니다.

  • 종료 조건이없는 루프.
  • 충족 될 수없는 종료 조건이있는 루프.
  • 루프가 다시 시작되도록하는 종료 조건이있는 루프.

이러한 무한 루프는 일반적으로 무한 루프가 사용 가능한 모든 프로세서 시간을 소비하므로 이전 운영 체제가 응답하지 않게되었습니다. 사용자 입력을 기다리는 I / O 작업을 "무한 루프"라고도합니다. 컴퓨터 "멈춤"의 한 가지 가능한 원인은 무한 루프입니다. 다른 원인은 다음과 같습니다.deadlockaccess violations.

PC와 달리 임베디드 시스템은 응용 프로그램을 "종료"하지 않습니다. 이벤트가 인터럽트 형태로 발생하기를 기다리는 무한 루프를 통해 유휴 상태이거나pre-scheduled task. 전력을 절약하기 위해 일부 프로세서는 특별sleep 또는 wait modes 무한 루프를 통해 유휴하는 대신 타이머 또는 외부 인터럽트시이 모드에서 나옵니다.

인터럽트

인터럽트는 대부분 이벤트가 발생했음을 프로그램에 지시하는 하드웨어 메커니즘입니다. 이는 언제든지 발생할 수 있으므로 프로그램 흐름과 비동기 적입니다. 프로세서의 특수 처리가 필요하며 궁극적으로 해당 ISR (Interrupt Service Routine)에 의해 처리됩니다. 인터럽트는 신속하게 처리해야합니다. 인터럽트를 처리하는 데 너무 많은 시간이 걸리면 다른 인터럽트를 놓칠 수 있습니다.

리틀 엔디안 대 빅 엔디안

숫자는 항상 같은 방식으로 표시되지만 메모리에 같은 방식으로 저장되지는 ​​않습니다. Big-Endian 머신은 가장 낮은 메모리 주소에 가장 중요한 데이터 바이트를 저장합니다. Big-Endian 기계는 0x12345678을 다음과 같이 저장합니다.

ADD+0: 0x12 
ADD+1: 0x34 
ADD+2: 0x56 
ADD+3: 0x78

반면에 Little-Endian 시스템은 최하위 메모리 주소에 최하위 데이터 바이트를 저장합니다. Little-Endian 기계는 0x12345678을 다음과 같이 저장합니다.

ADD+0: 0x78 
ADD+1: 0x56 
ADD+2: 0x34 
ADD+3: 0x12