3 분 소요

이 글은 ‘uC/OS-III: The Real-Time Kernel For the STM32 ARM Cortex-M3, Jean J. Labrosse, Micrium, 2009’를 번역한 글입니다. 오역이 있을 수 있으며, 발견하시면 github에 issue나 댓글 남겨주시기 바랍니다.

그림 2-1은 μC/OS-III 아키텍처와 하드웨어와의 관계를 보여준다. 하드웨어에는 UART(Universal Asynchronous Receiver Transmitters), ADC(Analog to Digital Converters), 이더넷 컨트롤러 등이 포함될 수 있다.

1. Software/Firmware
(1)Application Code : app.c, app.h

(2)CPU : *.c, *.h

(3)BSP(Board Support Package): bsp.c, bsp.h

(4)μC/OS-III - CPU Independent: os_cfg_app.c, os_type.h, os_core.c ...

(5)μC/OS-III - CPU Specific: os_cpu.h, os_cpu_a.asm, os_cpu_c.c

(6)μC/OS-III - CPU Specific: cpu.h, cpu_def.h, cpu_c.c ...

(7)μC/LiB - Libraries: lib_ascii.c, lib_math.c, lib_str.c ...

(8)Configuration Files: cpu_cfg.h, os_cfg.h ...
//Fig2-1
  • F2-1(1): Application Code 는 프로젝트 또는 제품 파일로 구성된다. 편의상 이것들은 간단히 app.c와 app.h라고 불리지만 응용 프로그램은 app.*라고 불릴 필요가 없는 파일을 얼마든지 포함할 수 있다. 응용 프로그램 코드는 일반적으로 main()을 찾을 수 있는 곳에 있다.

  • F2-1(2): 반도체 제조사들은 종종 그들의 CPU나 MCU 상의 주변기기들에 접근하기 위한 소스 형태의 라이브러리 함수들을 제공한다. 이러한 라이브러리들은 꽤 유용하고 종종 귀중한 시간을 절약한다. 이러한 파일들에 대한 명명 규칙이 없으므로 *.c와 *.h를 가정한다.

  • F2-1(3): Board Support Package(BSP)는 타겟 보드 상의 주변기기들에 대한 인터페이스를 위해 있는 코드이다. 예를 들어, 그러한 코드는 LED들을 켜고 끌 수 있고, 릴레이들을 켜고 끌 수 있고, 스위치들, 온도 센서들 등을 읽을 수 있다.

  • F2-1(4):μC/OS-III processor-independent 코드이다. ANSI C로 쓰였다.

  • F2-1(5): 이것은 특정 CPU 아키텍처에 적응된, 포트라고 불리는 μC/OS-III 코드이다. μC/OS-III은 μC/OS-II에 뿌리를 두고 있으며, μC/OS-III에 이용 가능한 45개 정도의 포트 대부분을 사용할 수 있다는 이점을 누린다. 그러나 μC/OS-III 포트는 μC/OS-III와 함께 작동하려면 작은 변경 사항이 필요할 것이다. 이러한 변경 사항은 689페이지의 부록 C “μC/OS-II에서 μC/OS-III로의 마이그레이션”에 기술되어 있다.

  • F2-1(6): Micriμm에서 우리는 CPU 기능을 캡슐화한다. 이 파일들은 인터럽트를 비활성화하고 활성화하는 함수이다. CPU_?? 데이터 타입들은 사용되는 CPU와 컴파일러 그리고 더 많은 함수들에 독립적이다.

  • F2-1(7): μC/LIB는 메모리 복사, 문자열 및 ASCII 관련 기능과 같은 공통 기능을 제공하는 일련의 소스 파일이다. 일부는 때때로 컴파일러가 제공하는 stdlib 기능을 대체하기 위해 사용된다. 파일은 응용 프로그램에서 응용 프로그램으로, 특히 컴파일러에서 컴파일러로 완전히 이동가능하도록 보장하기 위해 제공된다. μC/OS-III은 이러한 파일을 사용하지 않지만 μC/CPU는 사용한다.

  • F2-1(8):애플리케이션에 포함할 μC/OS-III 기능(os_cfg.h)을 정의하고, idle task stack size, tick rate, size of the message pool 등 μC/OS-III(os_cfg_app.h)가 예상하는 특정 변수 및 데이터 구조를 지정하고, 애플리케이션 프로그래머가 사용할 수 있는 μC/CPU 기능(cpu_cfg.h)을 구성하고, μC/LIB 옵션(lib_cfg.h)도 구성하는 데 사용된다.

Application code

Micriμm 이 제공하는 예제 코드는 다음과 같은 구조로 되어있다.

\Micrium
    \SoftWare
        \EvalBoards
            \<manufacturer>
                \<board_name>
                    \<compiler>
                        \<project name>
                            \*.*

\Micrium

여기에 Micriμm 이 제공하는 모든 소프트웨어 구성요소와 프로젝트가 배치된다.

\Software

모든 소프트웨어구성요소과 프로젝트가 있는 디렉토리다.

\EvalBoards

Micriμm에서 지원하는 evaluation 보드와 관련된 모든 프로젝트가 포함

\<manufacturer>

이 디렉토리의 이름은 evaluation board의 제조사이다. 예)Micrium

\<boardname>

이 디렉토리의 이름은 보드 이름이다. 예)uC-Eval-STM32F107

\<compiler>

이 디렉토리의 이름은 컴파일러의 이름이다.

\<project name>

이 디렉토리의 이름은 프로젝트의 이름이다.

\*.*

프로젝트 소스파일이다. main file은 선택적으로 app.로 불린다.

CPU Independent Source Code

\Cfg\Template

os_app_hooks.c는 μC/OS-III이 호출하는 훅 함수를 쓰는 방법을 보여준다. 구체적으로 이 파일은 8개의 빈 함수를 포함하고 있다.

os_cfg.h는 μC/OS-III의 어떤 기능들을 애플리케이션에 사용할지를 지정한다. 파일은 전형적으로 애플리케이션 디렉토리에 복사되고, μC/OS-III로부터 어떤 기능들이 요구되는지에 기초하여 편집된다. 669페이지의 부록 B “μC/OS-III Configuration Manual”을 참조한다.

os_cfg_app.h는 전형적으로 애플리케이션 디렉토리에 복사되고 애플리케이션 요구사항들에 기초하여 편집되는 구성 파일이다. 이 파일은 idle task stack, the tick rate, the number of messages available in the message pool 등을 설정할 수 있게 한다. 669페이지의 부록 B “μC/OS-III Configuration Manual”을 참조한다.

\Source

μC/OS-III에 대한 CPU 독립적인 소스 코드를 포함하는 디렉터리이다. 이 디렉터리의 모든 파일은 빌드에 포함되어야 한다. 필요하지 않은 기능은 os_cfg.h 및 os_cfg_app.h의 #define constants 값을 기반으로 컴파일된다.

Memory, message queue, mutex, pending, debugger, prioirty, statistic task, managing task, tick rate, delay for task, software timer etc.

CPU Specific Source Code

μC/OS-III 포트 개발자가 이러한 파일들을 제공한다. 또한, 355페이지의 제18장 “Porting μC/OS-III”를 참조하라.

\compiler

포트의 코드를 빌드하는 데 사용되는 컴파일러 또는 컴파일러 제조업체의 이름. “<” 그리고 “>”는 실제 이름의 일부가 아니다. 이 디렉토리의 파일은 μC/OS-III 포트를 포함한다. 이 파일의 내용에 대한 자세한 내용은 355페이지의 18장 “Porting μC/OS-III”를 참조하라.

os_cpu.h는 OS_TASK_SW()의 매크로 선언과 OSCtxSw(), OSIntCtxSw(), OSStartHighRdy()의 함수 프로토타입을 포함하고 있다.

os_cpu_a.asm은 적어도 OSCtxSw(), OSIntCtxSw(), OSStartHighRdy() 등의 기능을 구현하기 위한 어셈블리 언어 함수을 포함하고 있다.

os_cpu_c.c에는 포트별 훅 함수에 대한 C 코드와, task가 생성될 때 task의 스택 프레임을 초기화하기 위한 코드가 포함되어 있다.

μC/CPU, CPU SPECIFIC SOURCE CODE

μC/CPU는 공통적으로 있는 CPU 고유의 기능과 CPU 및 컴파일러 고유의 데이터 타입을 캡슐화한 파일로 구성된다. 355페이지의 18장 “포팅 μC/OS-III”를 참조한다.

μC/LIB, PORTABLE LIBRARY FUNCTIONS

μC/LIB는 특정 컴파일러에 묶여있지 않고 이식성이 뛰어난 라이브러리 함수들로 구성되어 있다. μC/OS-III는 어떠한 μC/LIB 함수도 사용하지 않지만, μC/OS-III와 μC/CPU는 다음과 같은 정의에 대해 lib_def.h가 있다고 가정한다: DEF_YES, DEF_NO, DEF_TRUE, DEF_FALSE, DEF_ON, DEF_OFF 등.

Reference

책 링크

댓글남기기