현생/임베디드

개요C언어를 사용한다는 가정하에 쓰인 글이다. 비트 연산 및 유니온과 같은 작은 데이터를 효율적으로 다룰 때 쓰이는 기본적인 테크닉을 요약하려고 쓰여졌다. 임베디드 SW에서는 보통 1바이트, 즉 8비트 안에서도 여러 정보를 담아서 보내는 경우가 많다. 예를 들어, 어느 한 비트에서 1이라면 어떤 한 모듈을 켜고, 0이라면 끄라는 명령을 보낼 수 있다. 컴퓨터는 1워드(일반적인 범용 컴퓨터에서 8비트, 임베디드에서는 4비트인 경우도 많다) 단위로 연산을 하기에 이러한 여러 명령을 한 번에 보낼 상황이 잦다. 비트 기본 연산자료형이 4bit라는 가정 하에 쓰여졌다.&두 비트가 모두 1일 때 1로 설정 1101 & 0110 => 0100|두 비트 중 하나 이상이 1일 때 1로 설정1000 | 0100 => 1..
개요Sense-Compute-Control 패턴은 임베디드 시스템에서 널리 사용되는 설계 패턴이다.시스템이 외부 환경으로부터 데이터를 수집하고, 이를 처리한 뒤 그 결과를 바탕으로 적절한 제어 동작을 수행하는 일련의 작업 흐름을 말한다. 이 패턴은 물리적인 세상과 상호작용하는 시스템을 설계할 때 주로 사용되고, 세 가지 주요 단계로 구성된다.  주요 단계Sense (감지)시스템이 외부 환경으로부터 데이터를 수집하는 단계이다. 이 단계에서는 다양한 센서를 사용해서 온도, 압력과 같은 물리적 매개변수를 측정한다. 이러한 데이터는 아날로그 또는 디지털 형태로 수집되고 시스템의 다른 모듈로 전달된다. Compute (연산)감지한 데이터를 기반으로 연산을 수행하는 단계이다. 센서로부터 수집된 데이터를 분석, 필터..
이전 글에서 이어진다. 파이프라인3단계의 파이프라인으로 구성되어 있고, 가져오기 - 디코딩 - 실행하기의 세 단계로 나뉜다.단일 사이클의 명령어 처리, 빠른 인터럽트 응답, 하드웨어적인 상태 저장 및 복원을 통해 빠르고 효율적인 명령어 실행을 보장한다.  Corstone 레퍼런스 디자인Corstone 레퍼런스 디자인은 SoC(System on Chip) 설계에 있어서 이상적인 시작점을 제공한다. 이를 통해 개발자는 위험과 비용을 최소화하며 SoC를 설계할 수 있다. 특징Arm에서 정의한 서브시스템 아키텍처의 구현 - Arm의 서브시스템 아키텍처 기반으로 하여 핵심적인 시스템 구성 요소들을 통합한다. 주요 구성 요소 통합 - 프로세서, 보안 및 시스템 IP를 통합하며 다양한 소프트웨어 / 개발 도구를 제공..
개요원본파일은 여기를 눌러서 받을 수 있다. 데이터시트는 제품의 성능, 기능, 사양, 사용 방법 등을 요약하여 설명한 기술 문서이다. ARM Cortex-M3 프로세서는 높은 성능과 저비용을 목표로 설계된 프로세서이다. MCU, 자동차 바디 시스템, 산업 제어 시스템, 무선 네트워크 및 센서 등 다양한 장치에서 사용할 수 있도록 설계되었다.  주요 특징아키텍처Armv7-M 아키텍처 기반버스 인터페이스- 3개의 AMBA AHB-Lite 인터페이스 (Harvard 버스 아키텍처)- CoreSight 디버그 컴포넌트 위한 AMBA ATB 인터페이스ISA 지원Thumb/Thumb-2 서브셋 지원파이프라인3단계의 파이프라인 구조메모리 보호8개의 영역, 서브 영역, 백그라운드 영역 포함하는 선택적 메모리 보호 유닛..
CORTEX현재 스마트폰을 포함한 거의 모든 임베디드 시스템에서 ARM사의 프로세서를 사용한다. ARM 프로세서는  RISC 아키텍처이고,  (대부분의 프로세서에서) 명령어와 내부 레지스터가 32bit로 구성된다. RISC는 CISC에 비해 명령어 구조가 간단하고 명령어 수가 적어 보다 빠르고 효율적인 처리가 가능하다. CORTEX는 ARM의 프로세서 라인업으로, A시리즈, R시리즈, M시리즈, X시리즈로 나뉜다.A시리즈는 애플리케이션, R시리즈는 RTOS, M시리즈는 MCU을 위한 라인업이며 X시리즈는 2020년에 신설된 라인업으로 스마트폰의 높아지는 성능 요구에 따라 A시리즈보다 높은 성능을 보여주는 아키텍처이다. 이 중, M 시리즈는 임베디드 계열에서 사용하고, 저전력 - 소형화가 특징이다. 이 글..
Message Queue동기화 때 사용한 세마포어와 지난 번에 다룬 이벤트 플래그는 bit 값을 바꾸고 그 bit 값에 대한 합의된 기능을 수행하는 방식이였다. 반면, 메시지 큐는 정수, 실수, 문자열 등의 여러 데이터 구조를 전송할 수 있는 IPC 기능이다.  ApplyQueueHandle_t xQueueCreate( UBaseType_t uxQueueLength, UBaseType_t uxItemSize);메시지 큐를 생성하는 함수이다. 첫 번째 인자는 큐의 항목의 개수, 두 번째 인자는 각 항목의 크기를 뜻한다. 여기서 크기는 바이트 단위이다. BaseType_t xQueueSend( QueueHandle_t xQueue, const void *pvItemToQueue, ..
Inter Process Communication여러 task 간에 소통을 하기 위해선 세마포어, 이벤트 플래그, 메시지 박스를 사용할 수 있다.이 포스팅에선 여기서 이벤트 플래그를 다루려 한다.  Event Flag Group이벤트 플래그는 비트마스킹을 통해 task로부터 이벤트를 수신한다.임의의 task에서 event flag를 set하면, 다른 task에서 get하여 특정 이벤트를 수행한다. EventGroupHandle_t xEventGroupCreate()위 함수를 통해 이벤트 플래그를 생성할 수 있다. EventBits_t xEventGroupSetBIts( EventGroupHandle_t handle, EventBits_t uxBitsToSet)위 함수를 통해 특정 비트를 설정하..
ContextContext, 문맥은 현재 실행중인 task/process의 모든 정보와 CPU의 모든 레지스터 데이터를 포함한다. task가 실행중인 어느 한 순간의 CPU 레지스터 모든 데이터가 하나의 context인 것이다. 참고로 운영체제론때 배웠던 PCB와 유사한 TCB(Task Control Block)에는 task의 정보를 구조체 리스트로 저장되어 있다.  Interrupt인터럽트란, HW가 CPU에게 비동기적으로 기능을 요청하는 신호이다. 즉, 반드시 우선순위가 제일 높은 것은 아니고 다른 task와 마찬가지로 Deadline 안에만 실행되면 된다. 다만, 인터럽트는 최대한 작은 크기로 두는 것이 좋다. 그 이유는 다음과 같다.ISR의 수행 시간이 길어지게 되면, task의 수행 시작 시간과..
푸더기
'현생/임베디드' 카테고리의 글 목록