Don't think! Just do it!

종합 IT 기술 정체성 카오스 블로그! 이... 이곳은 어디지?

제퍼 7

[nRF52840 + Zephyr] #12. Synchronization

Synchronization에 대해서는 Semaphore와 Mutex, 이 두 개만 알면 끝! 😆😆😆😆 Semaphore부터 보자구. //런타임에서는 이렇게 struct k_sem my_sem; k_sem_init(&my_sem, 0, 1); //컴파일타임에서는 이렇게 K_SEM_DEFINE(my_sem, 0, 1);//가용 세마포어 1, 초기 가용 세마포어 0 //or K_SEM_DEFINE(my_sem, 1, 1);//가용 세마포어 1, 초기 가용 세마포어 1 👆 위처럼 선언하고 👇 아래처럼 사용하지. //Semaphore take k_sem_take(&my_sem, K_MSEC(50)) //Semaphore give k_sem_give(&my_sem); 약간 설명하자면 가용한 세마포어가 있으면 k..

[nRF52840 + Zephyr] #11. Inter-task communication A

제퍼의 경우에는 Inter-thread communication이 되겠구만! 지원되는 기능을 살펴보니.... 너무 많아;;;😢 👇👇 우린 너무 많은 거 안좋아 하니까 줄여보자구. 난 보통 다른 RTOS에서는 Flag와 Queue를 많이 사용했어. 그런데 제퍼에는 Flag가 없네? 진짜 없는 건가? ;;; 간편하게 사용하기 좋았는데 ㅠㅠ Queue는 당연히 있는데... FIFO가 Queue 아닌가?;; LIFO가 Stack이고? Pipe는 freertos에서 stream같고 ㅎㅎ 주절 주절 말이 많았는데 Stack은 잘 안쓰니까 우선 Queue부터 해보자구 👇👇 #include #include K_QUEUE_DEFINE(my_queue); typedef struct queueItem{ uint8_t ite..

[nRF52840 + Zephyr] #7. RTOS 기본

RTOS 가 기본적으로 제공하는 기능들이 있어. 5가지 정도인데 아래를 보자구! 👇👇👇 1. Task(Thread) management 2. Memory management 3. Time management 4. Inter-task communication 5. Synchronization 모든 rtos가 비슷해. (제퍼도 마찬가지!) 그래서 난 새로운 rtos를 사용해야 할 때 항상 저 기준을 적용하고 있어. Thread management Thread 혹은 Task의 생성, 삭제, 정지, 재시작 등등의 기능을 말하는 거야. Delay로 많이 사용하는 sleep도 thread의 기능 중에 하나임. 제퍼에서도 k_thread_create, k_thread_suspend 와 같은 함수들이 있어. Memor..

[nRF52840 + Zephyr] #0. nRF and Zephyr

NRF52 시리즈 중 하나를 아주 잠깐 사용해본 적이 있었어. 어렴풋한 기억으로는 RTOS에 블루투스 스택이 돌아가고 있었고 유저는 유저 테스크에서만 한정적으로 코드를 만졌던 것 같아 -_-;;; 스쳐지나가는 프로젝트라 깊게도 안팠지만 그 때 뭐랄까.. 좀 나쁜 이미지가 있었는데 이제와서 다시 보니~ 제퍼 OS를 사용하고 있네? 오~ 👇👇👇 사용자 환경도 매우 잘 구축되어 있고 예제도 충실해! 이것 저것 테스트해보고 나니 이건 뭐 신세계! 개인적으로 느끼기에 지금까지 경험해본 임베디드 개발 환경 중 단연 으뜸이라 말할 수 있었어. 블루투스 쪽 스택이나 프로파일도 알아야 하고 제퍼 RTOS도 해야 한다는 압박감이 있는 걸 알지만 nordic에서 제공하는 vscode extension을 설치하고 예제를 몇개..

Zephyr 새 보드 만들기 #2

2022.09.22 - [임베디드 소프트웨어/Zephyr] - Zephyr 새 보드 만들기 Zephyr 새 보드 만들기 2022.08.01 - [임베디드 소프트웨어/Zephyr] - Zephyr 새 프로젝트 만들기 Zephyr 새 프로젝트 만들기 2022.07.30 - [임베디드 소프트웨어/Zephyr] - Zephyr RTOS 시작하기 - 설치 및 기본 예제 Zephyr RTOS 시작.. engschool.tistory.com 오늘은 디바이스 트리를 만져보자고. 디바이스 트리는 리눅스에서 하드웨어를 설명해놓은 구조? 정도라고 보면 돼. 우리는 완전 새로운 디바이스 드라이버를 개발하는 게 아니니까 디바이스 트리만 적절하게 만져주면 동작이 가능하지 않을까? 나도 몰라 해봐야 알지 ㅋ 우선 새로 만들어놓은 ..

Zephyr RTOS 시작하기 - 설치 및 기본 예제

사실 제퍼 공홈 getting started 문서 보면 다 있는 내용들인데.. 다만 영어일 뿐이지. 그래도 조금씩 애매한 부분들이 있는데 그런 거 위주로 설명하도록 할게. 아래는 Zephyr getting started👇👇 https://docs.zephyrproject.org/latest/develop/getting_started/index.html Getting Started Guide — Zephyr Project Documentation This is the documentation for the latest (main) development branch of Zephyr. If you are looking for the documentation of previous releases, use th..

Zephyr RTOS

난 임베디드 펌웨어를 작성할 때 RTOS를 선호해. 왜냐면.. 좋으니까!!! 예전에는 믿지 못하겠다며 안쓰는 사람들도 많았어. 물론 AC전압이 흐르고 모터를 돌리고 히터를 가열시키고 하는 임베디드 펌웨어 특성상 안정성이 최우선이겠지만.. 그런데 그건 -_-;; RTOS의 안정성에 문제가 있다기 보다... 내 손가락과 두뇌 안정성에 문제가 있지 않을까? ㅋㅋㅋㅋㅋ 그리고 나는 무엇보다 전체 코드를 while(1)에다가 폴링으로 때려 박는 방식이 너무 끔찍했어. 폴링으로 펌웨어를 개발을 하다보면 디버깅하거나 기능을 수정할 때 해당 기능과 관련이 없는 부분에서 새로운 오류가 발생하는 경우가 많고(특히 타이밍이 중요한 어플리케이션) memory overflow가 무서워서 malloc이나 free 사용을 못하기도..

반응형