Don't think! Just do it!

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

임베디드 소프트웨어/Zephyr 22

[nRF5 + Zephyr] #14. Bluetooth 처음부터 시작하기!

본격적으로 블루투스를 해볼건데 블루투스 자체에 대한 건 사실 나도 잘 모르고, 블루투스 스택을 따로 공부할 생각도 없어 ㅎㅎㅎ 모든 걸 다 알고 시작할 수는 없잖아? 예제 따라해보면서 배울수도 있고 말야. ㅋ 암튼 바로 실전 ㄱㄱ ... ... 라고 했지만... ... 블로그에 쓸 자신이 없다..;;; 한단계 한단계 차근차근 글로 설명할 자신이 없다... ... ... .. 그래서 유튜브에 채널 만들고 ㅋ 난생 처음 동영상찍어서 올림 ㅋ 유튜브로 봐~~ 안녕~~ ㅋㅋㅋ 👇👇 https://youtu.be/m2dqXqwFDfs nrf5 ble 시작하기

[nRF52840 + Zephyr] #13. Inter-task communication B

2023.06.03 - [임베디드 소프트웨어/Zephyr] - [nRF52840 + Zephyr] #11. Inter-task communication A [nRF52840 + Zephyr] #11. Inter-task communication A 제퍼의 경우에는 Inter-thread communication이 되겠구만! 지원되는 기능을 살펴보니.... 너무 많아;;;😢 👇👇 우린 너무 많은 거 안좋아 하니까 줄여보자구. 난 보통 다른 RTOS에서는 Flag와 Queue를 많이 engschool.tistory.com 이전에서 FIFO랑 Queue만 해봤는데 이번에는 Message Queue랑, Mail box를 해볼거야. 그럼 Message Queue부터 시작! Message Queue의 기본적인 동작..

[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] #10. Time management

제퍼도 다른 os와 마찬가지로 여러가지 시간관련 기능을 제공하고 있어. 대표적인게 os timer야. 임베디드 프로젝트를 하다보면 타이머를 자주 사용하게 되는데. 타이머를 하드웨어로 돌리려면 하드웨어 사용 설정하고, 주기 설정하고, 인터럽트 작성해주고, 혹시나 동작이 길면 global flag 설정해주고 인터럽트 외주에서 나머지 동작을 처리해야 하지. ㅋㅋㅋ 🤪😜😝😅😢😣😖😞😤😳 데이터시트도 읽어야 하는 건 덤이고 말이야 ㅋ 아주 그냥 대환장 파티. 그에 비해 os timer는 사용 설정하고 쓰면 끝이야. 매우 간편! 👇👇 struct k_timer my_timer; extern void my_expiry_function(struct k_timer *timer_id); k_timer_init(&my_tim..

[nRF52840 + Zephyr] #9. Memory Management

제퍼에서 제공하는 Memory management 기능은 여러 가지가 있는데 k_malloc()과 k_free() 정도만 알면 될 것 같아. 사실 나머지는 어디서 어떻게 사용되는지 잘 모르겠거든 ㅋㅋ 누가 잘 아는 사람은 알려주고 ㅎ k_malloc()과 k_free()는 특별한 사용법이 없어. malloc, free랑 동일하거든. 다만 prj.conf 에서 CONFIG_HEAP_MEM_POOL_SIZE(힙 크기) 만 설정해주면 끝이야. 굳이 이상한 예제를 만들어보자면 👇👇 //prj.conf CONFIG_HEAP_MEM_POOL_SIZE=1024 //main.c void main(void) { for(;;){ k_sleep(K_MSEC(1000)); uint8_t* ptr = k_malloc(100);..

[nRF52840 + Zephyr] #8. Thread Management

제퍼에서 thread를 굳이 나누자면 System thread와 User thread로 나눌 수 있어. System thread는 main()을 호출하는 main thread와 idle thread 그리고 workqueue thread 정도가 될거고 User thread는 말 그대로 유저가 만드는 거겠지. Thread 뭐 별거 없어. 생성하고 종료하고 멈추고 재시작하고 이게 전부. 이왕 이면 예제를 통해 살펴보는게 좋겠지? #define MY_STACK_SIZE 500 #define MY_PRIORITY 5 extern void my_entry_point(void *, void *, void *); K_THREAD_STACK_DEFINE(my_stack_area, MY_STACK_SIZE); struct..

[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] #6. KConfig

Kconfig는 제퍼 소프트웨어 설정에 관련이 있어. gpio나 usb처럼 하드웨어 드라이버를 로드하기 위한 설정도 포함되지. 👇👇 CONFIG_GPIO=y CONFIG_UART=y ... 이런 식으로 하드웨어 사용 설정을 하는데 하드웨어 peripharal 종류만큼 있겠지? 자주 사용되는 것들은 외우면 좋을 듯 하고. 소프트웨어 설정 쪽을 살펴보면 두 가지 정도가 있을 거 같아. 1. 제퍼 os 시스템 소프트웨어 2. 그 외 서브 시스템 소프트웨어 등등 k_malloc, k_free를 위한 heap 사이즈 설정이나 logging 모듈 사용처럼 os과 밀접하게 관련이 있는 것들이 있고 👇👇👇 modbus 처럼 어플리케이션 종류에 따라 사용이 결정되는 subsystem software가 있지. 👇👇 CON..

[nRF52840 + Zephyr] #5. 디바이스 트리 3

2023.05.11 - [임베디드 소프트웨어/Zephyr] - [nRF52840 + Zephyr] #4. 디바이스 트리 2 [nRF52840 + Zephyr] #4. 디바이스 트리 22023.05.09 - [임베디드 소프트웨어/Zephyr] - [nRF52840 + Zephyr] #3. 디바이스 트리 1 [nRF52840 + Zephyr] #3. 디바이스 트리 12023.05.03 - [임베디드 소프트웨어/Zephyr] - [nRF52840 + Zephyr] #2. 뭘 공부해야 하나? [nRF52840 engschool.tistory.com이제 실제로 디바이스 트리를 수정해보자구! printk를 사용해서 hello world!! ㅋㅋ 기본 blink app에서 printk("hello world"); 달..

반응형