본문 바로가기

분류 전체보기

(138)
[C#] IValueConveter 패턴 XAML에서 데이터 바인딩 된 값을 UI에 맞게 가공하는 방법은 IValueConverter를 사용하는 것이다. xaml 파일 내에서 바인딩 된 값이 UI에 적용되기 전에 가공될 수 있도록 해주는 중간 처리자 역할을 한다. IValueConverter는 인터페이스다. 따라서 사용자가 추가로 정의 할 수 있도록 되어있고 구조는 아래와 같다. public interface IValueConverter{ object Convert(object value, Type targetType, object parameter, CultureInfo culture); object ConvertBack(object value, Type targetType, object parameter, CultureInfo c..
차동증폭(Differential Amplification) 개념 및 특성 1. 동작 개념차동증폭은 두 입력 신호(Vp, Vn)의 차이를 증폭하는 기술로, 다음과 같은 기본 원리로 동작합니다:● 기본 수식: Vdiff = Vp - Vn ● 입력 신호 변환: 단일 신호(Single-ended) 입력 시: Vp = VCM + Vs, Vn = VCM - Vs (VCM: 공통 모드 전압) 결과적으로: Vdiff = (VCM + Vs) - (VCM - Vs) = 2Vs ● 신호 처리 경로: 단일 신호 → 차동증폭기(VCM 추가하여 차동 신호 생성) → RF 트랜스포머(ADT1-1WT) → ADC 칩 공통 모드 전압(VCM): 0.4~0.6V 범위를 유지해야 정상적인 차동 신호 처리가 가능합니다.  2. 특징● 신호 증폭 2배 증폭: 입력 신호(Vs)는 차동 처리 과정에서 2배로 증폭됩니..
[나빌로스] RTOS 컨텍스트 스위칭 정리 (Round Robin + 선점형 기반) 최근에 RTOS 기반의 태스크 스케줄링을 공부하면서, Round Robin 방식으로 동작하는 선점형 RTOS의 컨텍스트 스위칭 구조를 정리해봤다. 실제로 구현한 코드를 바탕으로 전체 흐름과 필요한 함수, 구조 등을 아래와 같이 요약함.● 기본 구조1. 모든 태스크는 TCB(Task Control Block)로 관리각 태스크는 독립적인 스택 영역과 레지스터 정보를 갖고 있어야 한다. 이를 위해 TCB 구조체에는 보통 다음과 같은 정보가 들어간다: typedef struct { uint32_t sp; uint8_t* stack_base; } KernelTcb_t; sp는 현재 태스크의 스택 포인터, stack_base는 할당된 스택의 시작 주소2. TCB 리스트 선언여러 개의 태스크를 관리하기 위해, TCB..
[ASM] {} , [] 사용법 ✅ 1. {}의 의미: 문맥에 따라 다름 ✔️ A. PUSH/POP {r0, r1, ...}에서의 {}이건 레지스터 묶음을 나타내는 문법적 표현이야.즉, POP {r0, r1, r2} → SP가 가리키는 메모리 주소에서 값을 꺼내서 해당 레지스터에 저장한다는 뜻이야. 예:POP {r0} → 현재 스택에 가장 위에 있는 값을 r0에 저장하고,→ SP를 4만큼 증가시킴. ✔️ B. MRS r0, cpsr처럼 시스템 레지스터 접근 시여기서 {}는 사용하지 않아. 시스템 레지스터 이름 자체를 명시해.asm MRS r0, cpsr ; 시스템 레지스터 'cpsr' 값을 r0로 MSR cpsr, r0 ; r0에 있는 값을 시스템 레지스터 'cpsr'로 복사 즉, 시스템 레지스터를 읽고 쓸 땐 MRS, MSR 명령어를..
[나빌로스] 10.컨텍스트 스위칭 컨텍스트 스위칭(Context Switching) 과정 정리컨텍스트 스위칭은 현재 실행 중인 태스크(Task)의 실행 상태(레지스터 값, 스택 포인터 등)를 저장하고, 다음 실행할 태스크의 상태를 복구하여 실행을 이어가는 과정이다.아래는 Task1 → Task2로 전환되는 과정을 상세히 설명한 것이다.1. Task1이 실행 중Task1이 실행 중이며, Task1의 스택에는 현재 실행 중이던 함수 호출 정보, 지역 변수 등이 저장되어 있다.Task1의 레지스터(r0~r12, lr, cpsr)는 현재 Task1의 연산 상태를 유지하고 있다.2. 컨텍스트 저장 (Save_context)라운드 로빈 스케줄러가 Task1의 실행을 중단하고 Task2로 전환하려고 할 때,현재 Task1의 컨텍스트를 저장하는 과정이..
[나빌로스] 8.태스크 RealViewPB에서 Task Control Block (TCB) 설계 및 제어 개념RealViewPB에서 태스크를 관리하기 위해 **Task Control Block (TCB)**를 사용하며, 이를 기반으로 태스크의 상태, 레지스터 컨텍스트, 스택 정보 등을 관리해야 한다. 1. Task Control Block (TCB)란?TCB는 각 태스크를 관리하는 자료구조이다.운영체제가 여러 개의 태스크를 관리하고, **태스크 간 전환(Context Switch)**이 가능하도록 하기 위해 사용된다..🔹 TCB의 주요 구성 요소:컨텍스트(Context)실행 중인 태스크의 현재 상태를 저장 (CPU 레지스터 값)spsr, r0-r12, pc, sp 등이 포함됨태스크 정보태스크 ID, 태스크 이름, 우선순위 정..
[나빌로스] 7.타이머 모든 작업 순서하드웨어 레지스터 구조체 선언 & 주소 define // periperal.h레지스터 접근할 인스턴스 선언 // Regs.c인스턴스가 구동할 API 선언 // Halperiperal.hAPI 정의 // periperal.c + 응용 API 정의 ( stdlib.h/c or stdio.h/c)Main 에서 동작 추가 정의 RealViewPB에는 SP804 타이머 내장됨. SP804 Timer 개요 (RealViewPB)RealView Platform Baseboard (RealViewPB)에는 SP804 Timer가 포함되어 있으며, 이는 Dual Timer Module로 동작하는 ARM의 범용 타이머 컨트롤러이다.SP804는 32-bit 다운 카운트 타이머이며, 인터럽트를 발생시킬 수도 있..
[나빌로스] 5-1. UART printf 구현하기 debug_printf 함수는 가변 인자 처리기능을 구현한다.함수의 매개변수로 받는 ...는 가변인자를 의미한다. #ifndef LIB_STDIO_H_#define LIB_STDIO_H_uint32_t putstr(const char* s);uint32_t debug_printf(const char* format, ...);#endif  stdio.c 에 debug_printf를 선언해준다.#include "stdint.h"#include "HalUart.h"#include "stdio.h"#define PRINTF_BUF_LEN 1024static char printf_buf[PRINTF_BUF_LEN]; // 1KBuint32_t putstr(const char* s){ uint32_t c..