200 likes | 885 Views
References : Embedded Recipes 출 )Corner Book 저 ) 히언 - MicroC /OS-II 실시간 커널 출 ) 에어컨 저 ) JEAN J. LABROSSE - 당근이의 AVR 갖구 놀기 http://cafe.naver.com/carroty/40171 Embedded Systems 에의 RTOS 포팅 Intel 계열로의 포팅 실제 (x86 Core) 삼성 소프트웨어 멤버쉽 Digital System Design Lab 김종수.
E N D
References: • Embedded Recipes 출)Corner Book 저)히언 • -MicroC/OS-II 실시간 커널 출) 에어컨 저) JEAN J. LABROSSE • -당근이의 AVR 갖구 놀기 http://cafe.naver.com/carroty/40171 • Embedded Systems에의 RTOS포팅Intel 계열로의 포팅 실제 (x86 Core) • 삼성 소프트웨어 멤버쉽Digital System Design Lab 김종수 Porting US/OC-II On ATmega128 2010. 9. 7 조 승훈
What is Porting • Porting의 광의 • 한시스템에서 구현되고 있는 기능을 다른 환경의 시스템에서도 같은 기능을 수행하도록 조정해 주는 작업 • Ex) 집에서의 밥짓기와 야외에서 밥짓기의 차이 • Porting의 협의 • 한 시스템에서 사용되는 프로그램을 다른 시스템에서도 사용 할 수 있도록 시스템에 의존적인 코드만을 바꾸는 작업 • Ex) 8051의 LED 제어 프로그램을 ATmega128에 이식 시, 플랫폼에 의존적인 assembly code만 수정하고 C코드는 그대로 놔두는 것 (C언어의 높은 이식성) 다른 환경에서 다른 방법으로 같은 결과를 유도 방법 A 동일한 자원 동일한 결과 방법 B
O/S Porting • OS를 이루는 대부분의 코드들은 이식 가능한 C언어로 구현 • CPU마다 다른 구조의 아키텍쳐 (레지스터, 인터럽트, 타이머 등)을 가지고 있으므로 이 부분을 사용하는 코드들을 바꾸면 Porting 가능 • OS가 포딩이 되면 OS 위에서 동작하는 어플리케이션 프로그램은 플랫폼 독립적으로 수행 가능 • OS Porting을 수행하기 위해서는 시스템의 하드웨어 구조, 컴파일러, 프로그래밍에 깊은 지식이 필요
O/S Porting Applications Operation System : Kernel (H/W Independent Code) H/W Dependent Code (Port) 변경 H/W Dependent Code (Port) Software Hardware System A System B
What need for O/S Porting • Host 측 필요장비 • Host와 Target이 PC인 경우 (개발과 테스트를 같은 플랫폼 상에서 수행) • 컴파일러, 어셈블러, OS Code, Application Code 등이 필요 • Host가 PC이고, Target이 독립적인 다른 시스템인 경우 • 크로스 컴파일러혹은 PC에서 동작하는Target프로세서의 컴파일러를 구한다. • 개발 환경에서 만들어진 이미지 파일을 Target에서 동작하는 Binary Image의 형태와 주소를 갖도록 바꿔주는 프로그램인 Binary Utility를 구한다. • (Serial Data를 처리하여 보여 줄 수 있는 통신 에뮬레이터를 구한다.) Ex) 이야기, 새롬 데이터맨, Teraterm등
What need for O/S Porting • Target 측 필요 장비 • JTAG • 플랫폼 • O/S Porting을 위한 약간의 메모리 • O/S를 동작시킬 Processor • 기타 원하는 작업을 위한 디바이스
Whatneed for UC/OS-II Porting • 프로세서가 재진입이 가능한 코드를 생성하는 컴파일러 • C에서 인터럽트를 제어 할 수 있어야 함 • 프로세서는 인터럽트를 지원하거나 비슷한 기능을 수행 할 수 있어야 함 • 프로세서가 일정한 Timer 기능의 인터럽트를 제공 할 수 있어야 함 • 프로세서는 하드웨어적, 소프트웨어적 Stack을 지원 해야 함 • Stack이나 Memory에서 SP와 다른 CPU 레지스터를 불러오고 저장하는 Instruction을 지원해야 함 • Data Types의 설정이나 critical section에 접근하기 위한 매크로로 사용되는 인터럽트 금지와 해제의 구현에 주의해야 함
UC/OS-II Software Architecture Applications UC/OS-II Configuration (Application Specific Code) OS_CFG.h INCLUDES.h UC/OS-II (Processor Independent Code) OS_CORE.cOS_Q.c OS_MBOX.cOS_SEM.c OS_MEM.cOS_TASK.c OS_TIME.c uCOS_II.cuCOS_II.h UC/OS-II Port (Processor Specific Code) OS_CPU.H OS_CPU_A.asm OS_CPU_C.c HARDWARE (Timer, Interrupt, etc)
Porting for UC/OS-II on ATmega128 • http://micrium.com/page/home접속 (UC/OS-II의 제작자 홈페이지) • 메뉴 중 Downloads → Ports 선택 (H/W 종속적인 코드를 지원 : 포트) • Atmel -> AVR 선택 (Atmega카테고리에는 IAR 컴파일러 코드가 있음) 가장 최신 버전인 V.270 다운로드
Porting for UC/OS-II on ATmega128 • Email과 Password 입력 (Email – 354121@naver.com, PSW : hm354121) • 압축 파일의 압축을 푼다. App Kernel App Config Port H/W 개발자가 지원하는 예제 어플리케이션 H/W 종속적인 코드 (Port)
Porting for UC/OS-II on ATmega128 • 아래 다섯 개의 파일을 새 폴더 port에 복사 한다. • STK500 폴더의 아래 파일을 새 폴더 test에 복사 한다.
Porting for UC/OS-II on ATmega128 • UC/OS-II Kernel을 구한다. • MicroC / OS-II real time Kernel 부록 CD v2.5 (에어컨, JEAN J. LABROSSE) • http://micrium.com/page/downloads/os-ii_evaluation_download v2.90 • Products -> UC/OS-II (kernel) -> 좌측 UC/OS-II Evaluation Download • 아래 파일을 새 폴더 source에 복사 한다. App Kernel App Config Port H/W OR UCOS-II Kernel v2.52 UCOS-II Kernel v2.90
Porting for UC/OS-II on ATmega128 • UCOS-II라는 새 폴더를 만들고 커널이 들어있는 source 폴더와port 파일이 들어 있는 port 폴더를 이동 시킨 후, UCOS-II 폴더를 C:\로 이동한다. • 예제 어플리케이션이 있는 test 폴더를 C:\로 이동한다.
Porting for UC/OS-II on ATmega128 • Kernel 버전에 따라 예제 어플리케이션을 선택해야 한다. • 확장자가 252로 끝나는 파일은 2.52 버전의 kernel을 위한 파일이다. • 이 파일을 쓰기 위해서는 .252를 지워주면 된다. • 그 외의 파일들은 2.90 버전의 kernel을 위한 파일이다. • Port 파일 및 어플리케이션 파일의 수정을 위해 Winavr에 포함되어 있는 Winavr노트패드를 실행시킨다.
Porting for UC/OS-II on ATmega128 • File – new – project 를 실행하여, test 폴더에 새로운 이름으로 프로젝트를 생성한다. • 생성된 프로젝트에 이전에 복사한 source, test, port의 파일을 모두 불러온다. • 프로젝트 이름에 우 클릭을 한 후, add new folder 선택 • Add files를 선택하여 파일을 import 해 온다. • UC/OS-II의 소스 파일들의 경로를 수정하기 위해 makefile을 연다. • Makefile의 UCOSDIR과 PORTDIR을 아래와 같이 수정 한다. • 이 후, DIRAVR을 Winavr이 설치 된 폴더로 수정 한다.
Porting for UC/OS-II on ATmega128 • 그 다음, os_cfg.h파일을 열어 CPU_CLOCK_HZ를 자신의 환경으로 수정한다. (연구실 보드는 모두 16Mhz) • Test.c파일의 AvrInit() 함수의 UBRR0L을 수정하여 적당한 Baud Rate를 설정한다. • Kernel 버전이 2.52라면 Baud rate를 19200 이상으로 설정 한다. (버그 때문)
Porting for UC/OS-II on ATmega128 • 마지막으로 uCOS-II.c파일을 열어 아래와 같이 UC/OS-II의 소스 파일들을 대소문자를 잘구분하여 include 한다. • WinAVR의 makeall을 이용하여 컴파일을 하면 test.hex 파일이 생성 된다.
Conclusion • UC/OS-II를 Porting하기 위해 필요한 작업 • 기본적으로 Target에 프로그램을 작성및 Download 할 수 있는 환경 설정 • OS 소스들을 구함 • OS는 하드웨어에 상관없이 수행되는 일종의 알고리즘과 같은 것 • OS는 App와 같이 컴파일 되므로 이들 사이의 함수 연결이라든지 TASK가 OS를 이용 할 때의 제약들을 정의하기 위해 Configuration이 필요 (UC/OS-II의 OS_CFG.h , INCLUDES.h) • OS에서 이용하는 하드웨어 자원들의 경우 접근하는 방식이 시스템마다 다르므로 시스템에 맞추어 설정해야 함 (port 파일을 구하는 것으로 대체했음) (OS_CPU.h , OS_CPU_A.asm , OS_CPU_C.c) • 이 Processor Dependent Code를 잘 바꾸어 주는 것이 O/S Porting의 전부 • UC/OS-II에서는 위의 세 파일에 Interrupt, Timer, Context Switch 등을 구현 • App의 작성과 OS와 App를 같이 컴파일하기 위한 makefile의 작성 • 실제 target에 Download