[세미나] ST 저전력 MCU소개 및 IAR workbench를 사용한 실무 디버깅
오늘은 기술 세미나에 다녀왔다.
여의도는 처음가봐서 기대를 많이 했는데 오늘 너무 덥고 시간이 촉박했어서 크게 구경을 못했다.
이번 세미나에서는 st에서 나오신 연사님께서 초저전력 MCU인 stm32u3와 관련된 기술에 대해 간단하게 소개해 주셨고, iar세션에서 workbench와 stm32u3가 들어간 보드를 사용해서 디버깅과 저전력 모드에 대한 실습을 진행했다.
STM32U3 : ST Korea
이 세션에서 기억에 남았던 부분은 STM32U3에서 사용된 저전력 기술이었다.
Near Threshold Design
Near Threshold design이라는 기술이었는데 CMOS의 threshold와 아주 근접한 그 이하 전압에서도 누설전류 느낌으로 동작하기 때문에 이 특징을 사용해서 더 낮은 전압으로 MCU를 사용할 수 있게하는 기술인것 같다.
이 전압을 NTV(Near-Threshold-Volatage)라고하는것 같은데 하여간 이로인해 저전력으로 MCU를 동작시킬 수 있는 반면 아래와 같은 취약점이 있다고 한다.
- 성능한계
- 누설전류의 느낌으로 사용되므로 저전력 상태에 들어갔을때는 이 기술을 사용하지 않은 MCU보다 전력소모가 클 수 있다.
- 동작 온도 범위가 제한적이다. (다른 MCU는 -40~+85,105 정도인데 여기까지 안나오는듯 하다.)
그런데 STM32U3는 이런 단점을 개선해서 일반 MCU와 비슷하게 사용할 수 있으면서 저전력의 장점을 가진다는게 이 부분의 골조였던것 같다.
Benchmark
이 외에도 성능 지표로 ULP 벤치마크, Core mark 등을 들었다. ULP는 전력 효율 관련된 벤치마크라고 잠깐 들은것 같고, core mark는 잊어버려서 구글에 검색해보니 MCU 성능을 측정하는 벤치마크라고 한다.
Security
요즘에는 PSA, SESIP등의 보안인증기관이 정의한 보안 수준을 맞추도록 규제가 생기고 있어서 임베디드쪽으로도 보안 요구사항이 많이 늘었다고 한다.
그래서 smt32u385에는 보안에 관련된 기능이 HW수준에서 지원된다고 한다.
보안에 관련된 기술이 여러가지가 있었는데 나중에 임베디드 보안 관련해서 공부해봐도 할게 많겠다는 생각이 들었다.
workbench Debbuging : IAR
workbench을 써본적은 있는데 사실 그냥 코드 편집기로서 사용을 많이 했지 이렇게 좋은 디버깅 기능이 많을지는 상상도 못했다.
난이도도 적당히 따라가기 쉽고 연사님께서 굉장히 친절하게 설명해주시고 실습을 도와주셨다.
원래는 workbench를 좀 어려워했었는데 이번 기회에 많이 익숙해진것 같다.
MISRA-C
코드를 짜다보면 같은 로직을 다양한 방법으로 작성할 수 가 있어서 어떻게 하는게 좋은 방법일지에 대해 고민하는 일이 많았다.
또 이게 일반 SW와 임베디드 SW는 약간 신경써야하는 부분이 다르기 때문에 기존에 생각하던 방식과 다른 방식이 더 나은 방법인 경우도 많았다.
그래서 요즘 임베디드C에는 표준이나 가이드가 없나 좀 고민이 있었는데 마침 오늘 MISRA라는 키워드를 들었다.
MISRA-C 는 임베디드 시스템을 위한 C 언어 코딩 표준으로 원래는 자동차 산업에서 사용되다가 점점 산업 전반에서 사용되는것 같다.
하여간 신뢰성 있는 시스템에 대한 인증과정에서 MISRA 규칙을 컴파일 단계에서 검증해주는 tool을 사용했는지도 기준이 된다고 한다.
현 시점에서는 다수의 프로젝트다 MISRA C:2012 + Amendment 1~3으로 개발중이라고한다.(최근에는 MISRA C 2023 대응도 필요해지고 있는것 같다.)
하여간 IAR에서는 c stat이라는 정적 분석 도구를 통해 규칙에 위반되는 코드가 있는지 검사해주고 리포트도 만들수 있다.🤯
+) 그리고 이 외에도 c run 이라고 런타임 분석 도구도 있었는데, 이거는 솔직히 잘 기억이 안나지만 overflow나 메모리 영역을 침범한경우 해당 코드 위치를 잡아주고 왜 오류가 났는지 보여주는 런타임 분석 기능을 제공한다.
Debug features
이 외에도 IAR workbench에서 제공되는 여러 디버깅 기능이 있었다.
일단 대부분 View로 들어가면 해당 디버깅 기능을 볼 수 있는 타일을 열 수있었다.
기억나는것만 대충 추려보면
- live watch : 변수추적, global만 가능, 시스템에 영향줌(주의)
- watch : 변수추적, local도 가능
- stack : 스택 모니터링
- memory : 메모리 상태 확인가능
- Disassembly : 어셈블리로 디버깅가능
이거 말고도 하여간 더 많은데 하여간 하나같이 너무 유용해보였다.
+) 오 그리고 예전에 시스템 소프트웨어 배울때 RISC instruction이랑 thum instruction뭐 이런걸 배웠던게 기억나게 하는 부분도 있었다.
map파일에서 arm instruction은 주소를 even으로, thumb은 odd로 표현해서 둘을 구분한다고 한다. 하지만 실제 물리적 메모리 주소는 둘다 even주소에 위치해 있었던것같다.
Break Point
이건 종류가 두개가 있었다.
Code Break Point
이건 흔히 알고있는 중단점찍어서 중간에 멈추는 break point이다.
중단점 하나마다 레지스터에 등록해야하므로 무한정 사용할수는 없음에 주의해야한다고한다.
Log Break Point
이건 원리는 잘 기억안나는데 하여간 디버그 핀중 하나를 써서 성능에 영향을 주지 않고 중단점 부분에 로그를 찍는다. (코드 수행을 멈추지 않는다.)
디테일한 데이터 디버깅 보다는 인터럽트 핸들러 수행 확인 등 함수 수행여부 정도 확인하는데 도움이되는것같다.
Timeline Window
이거는 디버거랑 같이 사용할때 쓸수 있는 타임라인 창인데 시각적으로 잘보여서 데이터 디버깅하기 좋다.
참고로 타임라인 화면에서 저기 OFF되어있는 부분에 우클릭하고 Enable을 체크해줘야 사용이 가능하다.
마무리
끝내고 나왔더니 이런 수료증도 주셨다ㅎㅎ
여러모로 재미있는 키워드들을 많이 얻어가는 유익한 시간이었다.
댓글남기기