RUST 입문 교과서C/C++과 매우 유사하다.fn main이 먼저 수행되며, parameter 없고 return도 없다.First, println! calls a Rust macro. If it had called a function instead, it would
Dependency management
Debugging prefer using log or print line style messages over a full-blown debugger if your code is trying to maintain communication with one or more

2022년에 개발자로 근무할 때 설치했던 Ubuntu-20.04가 호환성 문제로 너무 많은 시간을 잡아먹어서 그냥 싹 다 삭제하고 재설치하기로 마음을 먹었다. 기존 wsl 삭제 > PowerShell 기준 > 1. Arch : x86_65 sub : ? vendor
error : could not found 'cc' ... 인터넷 서칭하니까 가볍게 해결 방법이 나와있었다.해결 완.패닉이 뭔데?러스트에서는 일반적으로 복구 가능한 오류인지가 기준이다.어떤 함수에서든 오류 상태를 입력하여 결과 유형을 반환하면 되므로 패닉은 기본적으로

GDB를 활용한 디버깅 방법.break <rs file>:<break point position>continue : 중단점까지 실행하라는 뜻인가봐info locals : 원하는 값을 보여줌.print x, print &xset var x=6 : x가 6으로
10분만에 공부해보는 러스트 언어variable bindingis equal tolet x = 42;Type annotation(주석)rust에서는 타입을 명시하지 않을 경우, 기본값으로 i32를 선언한다.You can't access uninitialized vari
the STM32 family includes a Memory Protection Unit (MPU) that can be present on some STM32 microcontrollers (MCUs), but it is not a guaranteed compone
지난 번에 받아서 썼던 STM32F103C8T6 보드는 MPU가 내장되어 있지 않아 새 보드를 받아 쓰게 되었다. STM32F446RET6U NUCLEO-F446RE

까지 설치 완료 이제 STM32F446을 찾아서 연결해줘야 하는데 가이던스 자료가 2024년 기준이라 잘 안먹는다. 이게 2024년 기준 명령어라서 현재는 안되는 것 같다. -> 이걸로 바뀌었다. 또한, 명령어를 통해 이 시스템에서는 내 보드를 어떻게 부르는
BSFHALPACMCUThat's the hierarchy. from 4 to 1, it gets higher level interface. So, i'm gonna study from MCU, bottom-up way.Microbits 한정 자료들인 것 같다. 일단
.

STM32F446RE 칩 온보딩 완료 (Cross Compiling, Debugging tools installation)Blinky 예제 성공MCU level → PAC(Peripheral Access Crate) level 공부PAC를 활용하여 좀 더 Capsule
App 2개 Capsulation + mini OS화 Study > #[...], #![...] ? Attribute? Basic : Rust에서 #[...] 이건 어떤 역할을 하는가? Attribute라고 하며, 컴파일러에게 '이 선언을 이렇게 취급해달라'는 메타디이터를 붙이는 방식이다. 크게 두 가지 문법이 존재한다. #[attr...
Mini OS with 2 applications Code study 실제 코드는 맨 아랫 부분 참고. > 겁나 어렵다. 어렵기도 어려운데, 설계 디테일 자체가 엄청 깊고 세심한 것 같다. 대충 어떤 식으로 설계를 해야 하는 지 좀 감이 온다. > 코드 설명 App 2개 구현 BootShowApp : 처음 OS 동작시 빠르게 3번 blink. ...
So far, 두 번째 앱 (LED로 SOS 신호 송출하기) 빌드 완성 각 앱들이 메모리에 직접 접근하지 못하도록 mini OS화 작업. 2-1. Rust 기본 문법 study : attribute, mod, 등등 2-2. system call 공부
Apps 총 2개 : Hearteat(default), SOS signalHeartbeat : blink constantlySOS signal : when push button(B1), blinks following SOS patterns, ..--..
So farsoftware level에서 syscall 기능 구현Nowsvc를 통해서 실제 syscall을 구현하는 중스케줄러를 포함하여 mpu를 활용하는 버전으로 업데이트 중
졸업 프로젝트를 진행하다보니 코드가 기하급수적으로 커져서 깃으로 관리하기로 했다. Ubuntu 서버에서 VS code 환경을 통해 작업 진행중이다. ubuntu terminal에서 git 설치 git --version -> 깃 설치 여부 확인. 안되어 있으면 아래
Arm developer - SVC Handler(https://developer.arm.com/documentation/dui0203/h/handling-cortex-m3-processor-exceptions/supervisor-calls-> In order
board : STM32F446 내장 레지스터에 직접 접근(MMIO)하여 GPIO/버튼/타이밍 기능 사용MMIO? CPU가 입출력(I/O) 장치에 접근할 때, 메모리(RAM)와 I/O 장치 모두를 동일한 주소 공간에서 취급하는 방식PMIO는 I/O장치가 별도로 분리된
Application Binary Interface의 축약어.두 개 이상의 바이너리(기계어) 소프트웨어 모듈이 서로 통신하기 위한 저수준의 인터페이스 표준. API가 소스 코드 수준에서 소프트웨어 구성 요소를 정의하는 반면, ABI는 기계어 수준에서 함수 호출 규약,
현재 코드는 “앱 → SVC → 커널 → 보드(MMIO)” Flow.main()보드 인스턴스 생성: let mut board = board::BoardSyscalls::new(...)보드 초기화: unsafe { board.init(); }커널에 보드 포인터 등록: u

실제 Supervisor Call을 구현하여 앱 실행시 svc 유도msp인지 psp인지 구분하고 msp면 kernel mode로 점프kernel 모드에서 어플리케이션 진행앱 실행 후 다시 user mode로 리턴앱 코드 → asm!("svc 0") ──▶ (SVC 예외
Schedular 구현중아 너무 어렵다.
기존 코드가 너무 스파게티 코드가 되어버려서 다시 설계하기로 했다.secure_rtos/├── src/│ ├── main.rs : 부트 및 커널 초기화│ ├── kernel.rs : 커널 (스케줄러, MPU, 드라이버 등록)│ ├── t
gpio_toggle()과 sleep_ms()에서 syscall을 호출할 때, 실제로 svc_call()을 통해 SVC 핸들러 (svcall_rust)에 도달하고 있는가?실행 결과, SVC call은 잘 되지만, 다음 task가 돌아가지 않았다. 즉, 한 번만 호출된
SysTick()함수까지는 50us마다 잘 접근하고 있는 걸 확인했다.해당 함수에서 PendSV를 강제로 트리거하는 역할을 하고 있으므로 이제 의심되는 것은 PendSV Handler.PendSV 어셈블리 코드를 보면: 1\. 첫 번째 PendSV: mrs r0, p
그동안 각 앱마다 고유 메모리 공간을 부여했고, Stack pointer도 잘 활용했으며, 스케줄러에서도 첫 번째 스위칭까지는 잘됐다.하지만 첫 번째 Context Switching 이후에 계속 하드폴트가 나고 있었다."메모리 공간 할당 잘 했는데.. 문제는 이 앱들의
Task Stack Structure Architecture Diagram Flow Example Switch timing

ARM Cortex-M RTOS Context switching 그동안 Kernel에서 어플리케이션을 스위칭해줄 때, SP만 저장하는 중이었다... ARM Cortex-M RTOS Context Switching > Having a foundational knowl

If unprivileged code attempts to read any stack pointer, the priority masks, or the IPSR, the read returns zero.The processor ignores writes from unpr
Context State Stacking
Cortex-M-RTOS(https://interrupt.memfault.com/blog/cortex-m-rtos-context-switchingThe FreeRTOS schedular works by utilizing the built in Systic an
일단 내가 이 어셈블리어를 직접 뜯어고치려면 알아야 하는 필수 정보들을 정리했다. | 주제 | 설명 | | -----------------
3주 간의 개고생 끝에 결국 해냈다...!!!!!
현재 내 프로젝트는'Tock-style, Rust based RTOS mini-kernel, static task structure' 형태이다.앞으로 optimization 방향성은Dynamic task generation adn allocation, schedulin
🚀 Tock 철학 구현:✅ Controlled Interface: 모든 앱이 app_syscalls 모듈 사용✅ Cooperative Scheduling: 모든 앱이 yield_cpu() 사용✅ Kernel-mediated Services: 로깅, GPIO, 타
실제 구현 메커니즘 User 레벨 코드 (간단함): 컴파일러 레벨에서 자동 생성 (매크로가 수행): unsafe extern "C" fn led_blinker() -> ! { / 원래 코드 / }