[TT] STM32 CubeIDE freertos + printf 문제 해결

아래와 같은 CubeIDE 버젼 사용중입니다.

STM32CubeIDE
Version: 1.2.1

CubeIDE Ver

 

간단하게 STM32G4 테스트 하기 위해 NUCLEO-G474RE보드를 사용 했습니다.

freertos옵션없이 생성된 코드에서는 uart printf가 정상 동작 하지만

freertos옵션을 enable하여 생성된 코드에서 printf가 정상 동작 하지 않고 hardfault로 빠져 버립니다.

 

검색 중에 다음과 같은 내용이 있어서 "Memory Management scheme" 항목에서 heap_5에서 heap_3로 변경하니 문제가 해결 되었습니다.

 

AWS 관련 문서

 

CubeIDE 설정 화면

 

관련 내용 링크 입니다.

https://docs.aws.amazon.com/ko_kr/freertos-kernel/latest/dg/troubleshooting.html

 

https://docs.aws.amazon.com/ko_kr/freertos-kernel/latest/dg/troubleshooting.html

 

docs.aws.amazon.com

freertos 메모리 관리 방법

https://docs.aws.amazon.com/ko_kr/freertos-kernel/latest/dg/heap-management.html#memory-allocation-schemes

 

https://docs.aws.amazon.com/ko_kr/freertos-kernel/latest/dg/heap-management.html#memory-allocation-schemes

 

docs.aws.amazon.com

 

[GD] EEPROM vs FRAM vs EERAM

검색 중에 재미난 디바이스가 있어서 소개 드립니다.

 

보통 메모리 특성은 아래와 같습니다.

 

메모리 특성

EEPROM은 작은 용량의 데이터를 반복적으로 많은 횟수로 기록 할때 적합한 디바이스 입니다.

단점은 쓰기가 느리다는 겁니다. 

RTOS상에서 구현하다 보면 5ms~15ms 까지 delay상황이 연출 되는데,

단순히 쓰기 완료을 기다릴지, 큐등으로 버퍼링 해서 독립적으로 관리 할지 여러가지 선택 상황에 놓이게 됩니다.

제일 좋은건 짧은 write시간으로 고민 없이 지나가는 겁니다.

그래서 위의 표와 같이 FRAM이 나오게 되고 이런 고민을 없게 만듭니다.

하지만 가격이 비싸죠.

 

자동차도 하이브리가 있듯이 EEPROM도 하이브리드 형태의 디바이스가 Micochips에서 나왔네요.

아래 영상 보면 그냥 이해가 될겁니다.

 

전원이 안정된 상태에서는 SRAM처럼 고속 write을 지원하고, 

전원이 off되면 캐패시터의 남아 있는 전기를 활용해서 SRAM내용을 EEPROM에 기록 하는 형태 입니다.

디바이스 마다 틀리겠지만 약 33uF Capacitor을 권장 하네요. small이라면서... -_-;; 

 

참고로 FRAM 소개 자료도 링크로 남겨둡니다.

https://www.fujitsu.com/global/documents/products/devices/semiconductor/fram/overview/brochure/AD05-00033-11K.pdf

[BLE] SEGGER Studio CMSIS Configuration Wizard / sdk_config.h

노르딕 SDK는 여러 컴파일러를 지원 합니다.

기존 상용 컴파일러를 지원 하던 중에( Keil, IAR ) 현재는 SEGGER사(JLink 만드는 독일 회사)와 계약을 했는지

nRF 씨리즈에 한정하여 무료로 사용 할 수 있습니다.

 

SDK 업데이트 하면서 기존 Keil버젼은 더 이상 지원하지 않아서 SEGGER로 변경 해보았는데,

생각 보다 괜찮습니다.

JLink 기술의 원천 회사 라서 그런지 괴랄하게 빠른 flash download속도와 디버깅 속도를 보여 주네요.

 

아무튼...

SDK 사용중에는 sdk_config.h을 자주 건드리게 되는데, 기존에 Keil의 경우 GUI Wizard형식으로 보기가 편하게 

되어 있습니다.

이게 SEGGER에서는 지원하지 않는 줄 알고, 우울해지려고 할 타임에 검색 해보니 플러그인 형태로 지원 하는게 있네요.

 

설정 하는 법 유튜브 링크

https://www.youtube.com/watch?v=b0MxWaAjMco&list=PLx_tBuQ_KSqGHmzdEL2GWEOeix-S5rgTV&index=4

 

Keil 컴파일러 sdk_config wizard

 

 

SEGGER sdk_config wizard

 

설정법

File-Open Studio Folder..-External Tools Configuration 에서 아래 문구를 넣어 주면 됩니다.

SEGGER sdk_config wizard 설정법

<tools>

  <!-- PC-lint - http://www.gimpel.com/html/pcl.htm -->

  <if host_os="win">
    <item name="Tool.PClint">
      <menu>&amp;PC-lint (Unit Check)</menu>
      <text>PC-lint (Unit Check)</text>
      <tip>Run a PC-lint unit checkout on the selected file or folder</tip>
      <key>Ctrl+L, Ctrl+P</key>
      <match>*.c;*.cpp</match>
      <message>Linting</message>
      <commands>
        &quot;$(LINTDIR)/lint-nt&quot; -v -incvar(__CW_ARM) -i$(LINTDIR)/lnt co-gcc.lnt $(DEFINES) $(INCLUDES) -D__GNUC__ -u -b +macros +macros -w2 -e537 +fie +ffn -width(0,4) -hF1 &quot;-format=%f:%l:%C:\s%t:\s%m [-e%n]&quot; &quot;$(InputPath)&quot;
      </commands>
    </item>
    <item name="Tool.CMSIS_Config_Wizard" wait="no">
      <menu>&amp;CMSIS Configuration Wizard</menu>
      <text>CMSIS Configuration Wizard</text>
      <tip>Open a configuration file in CMSIS Configuration Wizard</tip>
      <key>Ctrl+Y</key>
      <match>*config*.h</match>
      <message>CMSIS Config</message>
      <commands>
        java -jar &quot;$(CMSIS_CONFIG_TOOL)&quot; &quot;$(InputPath)&quot;
      </commands>
    </item>
  </if>

</tools>

 

추가로

sdk_config.h 설정에 관한 문법 설명 입니다.

https://www.keil.com/pack/doc/CMSIS/Pack/html/configWizard.html

 

Configuration Wizard Annotations

Annotation Rules Configuration Wizard Annotations consist of annotation items and annotation modifiers. They create GUI-like elements in IDEs for configuration files (see Tool-specific display). Using a GUI-like approach makes it easier for the user to che

www.keil.com

 

'BLE' 카테고리의 다른 글

[BLE] nRF5 Offline Document Download  (0) 2020.02.05
[BLE]nRF52832 DCDC Mode Enable  (0) 2020.02.05