2010.9.7_Porting_usos-II_for_Atmega128

Download Report

Transcript 2010.9.7_Porting_usos-II_for_Atmega128

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?
What is Porting
• Porting의 광의
– 한 시스템에서 구현되고 있는 기능을 다른 환경의 시스템에서도 같은 기능을
수행하도록 조정해 주는 작업
• Ex) 집에서의 밥짓기와 야외에서 밥짓기의 차이
다른 환경에서
다른 방법으로
방법 A
동일한 자원
동일한 결과
방법 B
같은 결과를
유도
• Porting의 협의
– 한 시스템에서 사용되는 프로그램을 다른 시스템에서도 사용 할 수 있도록
시스템에 의존적인 코드만을 바꾸는 작업
• Ex) 8051의 LED 제어 프로그램을 ATmega128에 이식 시, 플랫폼에 의존적인
assembly code만 수정하고 C코드는 그대로 놔두는 것 (C언어의 높은 이식성)
3
O/S Porting
• OS를 이루는 대부분의 코드들은 이식 가능한 C언어로 구현
• CPU마다 다른 구조의 아키텍쳐 (레지스터, 인터럽트, 타이머 등)을 가지고
있으므로 이 부분을 사용하는 코드들을 바꾸면 Porting 가능
• OS가 포딩이 되면 OS 위에서 동작하는 어플리케이션 프로그램은 플랫폼
독립적으로 수행 가능
• OS Porting을 수행하기 위해서는 시스템의 하드웨어 구조, 컴파일러,
프로그래밍에 깊은 지식이 필요
4
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
5
What need for O/S Porting
• Host 측 필요장비
– Host와 Target이 PC인 경우 (개발과 테스트를 같은 플랫폼 상에서 수행)
• 컴파일러, 어셈블러, OS Code, Application Code 등이 필요
– Host가 PC이고, Target이 독립적인 다른 시스템인 경우
1. 크로스 컴파일러 혹은 PC에서 동작하는 Target 프로세서의 컴파일러를 구한다.
2. 개발 환경에서 만들어진 이미지 파일을 Target에서 동작하는 Binary Image의
형태와 주소를 갖도록 바꿔주는 프로그램인 Binary Utility를 구한다.
3. (Serial Data를 처리하여 보여 줄 수 있는 통신 에뮬레이터를 구한다.)
Ex) 이야기, 새롬 데이터맨, Teraterm 등
6
What need for O/S Porting
• Target 측 필요 장비
– JTAG
– 플랫폼
• O/S Porting을 위한 약간의 메모리
• O/S를 동작시킬 Processor
• 기타 원하는 작업을 위한 디바이스
7
What need for UC/OS-II Porting
• 프로세서가 재진입이 가능한 코드를 생성하는 컴파일러
• C에서 인터럽트를 제어 할 수 있어야 함
• 프로세서는 인터럽트를 지원하거나 비슷한 기능을 수행 할 수 있어야 함
• 프로세서가 일정한 Timer 기능의 인터럽트를 제공 할 수 있어야 함
• 프로세서는 하드웨어적, 소프트웨어적 Stack을 지원 해야 함
• Stack이나 Memory에서 SP와 다른 CPU 레지스터를 불러오고 저장하는
Instruction을 지원해야 함
• Data Types의 설정이나 critical section에 접근하기 위한 매크로로
사용되는 인터럽트 금지와 해제의 구현에 주의해야 함
8
UC/OS-II Software Architecture
Applications
UC/OS-II Configuration
UC/OS-II
(Processor Independent Code)
OS_CORE.c
OS_MBOX.c
OS_MEM.c
OS_TIME.c
OS_Q.c
OS_SEM.c
OS_TASK.c
uCOS_II.c
uCOS_II.h
(Application Specific Code)
OS_CFG.h
INCLUDES.h
UC/OS-II Port
OS_CPU.H
OS_CPU_A.asm
(Processor Specific Code)
OS_CPU_C.c
HARDWARE
(Timer, Interrupt, etc)
9
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
다운로드
10
Porting for UC/OS-II on ATmega128
• Email과 Password 입력 (Email – [email protected], PSW : hm354121)
App
App
Config
Kernel
Port
• 압축 파일의 압축을 푼다.
H/W
개발자가 지원하는
예제 어플리케이션
H/W 종속적인 코드
(Port)
11
Porting for UC/OS-II on ATmega128
• 아래 다섯 개의 파일을 새 폴더 port에 복사 한다.
• STK500 폴더의 아래 파일을 새 폴더 test에 복사 한다.
12
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
App
Config
Kernel
OR
Port
H/W
UCOS-II Kernel v2.52
UCOS-II Kernel v2.90
13
Porting for UC/OS-II on ATmega128
• UCOS-II라는 새 폴더를 만들고 커널이 들어있는 source 폴더와 port 파일
이 들어 있는 port 폴더를 이동 시킨 후, UCOS-II 폴더를 C:\로 이동한다.
• 예제 어플리케이션이 있는 test 폴더를 C:\로 이동한다.
14
Porting for UC/OS-II on ATmega128
• Kernel 버전에 따라 예제 어플리케이션을 선택해야 한다.
– 확장자가 252로 끝나는 파일은 2.52 버전의 kernel을 위한 파일이다.
– 이 파일을 쓰기 위해서는 .252를 지워주면 된다.
– 그 외의 파일들은 2.90 버전의 kernel을 위한 파일이다.
• Port 파일 및 어플리케이션 파일의 수정을 위해 Winavr에 포함되어 있는
Winavr 노트패드를 실행시킨다.
15
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이 설치 된 폴더로 수정 한다.
16
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 이상으로 설정 한다. (버그 때문)
17
Porting for UC/OS-II on ATmega128
• 마지막으로 uCOS-II.c 파일을 열어 아래와 같이 UC/OS-II의 소스 파일들
을 대소문자를 잘구분하여 include 한다.
• WinAVR의 makeall을 이용하여 컴파일을 하면 test.hex 파일이 생성 된다.
18
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
19