출제 배경한양대 에리카 알고리즘 대회인 HEPC 2024에서 본인이 출제한 문제이다. 본래 N이 16인 비트마스킹 DP 문제였으나, 대회의 전체적인 난이도가 너무 높다는 이유로 n만 줄여서... DFS로 풀 수 있는 문제가 되었다. 출제 이후 약 3개월이 지난 지금 실버 2에 위치해있다. 사실, 예상 난이도가 실버 4~5였는데 생각보다 높게 측정돼 있어서 또 억까 당한 느낌이다. (우주비행사 정민..) 문제 설명문제 링크 요약하자면, 단방향 그래프에서 모든 노드를 한 번씩만 방문하고 돌아오는, 그냥 외판원 순회 문제이다(아무래도 출제 배경이..) 다만 최장 시간을 구해야하고, 두 노드를 연결하는 단방향 간선이 여러 개일 수도 있으며, 모든 노드를 한 번씩만 방문하고 돌아오는 경로가 존재하지 않을 수 있..
현생
이전 글에서 이어진다. 파이프라인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의 수행 시작 시간과..
임계영역?여러 스레드가 동기화되지 않은 상태로 공유 자원에 동시에 접근한다면, 당연하게도 문제가 발생한다. atomic한 연산은 어셈블리 코드 한 줄이다. 그런데 우리가 사용하는 C언어에서 거의 모든 연산은 어셈블리 코드 한 줄로 끝나지 않는다. 단순히 a에 1을 더하는 행위도 a의 값을 메모리에서 꺼내와 레지스터에 로드하고, 1을 더하고, 다시 메모리에 저장하는 과정을 거친다. 만약 여러 스레드에서 동시에 1을 더하려고 시도한다면? A스레드에서 a를 로드한 시점에 B스레드에서도 a를 로드하고, 각자 1을 더하고 저장하면 의도 상으로는 2가 더해져 있어야 하지만 같은 값에 1을 더하고 저장한 것이므로 1이 더해져 있을 뿐일 것이다. 따라서 우리는 공유 자원에 대한 임계 영역 관리가 필요하다. FreeR..