경량 프로세서 간 통신 채널은 STM32H745/755 또는 STM32H747/757 장치에 내장된 사용 가능한 주변 장치를 사용하여 구현할 수 있습니다. 예를 들어, 인터럽트 라인은 이벤트를 알리거나 데이터 가용성을 전달하는 데 사용할 수 있습니다. DMA 채널과 같은 다른 주변 장치를 사용하여 데이터를 전송하고 한쪽에서 다른 쪽으로 전송 종료 알림을 생성할 수 있습니다. 이 솔루션은 맞춤형 솔루션이며 OpenAMP 또는 FreeRTOS™ 원격 메시징 구현만큼 일반적이지 않습니다. Hardware semaphore STM32 마이크로컨트롤러에 구현된 하드웨어 세마포어 주변 장치를 사용하면 두 CPU 간에 알림 및 이벤트 교환을 구현할 수 있습니다(아래 그림 참조). HSEM 주변 장치에서 CPU..
STM32H7 시리즈 중에 Cortex-M7, Cortex-M4 Dual Core로 되어 있는 제품이 있습니다. 두개의 Core는 같은 버스를 공유하기도 하고 이에 따라 여러 자원들을 공유하게 됩니다. 하지만 이러한 이유 때문에 동시에 같은 자원을 점유하는 통일성에 문제가 생길 수도 있습니다. AN5617은 STM32H7 Dual Core의 Inter-processor communications를 다루고 있으며 이번 포스트에서는 영문 번역으로 축약해서 올려보고자 합니다. Introduction 고성능 STM32 마이크로컨트롤러와 소프트웨어 아키텍처에 대한 릴리스 제약은 보다 발전된 소프트웨어 솔루션의 가능성을 열어줍니다. 고급 소프트웨어 응용 프로그램은 독립적인 구성 요소를 동시에 실행해야 합니다..
Core Architecture Barrier 우리가 직관적으로 생각하기에는 ARM Core에서 메모리 시스템이 메모리 트랜잭션을 생성한 인스트럭션의 순서와 같은 순서로 트랜잭션이 실행될 것이라고 생각하기 쉬우나 이는 틀린 생각입니다. 메모리 트랜잭션의 순서는 하드웨어의 특성에 적응하기 위해 변경될 수 있습니다. 예를 들어, 기저 물리 메모리에 접근하기 위해 필요한 대기 상태나 마이크로코드 수준에서 구현된 추측 분기 예측 메커니즘 같은 것을 말합니다. Cortex-M 마이크로컨트롤러가 주변장치 및 시스템 구역에 걸쳐 엄격한 트랜잭션 순서를 보장하기는 하지만, 경우에 따라서는 실행 순서를 고려해 코드를 구현해야 합니다. 다음 인스트럭션을 실행하기 전에, 이전 메모리 트랜잭션이 수행됐음을 확인하기 위해 적절..
MPU setting example with STM32Cube HAL on Armv6 and Armv7 architectures 아래 표는 내부 SRAM, 플래시 메모리 및 주변 장치와 같은 메모리 영역으로 MPU를 설정하는 예를 설명합니다. 기본 메모리 맵은 권한 있는 액세스에 백그라운드 영역으로 사용되며 MPU는 HardFault 핸들러 및 NMI에 대해 활성화되지 않습니다. Internal SRAM: 8 Kbytes of internal SRAM is configured as Region0 내부 SRAM: 8KB의 내부 SRAM이 Region0으로 구성됨 Memory attributes: shareable memory, write through with no write allocate, fu..
Cortex-M33 memory types, registers and attributes MPU 작업에 대한 개념은 유사하지만 Armv8-M 아키텍처의 MPU는 이전 버전의 M-profile Arm 아키텍처의 MPU와 다른 프로그래머 모델을 가지고 있습니다. 모든 MPU 레지스터가 뱅크된다는 사실을 깨닫는 것이 중요합니다. Arm TrustZone®이 활성화된 경우 보안 상태에 대한 MPU 레지스터 세트와 비보안 상태에 대한 미러 세트가 있습니다. 0xE000 ED90과 0xE000 EDC4 사이의 MPU 주소에 액세스할 때 액세스되는 MPU 레지스터의 유형은 프로세서의 현재 상태에 의해 결정됩니다. 비보안 코드는 비보안 MPU 레지스터에 액세스할 수 있고 보안 코드는 보안 MPU 레지스터에 액세스할..
Cortex-M7 아키텍쳐는 MPU를 통해 각 메모리의 유형(Type)과 속성(Attributes)를 지정할 수 있습니다. 여기서 메모리는 Internal or External 메모리를 말합니다. 메모리 맵과 MPU는 메모리 맵을 영역으로 분할합니다. 각 영역에는 정의 된 메모리 유형(type)을 가지고 있으며 일부 영역은 추가 메모리 속성(attributes)이 가지고 있습니다. 메모리 유형 및 속성은 영역에 대한 액세스 동작을 결정합니다. 다음은 STM32F7, H7 Programming manual을 번역하여 올립니다. 1. Type - Normal : 프로세서는 효율성을 위해 트랜잭션을 재정렬하거나 추측 읽기를 수행 할 수 있습니다. 즉, 순차적으로 정렬된 Instruction 대로 실행이..
오늘은 Context Switching을 하기 위한 PendSV Handler 구현을 다뤄보도록 하겠습니다. 대부분의 RTOS들은 PendSV Handler를 내에서 Context Switching을 하게 되는데 이는 Cortex-M core의 권장사항입니다. PendSV Interrupt 핸들러는 아래 명령어로 쉽게 발생하게 됩니다. #define schedule() SCB_ICSR |= (1 sp)); /* restore context */ restore_context(); asm volatile("mov lr, %0" ::"r"(0xFFFFFFF9)); asm volatile("bx lr"); /* USER CODE END PendSV_IRQn 0 */ /* USER CODE BEGIN PendSV..
이번 포스팅에서는 Interrupt 디버깅이나 RTOS 개발에 필요한 Cortex-M4(F) Lazy Stacking and Context Switching에 대한 Application note를 번역기를 돌린 내용입니다. Introduction Cortex-M4 프로세서는 ARMv7E-M 아키텍처를 기반으로 하며 Cortex-M3와 유사합니다. ARM Cortex-M3와 동일한 일반적인 데이터 처리를 위한 정수(integer) 레지스터 뱅크와 스택 기반 예외 모델을 가지고 있습니다. Cortex-M4 제품은 다음과 같이 제공됩니다. FPU가 없는 Cortex-M4 FPU가 있는 Cortex-M4F. Cortex-M4F를 Cortex-M4 또는 Cortex-M3과 비교하면 Cortex-M4F에..