전체 글 (98) 썸네일형 리스트형 [Nuttx OS] Scheduler 안녕하세요. 오늘은 Nuttx OS에서 Task가 어떻게 관리되는지,즉 Scheduler에 대해 알아보도록 하겠습니다.ready 큐실행 중 or 대기 중인 task들은 ready queue로 관리됩니다 파일 위치: nuttx/sched/sched/sched.h#define list_readytorun() (&g_readytorun)#ifdef CONFIG_SMP# define current_task(cpu) (g_assignedtasks[cpu])#else# define current_task(cpu) ((FAR struct tcb_s *)list_readytorun()->head)#endif Non-SMP에서는 g_readytorun 리스트의 첫번째 TCB가 현재 실행.. [Nuttx OS] Boot Sequence 분석 안녕하세요.오늘은 Nuttx OS의 부팅 흐름에 대해 분석해보겠습니다.흐름 요약전체 흐름을 간략히 요약하고 넘어가겠습니다. 부팅 흐름은 다음과 같이 요약할 수 있습니다.__start -> arm_boot() -> nx_start() -> nx_bringup() -> board_late_initialize() -> qemu_bringup() -> nsh_main() -> nsh> 이 순서대로 분석해보도록 하겠습니다.1) Reset VectorReset Vector는 메모리 0에 위치합니다. 가장 먼저 SW가 깨어나는 지점과 관련되며, ld 파일에 선언되어 있습니다.nuttx/boards/arm/qemu/qemu-armv7a/scripts/dramboot.ldOUTPUT_ARCH(arm)ENTR.. [Nuttx OS] shell cmd 분석 및 추가해보기 안녕하세요.오늘은 Nuttx OS에서 shell command를 분석해보고,custom shell command도 하나 만들어 보겠습니다.Shell commandNuttx의 shell command에는 크게 2종류가 있습니다.종류위치특징Builtin commandapps/일반적NSH internal commandapps/nshlib/shell 내부 2종류 커맨드에 대해 알아보겠습니다.분석 1) Builtin command - helloNuttx os에 hello command가 있습니다.nsh> helloHello, World!! 관련된 파일의 위치는:apps/examples/hello/ 구조는 다음과 같습니다.hello/ ├── Kconfig ├── Make.defs ├── Makefile └── he.. [Nuttx OS] 실습 환경 세팅 안녕하세요. 오늘은 Nuttx OS의 실습 환경을 갖추어 보겠습니다.(WSL + Ubuntu 24.04.2 LTS 기준으로 작성했습니다.)설치필수 패키지 먼저 설치하겠습니다.$ sudo apt update$ sudo apt install -y \git \cmake \ninja-build \build-essential \kconfig-frontends \genromfs \libgmp-dev \libmpc-dev \libmpfr-dev \gperf \flex \bison \texinfo \gawk \automake \autoconf \libtool \pkg-config \g++ \gcc-arm-none-eabi \qemu-system-arm 소스 코드는 nuttx와 apps 두개를 받으면 됩니다.$ mkdi.. [C/C++] CMake로 빌드 관리하기 안녕하세요오늘은 CMake에 대해 알아보겠습니다CMake?Cmake는 흔히 빌드 툴이라고 생각할 수 있지만,정확히 표현하면 빌드 시스템 생성기(Build System Generator) 입니다 아주 작은 프로젝트라면 직접 컴파일할 수 있습니다.g++ main.cpp sensor.cpp logger.cpp -o app 하지만 프로젝트가 커지면 고민해야할 문제가 늘어납니다어떤 파일을 컴파일 해야하는가?include 경로는?라이브러리 링크 순서는?and so on..Makefile예전에는 Makefile을 사용했습니다app: main.o sensor.o logger.o g++ main.o sensor.o logger.o -o app 하지만, 이것도 결국 프로젝트가 커질수록 유지보수가 어려워서 CMake가 등.. [C++] 인라인 어셈블리 (Inline Assembly) 서론개발을 하다가, 이런 코드를 하나 마주했습니다.extern "C" void idle_cpu() { asm volatile("hlt");} 해당 코드를 알아보다가 inline assembly에 대해 새롭게 알게 되어 정리하게 되었습니다. 이번 글에서는 아래 내용을 알아보겠습니다.인라인 어셈블리 알아보기간단한 실습과 함께 objdump로 명령어 확인하기인라인 어셈블리?인라인 어셈블리란→ C/C++ 코드 안에서 직접 어셈블리 코드를 작성하는 것입니다. 1. 사용 예제asm("hlt")asm volatile("hlt") 2. 사용 이유일반 C 코드로는 하기 어려운 작업들 때문에 인라인 어셈블리를 사용합니다.CPU 레벨 제어인터럽트 처리레지스터 직접 조작and so on ..3. volatile컴파일러가.. [Linux System Programming] 프로세스 - exit 안녕하세요.오늘은 프로세스의 종료와 관련이 있는 exit()에 대해 알아보도록 하겠습니다.서론exit()을 이용해서 프로그램이 종료할 수 있습니다.프로그램이 종료될 때는 단순히 프로그램이 끝나는 것이 아니라, 여러 정리 작업이 함께 수행됩니다. 대표적으로 다음과 같은 작업이 발생합니다.atexit()로 등록된 함수 실행stdio 버퍼 flush열린 파일 descriptor 정리프로세스 종료 상태를 부모에게 전달이번 글에서는 이러한 동작을 직접 실행해서 확인하면서 exit()에 대해 파악해보도록 하겠습니다.1) exit() 기본 동작 확인먼저 exit()가 부모 프로세스에게 종료 상태(exit status)를 전달하는지 확인해보겠습니다. 프로세스가 종료되면 커널은 그 종료 상태를 저장하고,부모 프로세스는 .. [C++] gdb로 확인해보는 virtual과 vtable 서론C++ 코드를 보다보면, 간간히 보이는 키워드와 개념이 있습니다virtualvtable C++도 다른 프로그래밍 언어처럼 동적 바인딩을 제공하는데, 실제로 어떻게 동작하는가에 대해선 모호하게 느껴졌습니다. 그래서 이번 글에서는개념 설명 및 실행 결과 확인gdb로 메모리 확인어셈블리 비교까지 진행해보겠습니다.정적 바인딩 (Static Binding)virtual이 필요한 상황을 예로 들어보겠습니다. virtual을 사용하지 않는 예:#include class Base {public: void print() { std::cout print();} 실행 결과:$ g++ without_virtual.cpp -o without_virtual.o$ ./without_virtual.oBase왜 .. 이전 1 2 3 4 ··· 13 다음