Don't think! Just do it!

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

임베디드 소프트웨어 47

[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"); 달..

[nRF52840 + Zephyr] #4. 디바이스 트리 2

2023.05.09 - [임베디드 소프트웨어/Zephyr] - [nRF52840 + Zephyr] #3. 디바이스 트리 1 [nRF52840 + Zephyr] #3. 디바이스 트리 12023.05.03 - [임베디드 소프트웨어/Zephyr] - [nRF52840 + Zephyr] #2. 뭘 공부해야 하나? [nRF52840 + Zephyr] #2. 뭘 공부해야 하나? 2023.05.01 - [임베디드 소프트웨어/Zephyr] - Nordic NRF52840 + Zephyr 개발 환경 구축 Nordicengschool.tistory.com지난 번에는 blinky 앱에서 디바이스 트리의 노드를 어떻게 사용했는지 간단하게 살펴봤어. 이 번에는 조금더 들어가서 unit address하고 chosen에 대해 알아..

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

2023.05.03 - [임베디드 소프트웨어/Zephyr] - [nRF52840 + Zephyr] #2. 뭘 공부해야 하나? [nRF52840 + Zephyr] #2. 뭘 공부해야 하나? 2023.05.01 - [임베디드 소프트웨어/Zephyr] - Nordic NRF52840 + Zephyr 개발 환경 구축 Nordic NRF52840 + Zephyr 개발 환경 구축nrf52840을 위한 zephyr 개발 환경은 vscode에 nrf extension을 설치하는 방식으로 구축해. 공 engschool.tistory.com 저번 글에서 적어도 3가지는 공부해야 한다고 그랬어. Device tree, Kconfig, zephyr kernel api. 이 중에 하드웨어 설정과 관련이 있는 Device tre..

[nRF52840 + Zephyr] #2. 뭘 공부해야 하나?

2023.05.01 - [임베디드 소프트웨어/Zephyr] - Nordic NRF52840 + Zephyr 개발 환경 구축 Nordic NRF52840 + Zephyr 개발 환경 구축 nrf52840을 위한 zephyr 개발 환경은 vscode에 nrf extension을 설치하는 방식으로 구축해. 공식 가이드에도 이렇게 나와있으니까 고민하지 말고 따라왓! 우선 아래 링크에서 nrf connect for desktop을 설치!👇 engschool.tistory.com 아래는 저번 시간에 보드에 올리고 테스트 했던 blinky app의 main.c 파일 내용이야. 👇👇 적당히 주석을 달아놨으니 당장 모르겠어도 한 번 주~욱 살펴보라굿. #include #include #define SLEEP_TIME_MS..

[nRF52840 + Zephyr] #1. 개발 환경 구축

nrf52840을 위한 zephyr 개발 환경은 vscode에 nrf extension을 설치하는 방식으로 구축해. 공식 가이드에도 이렇게 나와있으니까 고민하지 말고 따라왓! 우선 아래 링크에서 nrf connect for desktop을 설치! 👇 https://www.nordicsemi.com/Products/Development-tools/nRF-Connect-for-Desktop/Download#infotabs nRF connect for desktop을 통해서 SDK 등 여러가지 nrf 개발용 소프트웨어를 설치할 수 있어. 그리고 아래 링크에서 nrf command line tool 설치! 👇👇 이건 segger debugger 디바이스 드라이버가 들어 있는 놈이지! 플래시에 프로그램하거나 디버..

[nRF52840 + Zephyr] #0. nRF and Zephyr

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

CCMRAM 사용하기

지금 사용하고 있는 stm32f407vg는 sram 192kbytes 있다고 되어 있는데; 빌드해보니 CCMRAM이라는 녀석은 사용을 안하고 있더라고? 이건 집에서 만든 예제라 사용량이 여유가 있지만 내가 하고 있는 실제 프로젝트에서 RAM 사용량이 90퍼센트가 넘어가다보니 CCMRAM 사용을 안할 수가 없더라고 ㅎㅎㅎ 램 사용량 빨간거 보면 참 ㅋㅋㅋ 생각이 많아지지 ㅋㅋ 저 영역을 사용하는 건 간단해. 👇 __attribute__((section(".ccmram"))) uint8_t buffer[1024]; 앞에다가 __attribute__((section(".ccmram"))) 이라고 선언만 해주면 됨! 그런데 귀찮으니까 메크로 고고! #define CCMRAM __attribute__((secti..

LWIP TCP Send가 느릴 때

stm32f407vg + freeRTOS 조합에서 lwip을 사용하고 있는데 TCP Send에 문제가 있는 걸 발견했어! 왠지 모르게 조금 늦게 패킷이 나가더라구. 작은 패킷은 상관없는데 약간 큰 패킷(그래봐야 1024bytes)은 바로 나갈 때도 있고 딜레이가 생길 때도 있고 하더라구. 한.. 0.5초에 한번쯤 나가는 느낌? 해결하려고 신나게 뻘짓을 했지. TCP Thread 스택 크기가 작아서 그런가? 하고 TCP_THREAD_STACKSIZE도 4096 Word(16k)까지 늘려봐도 안되고~ 혹시 Segment 때문에 그런가 싶어서 536 bytes -> 1460 bytes(최대값)으로도 변경하고 Sender buffer도 이빠이 늘려보고~ Queue length도 늘리고~ 해봐도 증상에 변함이 없..

vApplicationStackOverflowHook()

스택 오버플로우는... 많은 도움을 받고 있는 곳(사이트)이지만 ㅋㅋㅋ 내 프로그램에서 발생한다면 지옥인거지 ㅋㅋ 임베디드에서는 딱히 볼일이 없었는데 요즘은 RTOS 때문에 신경써야 할 부분이 되었어 ㅋㅋ 일부는 RTOS를 사용하더라도 malloc, free는 절대 사용안하고 task의 stack을 과도하게 설정한다던지 하는 방법으로 스택 오버플로우를 피해왔지만 그건 근본적인 해결책이 아니지 ㅋㅋㅋ 어차피 고급 라이브러리들 (lwip, usb stack, mbed tls, file system 같은 고귀한 분들) 은 malloc, free를 사용하고 있어서 Stack overflow를 피할수가 없어 ㅎ 그러니까 괜히 쓸데없는 노력하지 말고 malloc, free 그리고 heap과 stack 구조를 받아들..

반응형