본문 바로가기

전체 글

(86)
Raspberry Pi Compute Module 3 b+ EMMC OS 올리기 Raspberry Pi Compute Module 3 B+ 에 OS를 올려 보자 (참조 링크: https://www.raspberrypi.org/documentation/hardware/computemodule/cm-emmc-flashing.md) Hardware 준비 다음 그림과 같이 세팅한다. 준비 끝 Software 준비 1. Ubuntu를 킨다. 2. git을 설치한다. sudo apt install git 3. usbboot를 설치한다.(Raspberry Pi Usb를 인식하기 위한 Boot Driver) git clone --depth=1 https://github.com/raspberrypi/usbboot 4. 들어간 후 다음과 같이 실행한다. cd usbboot sudo apt instal..
NanoPB - Stm32 NanoPb를 STM32에 적용시켜보자 NanoPb란? -> Protobuf를 Embedded System에 적용하기 위해 C기반 경량화로 나온 프로토콜을 NanoPb라고 한다. NanoPb 순서 1. ~~~.proto 파일에 인코딩 하고 싶은 데이터,구조체등을 정의한다. 2. ~~~.proto 파일을 컴파일 한다. (ex: protoc --nanopb_out=/SaveDirectory ~~~proto) 3. 컴파일이 정상적으로 되면 Save Directory에 ~~~.pb.c, ~~~.pb.h 파일이 나온다. 4. ~~~.pb.c, ~~~.pb.h 파일 및 Common protobuf.c,h 를 stm32에 넣고 컴파일을 돌린다. 5. Test 코드 작성후 검증 순서에 들어가기 전에 NanoPb를 컴파..
STM32 FREERTOS Mail Queue 구현 MailQueue 기본 Function 구현 (CMSIS-RTOS-V1) MailQueue는 Task끼리 데이터를 주고받기 위해 사용하는 자료구조이다. 동작: STM32F407Discvery로 구현 하였다. Task의 우선순위는 똑같이 Normal 1. sendMailTask는 val1, val2, val3에 0x01, 0x02, 0x03을 쓴다. 2. Mailput을 호출하여 전송 후 osDelay를 호출하여 Context Switching을 한다. 3. recvMailTask은 Block 상태에서 해제되어 val1, val2, val3 이 0x01,0x02,0x03이 맞는지 확인한다. 4. 맞으면 RED LED를 Blink 하고 틀리면 Blue LED를 Set 한다. (DEBUG 모드에서 PRINTF..
리눅스 및 커널 프로그래밍 스터디 정리 #5 CFS 기본개념 - n개의 Process에게 각각 1/n의 Process time 제공 - 특정 시간안에 n개의 프로세스가 모두 동일한 시간동안 실행 앞선 문제의 대안 - 순차적으로 일정시간 수행하고, 가장 실행이 덜 된 프로세스를 다음 대상으로 스케줄 - nice는 time slice 대신 processor time 비율의 가중치 계산에 사용 - time slice: (자신의 가중치/가중치 총합)으로 계산 targeted latency CFS가 설정한 가장 작은 스케줄 단위 또는 response time의 최대치 (wait 후 얼마나 기달?) ex) target latency가 20ms 이면 - 2개의 작업이 있으면 : 각각 10ms 씩 수행 - 20개의 작업이 있으면 : 각각 1ms 씩 수행 mini..
리눅스 및 커널 프로그래밍 스터디 정리 #4 Multi - Tasking - 하나 이상의 프로세스를 동시에 중첩형태로 실행 Cooperative Multi tasking - Yield를 통해서만 CPU를 양보 - 양보를 모르는 독점적 프로세스 - Mac OS 9 or less, Windows 3.1 - 잘못된 프로그램이 계속돌면 뺏어 올 수가 없음 Preemptive Multi tasking - Linux와 UNIX 에서 사용 - 스케줄러가 프로레스의 실행중단과 다른 프로세스 선택을 결정 - preemption: 실행중인 프로세스를 강제 중지시키는 것 - time slice: Preempt되기 전까지 프로세스에게 주어지는 시간 POLICY * I/O oriented Process - GUI를 가진 대부분의 프로그램 * Processor orient..
리눅스 및 커널 프로그래밍 스터디 정리 #3 리눅스의 스레드 구현 리눅스의 스레드: 주소공간과 같은 자원을 프로세스와 공유 Kthread: 커널 스레드를 만드는 프로세스 -> 새로운 커널 스레드를 생성 -> Kthread_create(int ...) -> 생성되었지만 BLOCK 상태 ※ Kernel thread는 우선순위가 항상 높다(User thread 보다) 프로세스 종료 exit()를 집어넣지 않아도 컴파일러가 집어넣어준다. 자발적: exit() 비자발적: Signal, Exception Process descriptor 제거 종료된 프로세스의 descriptor는 여전히 존재(task_struct) -> 자식 프로세스의 정보를 제공하기 위해 존재하며 부모가 가지고 오면 Delete 커널이 더 이상 필요 없다고 판단 되면제거 ※ 좀비프로세스 ..
리눅스 및 커널 프로그래밍 스터디 정리 #2 Process Creation fork(): 현재 Task를 복제해 자식 Task를 생성한다. exec(): 새로운 실행파일을 주소공간에 불러온다. (어느 정도 Page Table이 갱신된다.) Copy on Write (CoW) Task를 Fork 하면 자원은 모두 독립되어 사용되어야한다. 하지만 Resource는 한정되어 있으므로 무작정 독립 시키지않고 처음엔 같은 자원을 공유한다. 이렇게 쓰다가 Child 에서 Resource A를 쓴다고 하면 그떄 Resource A를 복사해서 사용한다. Parent가 fork() 실행 후 Child Process는 exec() 함수를 실행 하여 새로운 실행파일을 실행하기 전 File Descriptor를 수정하여 (dup(), dup2() 함수) 실행 할 수 있..
힙(Heap)정렬 구현 Heap 정렬 구현은 쉽다. kjt9109.tistory.com/entry/%ED%9E%99%EC%9A%B0%EC%84%A0%EC%88%9C%EC%9C%84-%ED%81%90-%EA%B5%AC%ED%98%84-1 힙(우선순위 큐) 구현 #1 힙 구현은 곧 우선순위 큐의 완성으로 이어진다. 일반적으로 큐는 FIFO 이다. 하지만 우선순위 큐의 OUT은 들어간 순서 상관 없이 우선순위에 따라 나온다. 힙(Heap)이란? 1. 힙은 '이진트리' 이되 '완 kjt9109.tistory.com 이전에 공부했던 힙을 살펴보면 힙에 데이터를 추가하여 완성 하였을 때 Root노드에는 우선순위가 가장 큰 데이터가 오게된다. 따라서 힙 구조에 Root 노드 데이터만 빼서 뺀 순서대로 정렬하면 데이터를 자연스럽게 정렬 된다..