Don't think! Just do it!

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

Zephyr 9

[사기꾼 프로젝트] 하드웨어 주요 부품 선정

2023.11.03 - [프로젝트] - [사기꾼 프로젝트] 하드웨어 컨셉 [사기꾼 프로젝트] 하드웨어 컨셉 지난 글 2023.11.02 - [프로젝트] - [Project] 프로젝트 구조 [Project] 프로젝트 구조 2023.10.27 - [프로젝트] - [Project] 신규 프로젝트 기획! New Project!! [Project] 신규 프로젝트 기획! New Project!! 위즈네트에서 engschool.tistory.com 음.. 일단은 기본은 Serial to Ethernet이잖아? 기본적으로 필요한 건 uart 와 ethernet이지. uart가 없는 mcu는 없으니까 패스. Ethernet의 경우는 몇 가지 경우가 있지. 첫번째 MCU에서 ethernet mac 을 가진 경우에는 외부에..

프로젝트 2023.11.08

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

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

[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] #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] #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] #0. nRF and Zephyr

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

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 사용을 못하기도..

반응형