공부
-
[Linux] Dynamic Loading공부/Embedded 2025. 1. 27. 02:21
동적 라이브러리 사용 이유- 정적 라이브러리는 컴파일 타임에 실행 바이너리에 포함되어야 하지만, 동적 라이브러리는 실행 파일에 포함되지 않아도 된다.- 따라서 동적 라이브러리는 앱의 컴파일과 별개로 동작할 수 있고, 앱의 실행 파일에 포함되지 않기 때문에 앱의 초기 실행시에 메모리에 로드될 필요가 없다.- 따라서 앱 실행 속도나 메모리 사용량을 줄일 수 있다. 동적 라이브러리 로드- shared library라는 형식으로 라이브러리를 제작- 실행 시점에 사용할 라이브러리를 연결하여 사용- 라이브러리의 확장자는 . so(shared object), 동적 라이브러리- 대상 프로그램 컴파일 시 -ldl 옵션를 줘서 컴파일 dlfcn.h#include 로 사용 void *dlopen(const char *fil..
-
[Zephyr] Workqueue공부/Embedded 2025. 1. 7. 00:40
https://academy.nordicsemi.com/courses/nrf-connect-sdk-fundamentals/lessons/lesson-7-multithreaded-applications/topic/exercise-3-7/ Exercise 3 - Nordic Developer AcademyWorkqueue creation and work item submission Since threads of higher priority have the ability to starve other low priority threads, it is good practice to offload all non-urgent execution in these threads into lower-priority thre..
-
[Zephyr] System Thread공부/Embedded 2025. 1. 7. 00:15
시스템 스레드는 커널이 시스템을 초기화하는 동안 자동으로 생성하는 스레드 메인 스레드커널 초기화를 수행한 다음, 애플리케이션의 main()함수를 호출한다. (main()이 정의 되어 있다면) 기본적으로 메인 스레드는 가장 높은 선점형 스레드 우선순위(우선순위:0)를 가진다.main()이 정의되지 않았거나, 실행한 다음 정상적인 반환을 수행하면 메인 스레드가 정상적으로 종료되고 오류가 발생하지 않는다. 유후 스레드시스템에서 할 다른 작업이 없을 때 실행된다.가능하다면 보드의 전원 관리 지원을 활성화하여 전원 절약을 돕거나, loop(아무것도 하지 않음)를 수행한다.시스템이 실행되는 동안 계속 존재하고 종료되지 않는다.항상 가장 낮은 스레드 우선순위를 사용한다.
-
[Zephyr] Thread공부/Embedded 2025. 1. 6. 01:10
Zephyr OS Docs를 읽고 적당히 메모하는 글... https://docs.zephyrproject.org/latest/kernel/services/threads/index.html Threads — Zephyr Project DocumentationA thread that has no factors that prevent its execution is deemed to be ready, and is eligible to be selected as the current thread. A thread that has one or more factors that prevent its execution is deemed to be unready, and cannot be selected as the ..
-
C언어의 비트 필드공부/Embedded Recipe 2024. 12. 12. 23:52
비트 필드구조체 비트 필드를 사용하면 멤버를 비트 단위로 저장할 수 있다.CPU나 칩의 플래그, 그 외 Low Level 프로그래밍에서 자주 사용한다. 아래와 같은 코드를 실행 해보자.#include struct Flags { unsigned int a : 1; // a는 1비트 크기 unsigned int b : 3; // b는 3비트 크기 unsigned int c : 7;};int main(){ struct Flags f1; f1.a = 2; // 0000 0010 f1.b = 31; // 0001 1111 f1.c = 4; // 0000 0010 printf("%u\n", f1.a); //0 printf..
-
Clock과 잡다한 것공부/Embedded Recipe 2024. 12. 12. 00:14
디지털 회로의 심장박동 Clock클럭? clock? cpu clock?임베디드 시스템이든 컴퓨터든 클럭이란 것이 존재한다. 즉, 디지털 회로에서의 주기적인 펄스로 모든 것이 이 Clock에 동기화하면서 작동한다.= CPU 및 주변 장치들은 Clock이라는 박자에 맞추어 동작 * 클럭 발생장치를 Oscillator(발진기)라고 하고, MCU 내부에 존재하지만 필요시에는 외부에 별도로 달아주기도 한다.* 기존 클럭보다 더 낮은 클럭이 필요한 경우 분주기(Prescaler)를 사용하기도 한다. Rising Edge & Falling EdgeRising Edge(상승 에지): 0에서 1로 변환하는 순간Falling Edge(하강 에지): 1에서 0으로 변환하는 순간두 개의 상(Phase)를 가진 아래와 같은 ..
-
AMBA Bus Protocol공부/Embedded 2024. 12. 8. 22:34
프로세서, 주변 장치, 메모리 등은 연결되어야 하고, 이 연결 규약 중 하나가 AMBA Protocol이다. ARBA Protocol?- ARM사의 Advanced Microcontroller Bus Architecture Protocol이다.(= 그냥 ARM사의 구조.)- Soc(System on chip)에서 고성능 16/32bit MCU 프로세서/주변장치 설계 표준- AMBA, 2, 3, 4 등 다양한 종류가 있음 AMBA BusAdvanced System Bus(ASB): APB에 비하여 전력과 주파수가 높고, 고속, 양방향 구조Advanced Peripheral Bus(APB): 낮은 주파수, 저전력, 저속Advanced High-performance Bus(AHB): ASB의 업그레이드 버전,..
-
[Renode] .repl(Platform description format)공부/Embedded 2024. 12. 1. 23:16
.repl?repl(Renode Platform)은 Platform description format 이다.주변 장치를 쉽게 구성하여 완전한 플랫폼 정의를 만들 수 있게 yaml과 파일이 필요해서 만들어졌다. 기본적인 작성 규칙- 의미 있는 들여쓰기가 사용되고 (), {}, 를 사용함(Python과 비슷)- 들여쓰기는 공백만 허용하고, 공백 수는 반드시 4의 배수- 중괄호 내부의 들여쓰기는 의미가 없음- 의미 있는 들여쓰기가 사용되는 경우, 이를 indent mode라고 부름- 비들여쓰기에서 구분하려면 세미콜론으로 구분함- 주석은 /* */ 를 사용 ### Ex1line1line2 line3 line4 line5 line6 ### Ex2line1line2 { line3;..