Don't think! Just do it!

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

임베디드 소프트웨어 47

FreeRTOS + Lwip socket 갯수 조정

STM cube에서 rtos + lwip 서버를 돌릴 때 접속가능한 클라이언트 갯수를 조정해보려고 ㅎ 상당히 간단한데 난 엄한 이유로 개고생했어 ㅋ 다른 사람들은 나처럼 고생하지 말라고!! 🤬🤬🤬 간단하게 설명하면 MEMP_NUM_TCP_PCB MEMP_NUM_TCP_PCB_LISTEN MEMP_NUM_NETCONN 이 세가지를 조정하면 끝이야. 내용이 중복되는 느낌이지만 암튼 이것들이 클라이언트의 접속 갯수에 영향을 미쳐. 설정은 아래와 같이 👇👇👇👇 총 소캣 수 = 클라이언트 수 + 1 서버니까 listen 소켓 하나 + 클라이언트용 소켓들로 총 소켓 수가 나오겠지? 난 3개의 클라이언트의 접속을 허용할거니까 +1해서 4로 설정했어. 👇👇👇👇 간단하지? ㅋㅋㅋㅋ 그런데 내가 고생했던 부분은 여기가 아..

[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..

STM32CubeMX 와치독 디버그 옵션

그냥 이건 간단한 팁 같은건데 ㅎㅎ ST-LINK로 디버깅할 때 와치독이 Enable되어 있으면 Break point 걸릴 때 리셋이 되버리잖아. 엄청 짜증나지. 그래서 보통 와치독을 Disable하거나 주석처리하고 디버그를 했었어. 그래서 실수도 많이 하고 말이지. Debug configuration에서 이걸 해결해주는 옵션이 있더라고;;; 이거 체크해주면 와치독이 활성화된 상태에서도 break point를 걸면서 디버깅을 할 수가 있어 ㅋ 나만 몰랐나? ㅎㅎㅎ 해피 코딩~ 아디오스!

[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..

반응형