Contents
1.1. Sample Code ¶
μ΄λ°μ λ° μκ°λ€. (μ»΄νμΌλ¬λ 무μμ μ¬μ©νλ€. λ¨Έ μ΄μ©κ΅¬μ μ©κ΅¬.)
1.2. Installing uCOS-II ¶
μΈμ€ν¨νλ λ°©λ²μΈλ° λ³ νμ μμλ―.. μ°λ¦¬κ° μ§μ uCOS-II λ₯Ό μ€μΉνμ§ μμκΊΌλκΉ.. μ°¨λΌλ¦¬ μμ€λ₯Ό ꡬν΄λ€κ° μ»΄νμΌμ νλ©΄ λͺ°λΌλ.
1.3. INCLUDES.H ¶
λͺ¨λ .c νμΌμμ μΈν΄λ£¨λλλ ν€λνμΌμ΄λ€. μ΄ νμΌμ λ΄μ©μ νκ²νλ‘μΈμλ§λ€ λ€λ₯΄κ² μ μ©μμΌμΌνλ€.
1.4. Compiler-Independent Data Types ¶
νλ‘μΈμλ§λ€ κ°κ° κ°μ§κ³ μλ νΉμ±μ΄ λ€λ₯΄κΈ° λλ¬Έμ μ°λ¦¬κ° ν¬ν
νλ €λ νκ² CPUμ λ§μΆ° μ¬λ¬κ°μ§ κΈλ‘λ² λ³μλ₯Ό μ μΈν΄μ€μΌ νλ€. (κΈλ‘λ² λ³μλΌκΈ°λ³΄λ€λ ν€μλ μ¬μ μλΌκ³ λ§νλκ² λ λ§κ² λ€)
κ°κ°μ νλ‘μΈμλ§λ€ int ν λ°μ΄ν°μ ν¬κΈ° char ν λ°μ΄ν°μ ν¬κΈ°.. λ±λ±μ΄ λ€λ₯΄κΈ° λλ¬Έμ λ€μκ³Ό κ°μ μμΌλ‘ μ¬μ μλ₯Ό ν΄μ€λ€.
κ°κ°μ νλ‘μΈμλ§λ€ int ν λ°μ΄ν°μ ν¬κΈ° char ν λ°μ΄ν°μ ν¬κΈ°.. λ±λ±μ΄ λ€λ₯΄κΈ° λλ¬Έμ λ€μκ³Ό κ°μ μμΌλ‘ μ¬μ μλ₯Ό ν΄μ€λ€.
~cpp // ν μ¬μ μ typedef ungisned char BOOLEAN; typedef unsigned char INT8U typedef signed int INT16S ... // ν μ¬μ μ (#defineμ΄μ©) #define BYTE INT8S ...
1.5. Global Variables ¶
OS λ₯Ό μμ±νλ€λ³΄λ©΄ μ μλ³μκ° νμν κ²½μ°κ° μλ€. μ μλ³μλ μ΄λ»κ² μ μΈνλκ°? extern ν€μλλ₯Ό μ¬μ©νλ©΄ λλ€. νμ§λ§ uCOS-II μμλ extern ν€μλλ§μ #define ν΄μ λ€λ₯Έ λ§€ν¬λ‘λ‘ μ¬μ©νλ€.
~cpp #ifdef OS_GLOBALS #define OS_EXT #else #define OS_EXT_extern #endif
μμ²λΌ λ€μκ³Ό κ°μ΄ λ§€ν¬λ‘ μ μλ₯Ό ν΄ λκ³ λ€μκ³Ό κ°μ μμ€λ₯Ό μ μ©μν¨λ€κ³ ν΄ λ³΄μ
~cpp OS_EXT INT32U OSIdleCtr; OS_EXT INT32U OSIdleCtrRun; OS_EXT INT32U OSIdleCtrMax;κ·ΈλΌ μ€μ μ½λλ (μ»΄νμΌμ) λ€μκ³Ό κ°μ΄ μ μ©λλ€λκ²μ μ μ μλ€.
~cpp extern INT32U OSIdleCtr; extern INT32U OSIdleCtrRun; extern INT32U OSIdleCtrMax;λ§μ½ λ€μκ³Ό κ°μ΄ OS_GLOBALSλΌλ λ§€ν¬λ‘λ₯Ό 미리 μ μ©μν€λ©΄ ν μ μκ° λμ§ μμ μνμ΄λ―λ‘ (μμ #ifdef~#else μμ #else μ μ κ±Έλ¦¬κ² λλ€) λ€μκ³Ό κ°μ μ½λκ° λλ€.
~cpp #define OS_GLOBALS #include "inlcudes.h"μ€μ μ μ©μ μλμκ°μ΄
~cpp INT32U OSIdleCtr; INT32U OSIdleCtrRun; INT32U OSIdleCtrMax;μ¦, λ³μλ Local νκ² μ μΈλλ€λ κ²μ μ μ μλ€.
1.6. OS_ENTER_CRITICAL and OS_EXIT_CRITICAL ¶
OSμμ 곡μ μμμ΄λ νΉμ μ½λκ° μνλλ λμ€μ λ€λ₯Έ νλ‘μΈμ€μ μν΄ interrupt λλκ²μ λ°©μ§νκΈ° μν΄ ν¬λ¦¬ν°μ»¬ μΉμ
μ μ¬μ©νκ² λλ€. μ΄λ μλμ°μ¦ νλ‘κ·Έλλ°μμ μ€λ λκ΄λ ¨ μ²λ¦¬λ₯Ό ν΄ μ€ λμλ λμ€λ μ©μ΄μ΄λ€. uCOS-IIμμλ λ¨μν λ§€ν¬λ‘ν¨μλ₯Ό μ΄μ©ν΄ ν¬λ¦¬ν°μ»¬μΉμ
μ λ€μ΄μ€κΈ°μ λμ€κΈ°λ₯Ό νλ€. λ§€ν¬λ‘ν¨μκ° νλ μΌμ λ¨μν μΈν°λ½νΈλ₯Ό 무ν¨ν, μ ν¨ν μν€λκ² λΏμ΄λ€.
~cpp #define OS_CRITICAL_METHOD #if OS_CRITICAL_METHOD == 1 // OS_CRITICAL_METHOD λ μ΄λμ κ° μ΄λ―Έ μ μλμ΄μλ€. μλ§ CPUμ λ°λΌ λ€λ₯΄κ² κ°μ΄ μ ν΄μ Έ μμκ²μ΄λ€. #define OS_ENTER_CRITICAL() asm CLI #deifne OS_EXIT_CRITICAL() asm STI #endif #if OS_CRITICAL_METHOD == 2 #define OS_ENTER_CRITICAL() asm {PUSHF; CLI} // PUSHFκ° λͺ¬μ§λ μ λͺ¨λ₯΄κ² λ€. μλ§ μ€νμ λ¬΄μΌ μ§μ΄λ£λκ² κ°μλ°. // PUSHFλ CPUλ μ§μ€ν°λ₯Ό νλμ© μΌμΌμ΄ μ€νμ λ£λ μμ μ κ°νΈνκ² νκΈ° μνμ¬ νΈμΆ νλ ASMλͺ λ ΉμΌλ‘ μ ν΄μ§ μμμ // μν΄ λͺ¨λ λ μ§μ€ν°μ λ΄μ©μ μ€νμ PUSHνλ λͺ λ Ήμ. λ°λλ POPFλ‘ PUSHFμ μμμΌλ‘ μ€νμμ κΊΌλΈ λ°μ΄ν°λ‘ κ°κ°μ // λ μ§μ€ν°λ₯Ό λ³κ²½ μν΄. νμ μ΄ λ λͺ λ Ήμ νμμ΄ λμ΄ μ¬μ© λμ΄μΌ νλ€. #deifne OS_EXIT_CRITICAL() asm STI #endif
1.7.1. Character-Based Display ¶
λμ€νλ μ΄λ λ¬ΈμκΈ°λ°μΌλ‘ νλ€. x, yκ°μ μ΄μ©ν΄μ μμ€ν€λ¬Έμμ νΉμλ¬Έμλ₯Ό μΆλ ₯ν μ μλ€. 1κΈμ μΆλ ₯μ μ¬μ©λλ λ°μ΄νΈμλ 2μ΄λ€. 1λ°μ΄νΈλ κΈμμ΄κ³ , λλ¨Έμ§ 1λ°μ΄νΈλ ν¬κ·ΈλΌμ΄λ/λ°±κ·ΈλΌμ΄λ 컬λ¬μ΄λ€. (μμ 4λΉνΈκ° λ°±κ·ΈλΌμ΄λμ΄κ³ νμ 4λΉνΈκ° λ°±κ·ΈλΌμ΄λ 컬λ¬μ΄λ€)
~cpp PC_DispClrScr() // Clear the screen PC_DispClrLine() // Clear a single row (or line) PC_DispChar() // Display a single ASCII chracter anywhere on the screen PC_DispStr() // Display and ASCII strin anywhere on the screen
1.7.2. Elapsed Time Management ¶
μνμκ° μΈ‘μ μ ν task μ μνμκ°μ μΈ‘μ νκΈ° μν΄μ νλ€. (λΉμ°νκ±° μλ?). μ΄ μΈ‘μ μ PCμ 82C52 νμ΄λ¨Έ 2λ²μ ν΅ν΄ μνλλ€. μνμκ° μΈ‘μ μ μν ν¨μλ‘λ PC_ElapsedStart()μ PC_ElapsedStop()μ΄ μλ€. νμ§λ§ μ΄ λ ν¨μλ₯Ό μ¬μ©νκΈ° μ μ PC_ElapsedInit()λ₯Ό νΈμΆν΄μΌνλ€. μ΄ ν¨μλ λ ν¨μμ κ΄λ ¨λ μ€λ²ν€λλ₯Ό μΈ‘μ νλλ° μ¬μ©λλ€. μ΄λ κ² νλ©΄ PC_ElapsedStop ν¨μμ μν΄ μνμκ°μ΄ 리ν΄λλ€(λ§μ΄ν¬λ‘μΈμ»¨λ). μ΄ λ ν¨μλ λͺ¨λ 리μν°λ°νΈ(μ£Ό : λͺ κ°μ νλ‘κ·Έλ¨μ΄ λμμ νλμ taskλ subroutineμ 곡μ νμ¬ μ°λ κ²μ λν΄ λ§ν¨, from νμ»΄μ¬μ ) νμ§ μμμΌνλ€. λ€μμ PC_DispChar()ν¨μμ μΈ‘μ μκ°μ ꡬνλ μμ΄λ€.
~cpp INT16U time; PC_ElapsedInit(); . . PC_ElapsedStart(); PC_DispChar(40, 24, 'A', DISP_FGND_WHITE); time = PC_ElapsedStop();
1.7.3. Miscellaneous ¶
uCOS-IIλ μ¬νμ DOS Application κ³Ό λΉμ·νλ€. λ€λ₯Έλ§λ‘λ uCOS-IIμ μ½λλ main ν¨μμμλΆν° μμνλ€. uCOS-IIλ λ©ν°νμ€νΉκ³Ό κ° task λ§λ€ κ³ μ μ μ€νμ ν λΉνκΈ° λλ¬Έμ, uCOS-IIλ₯Ό ꡬλμν€λ €λ©΄ μ΄μ DOSμ μνλ₯Ό μ μ₯μμΌμΌνκ³ , uCOS-IIμ ꡬλμ΄ μ’
λ£λλ©΄μ μ μ₯λ μνλ₯Ό λΆλ¬μ DOSμνμ κ³μνμ¬μΌ νλ€. λμ€μ μνλ₯Ό μ μ₯νλ ν¨μλ PC_DosSaveReturn()μ΄κ³ μ μ₯λ DOSμ μνλ₯Ό λΆλ¬μ€λκ²μ PC_DOSReturn() ν¨μμ΄λ€. PC.C νμΌμλ ANSI C ν¨μμΈ setjmp()ν¨μμ longjmp()ν¨μλ₯Ό μλ‘ μ°κ΄μμΌμ λμ€μ μνλ₯Ό μ μ₯μν€κ³ , λΆλ¬μ¨λ€. μ΄ ν¨μλ Borland C++ μ»΄νμΌλ¬ λΌμ΄λΈλ¬λ¦¬λ₯Ό λΉλ‘―ν μ¬νμ μ»΄νμΌλ¬ λΌμ΄λΈλ¬λ¦¬μμ μ 곡νλ€.
uCOS-IIλ₯Ό λλ΄κΈ° μ μ PC_DOSSaveReturn ν¨μλ₯Ό νΈμΆν΄μΌνλ€. κ·Έλ μ§ μμΌλ©΄ DOSκ° curruped mode κ° λμ΄λ²λ¦¬κ³ μ΄κ²μ λΉμ μ windowsμ μν₯μ μ€ μλ μλ€.
uCOS-IIλ₯Ό λλ΄κΈ° μ μ PC_DOSSaveReturn ν¨μλ₯Ό νΈμΆν΄μΌνλ€. κ·Έλ μ§ μμΌλ©΄ DOSκ° curruped mode κ° λμ΄λ²λ¦¬κ³ μ΄κ²μ λΉμ μ windowsμ μν₯μ μ€ μλ μλ€.