Porting US/OC-II On ATmega128

19
Porting US/OC-II On ATmega128 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 조조조

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

Transcript of Porting US/OC-II On ATmega128

Page 1: Porting US/OC-II On ATmega128

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 김종수

Page 2: Porting US/OC-II On ATmega128

What is Porting?

Page 3: Porting US/OC-II On ATmega128

What is Porting• Porting 의 광의

– 한 시스템에서 구현되고 있는 기능을 다른 환경의 시스템에서도 같은 기능을 수행하도록 조정해 주는 작업

• Ex) 집에서의 밥짓기와 야외에서 밥짓기의 차이

• Porting 의 협의– 한 시스템에서 사용되는 프로그램을 다른 시스템에서도 사용 할 수 있도록

시스템에 의존적인 코드만을 바꾸는 작업• Ex) 8051 의 LED 제어 프로그램을 ATmega128 에 이식 시 , 플랫폼에 의존적인

assembly code 만 수정하고 C 코드는 그대로 놔두는 것 (C 언어의 높은 이식성 )3

동일한 자원

다른 환경에서 다른 방법으로

같은 결과를 유도

동일한 결과

방법 A

방법 B

Page 4: Porting US/OC-II On ATmega128

O/S Porting• OS 를 이루는 대부분의 코드들은 이식 가능한 C 언어로 구현

• CPU 마다 다른 구조의 아키텍쳐 ( 레지스터 , 인터럽트 , 타이머 등 ) 을 가지고 있으므로 이 부분을 사용하는 코드들을 바꾸면 Porting 가능

• OS 가 포딩이 되면 OS 위에서 동작하는 어플리케이션 프로그램은 플랫폼 독립적으로 수행 가능

• OS Porting 을 수행하기 위해서는 시스템의 하드웨어 구조 , 컴파일러 , 프로그래밍에 깊은 지식이 필요

4

Page 5: Porting US/OC-II On ATmega128

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)변경

Page 6: Porting US/OC-II On ATmega128

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

Page 7: Porting US/OC-II On ATmega128

What need for O/S Porting• Target 측 필요 장비

– JTAG – 플랫폼

• O/S Porting 을 위한 약간의 메모리• O/S 를 동작시킬 Processor• 기타 원하는 작업을 위한 디바이스

7

Page 8: Porting US/OC-II On ATmega128

What need for UC/OS-II Porting• 프로세서가 재진입이 가능한 코드를 생성하는 컴파일러

• C 에서 인터럽트를 제어 할 수 있어야 함

• 프로세서는 인터럽트를 지원하거나 비슷한 기능을 수행 할 수 있어야 함

• 프로세서가 일정한 Timer 기능의 인터럽트를 제공 할 수 있어야 함

• 프로세서는 하드웨어적 , 소프트웨어적 Stack 을 지원 해야 함

• Stack 이나 Memory 에서 SP 와 다른 CPU 레지스터를 불러오고 저장하는 Instruction 을 지원해야 함

• Data Types 의 설정이나 critical section 에 접근하기 위한 매크로로 사용되는 인터럽트 금지와 해제의 구현에 주의해야 함

8

Page 9: Porting US/OC-II On ATmega128

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

Page 10: Porting US/OC-II On ATmega128

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 다운로드

Page 11: Porting US/OC-II On ATmega128

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

Page 12: Porting US/OC-II On ATmega128

Porting for UC/OS-II on ATmega128

12

• 아래 다섯 개의 파일을 새 폴더 port 에 복사 한다 .

• STK500 폴더의 아래 파일을 새 폴더 test 에 복사 한다 .

Page 13: Porting US/OC-II On ATmega128

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

Page 14: Porting US/OC-II On ATmega128

Porting for UC/OS-II on ATmega128• UCOS-II 라는 새 폴더를 만들고 커널이 들어있는 source 폴더와 port

파일이 들어 있는 port 폴더를 이동 시킨 후 , UCOS-II 폴더를 C:\ 로 이동한다 .

• 예제 어플리케이션이 있는 test 폴더를 C:\ 로 이동한다 .

14

Page 15: Porting US/OC-II On ATmega128

Porting for UC/OS-II on ATmega128• Kernel 버전에 따라 예제 어플리케이션을 선택해야 한다 .

– 확장자가 252 로 끝나는 파일은 2.52 버전의 kernel 을 위한 파일이다 .– 이 파일을 쓰기 위해서는 .252 를 지워주면 된다 .– 그 외의 파일들은 2.90 버전의 kernel 을 위한 파일이다 .

• Port 파일 및 어플리케이션 파일의 수정을 위해 Winavr 에 포함되어 있는 Winavr 노트패드를 실행시킨다 .

15

Page 16: Porting US/OC-II On ATmega128

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

Page 17: Porting US/OC-II On ATmega128

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

Page 18: Porting US/OC-II On ATmega128

Porting for UC/OS-II on ATmega128• 마지막으로 uCOS-II.c 파일을 열어 아래와 같이 UC/OS-II 의 소스

파일들을 대소문자를 잘구분하여 include 한다 .

• WinAVR 의 makeall 을 이용하여 컴파일을 하면 test.hex 파일이 생성 된다 .

18

Page 19: Porting US/OC-II On ATmega128

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