다중 스레드 환경 다루기

기술노트 95292

아키텍처:

ARM

컴포넌트:

compiler

업데이트:

2021-05-11 오전 8:42

소개

다중 스레드 환경을 사용할 때, 다중 스레드를 지원하는 표준 라이브러리 사용이 필요합니다. (예를 들어 malloc()을 호출하는 경우)

해결방안

표준 라이브러리에서 다중 스레드 지원을 사용할 수 있습니다. Development Guide 에서 'Enabling Multithread Support' 챕터를 확인하세요.

검증

시스템/파일 lock 인터페이스를 구현한 뒤, 예로 malloc/free를 호출할 때 시스템 lock 함수들이 호출 되는 것을 확인 하는 것이 가능합니다. *Mtxinit, *Mtxlock 그리고 *Mtxunlock 함수 내에 중단점을 설정하고 malloc/free의 호출 단계로 넘어가세요.

RTOS 사용시

실시간 운영체제(RTOS) 사용 시, 가장 먼저 고려해야 할 것은 다중 스레드 지원을 구현해야할 이유가 있는지 여부입니다.

많은 RTOS 벤더들은 이미 상기의 것들을 구현해놓았습니다. 예를 들어:

  • Micrium uC/OS-II 와 III: uC/OS-III User's Manual의 "Thread Safety of the Compiler’s Run-Time Library"챕터를 참고하세요.
  • Segger embOS": embOS CPU & Compiler specifics의 "Thread-safe system libraries"챕터를 참고하세요.
  • Express Logic's ThreadX: ThreadX 와 응용프로그램에 TX_ENABLE_IAR_LIBRARY_SUPPORT 키워드를 정의하는 것에 주의하세요.
  • 또한 다른 RTOS:  에서 구현된 자체 heap을 사용하기를 권장합니다.
    • Freescale MQX 의 경우 [_mem_alloc].
    • Express Logic ThreadX 의 경우 [tx_byte/block_allocate]

RTOS 와 C++ 사용시

다중-스레드 RTOS와 C++ 함께 사용시 다음 컴파일 옵션

--guard_calls

이 사용되어야 합니다. IDE상에, Project -> Options -> C/C++ Compiler -> Extra Options 에서 옵션을 지정할 수 있습니다.

그 이유는 C++의 생성자와 소멸자는 여러 RTOS 스레드에 의해 호출될 수 있기 때문입니다.

IAR Embedded Workbench for ARM 6.60 (혹은 상위버전) 사용시

IAR Embedded Workbench for ARM version 6.60 (혹은 상위버전) 사용시 다음의 링커 옵션을 활성화 해야합니다:

--threaded_lib

Project -> Options -> General Options -> Library Configuration -> Enable thread support in the library IDE 옵션을 통해 활성화 됩니다.

버전 6.40 to 6.50 사용시

Project -> Options -> Linker -> Extra Options에서 링커 옵션의 숫자를 추가하여 다중 스레드 지원을 활성화 합니다.

--redirect 옵션은 다음의 파일에 기술되어 있습니다.

<DLib_Threads.h>

RTOS 구현을 사용하는 경우에도, 이러한 옵션은 추가되어야 합니다.

다음의 링크를 확인하세요 - DLib_Threads.h information, 예제 프로젝트 입니다: Example project (version 6.50.6).zip.

 

모든 제품 이름은 해당 소유자의 상표 또는 등록 상표입니다.

죄송하지만, 당사 사이트에서는 Internet Explorer를 지원하지 않습니다.보다 편안한 사이트를 위해 Chrome, Edge, Firefox 등과 같은 최신 브라우저를 사용해 주시길 부탁드립니다.