Upload
anson
View
361
Download
2
Embed Size (px)
DESCRIPTION
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 김종수. - PowerPoint PPT Presentation
Citation preview
Porting US/OC-II On AT-mega128
2010. 9. 7
조 승훈
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 김종수
What is Porting?
What is Porting• Porting 의 광의
– 한 시스템에서 구현되고 있는 기능을 다른 환경의 시스템에서도 같은 기능을 수행하도록 조정해 주는 작업
• Ex) 집에서의 밥짓기와 야외에서 밥짓기의 차이
• Porting 의 협의– 한 시스템에서 사용되는 프로그램을 다른 시스템에서도 사용 할 수 있도록
시스템에 의존적인 코드만을 바꾸는 작업• Ex) 8051 의 LED 제어 프로그램을 ATmega128 에 이식 시 , 플랫폼에 의존적인
assembly code 만 수정하고 C 코드는 그대로 놔두는 것 (C 언어의 높은 이식성 )3
동일한 자원
다른 환경에서 다른 방법으로
같은 결과를 유도
동일한 결과
방법 A
방법 B
O/S Porting• OS 를 이루는 대부분의 코드들은 이식 가능한 C 언어로 구현
• CPU 마다 다른 구조의 아키텍쳐 ( 레지스터 , 인터럽트 , 타이머 등 ) 을 가지고 있으므로 이 부분을 사용하는 코드들을 바꾸면 Porting 가능
• OS 가 포딩이 되면 OS 위에서 동작하는 어플리케이션 프로그램은 플랫폼 독립적으로 수행 가능
• OS Porting 을 수행하기 위해서는 시스템의 하드웨어 구조 , 컴파일러 , 프로그래밍에 깊은 지식이 필요
4
O/S Porting
5
Applications
Operation System : Kernel (H/W Independent Code)
SoftwareHardware
System A System B
H/W Dependent Code (Port)
H/W Dependent Code (Port)변경
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
9
Applications
UC/OS-II (Processor Independent Code)
OS_CORE.c OS_Q.cOS_MBOX.c OS_SEM.cOS_MEM.c OS_TASK.cOS_TIME.c
uCOS_II.c uCOS_II.h
UC/OS-II Port(Processor Specific Code)
OS_CPU.HOS_CPU_A.asm OS_CPU_C.c
HARDWARE(Timer, Interrupt, etc)
UC/OS-II Configura-tion
(Application Specific Code)
OS_CFG.hINCLUDES.h
Porting for UC/OS-II on ATmega128
10
• 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 – [email protected], PSW :
hm354121)
• 압축 파일의 압축을 푼다 .
11
H/W 종속적인 코드(Port)
개발자가 지원하는 예제 어플리케이션
App
Kernel
Port
H/W
App Config
Porting for UC/OS-II on ATmega128
12
• 아래 다섯 개의 파일을 새 폴더 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 에 복사 한다 .
13
OR
UCOS-II Kernel v2.52 UCOS-II Kernel v2.90
App
Kernel
Port
H/W
App Config
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 에 Download19