E D R , A S I H C RSS

Chapter I - Sample Code

RenameThisPage : νŽ˜μ΄μ§€ 이름 μˆ˜μ • ν•„μš”. ꢁ리쀑 --1002


1. Chapter 1

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 ν˜• λ°μ΄ν„°μ˜ 크기.. 등등이 λ‹€λ₯΄κΈ° λ•Œλ¬Έμ— λ‹€μŒκ³Ό 같은 μ‹μœΌλ‘œ μž¬μ •μ˜λΌ ν•΄μ€λ‹€.
~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. PC-Based Services

주절주절 κΆμ‹œλ κΆμ‹œλ ..

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에 영ν–₯을 μ„ μˆ˜λ„ μžˆλ‹€.

1.8. uCOS-II Examples

1.9. Example 1

1.9.1. main()

1.9.2. TaskStart()

1.9.3. TaskN()

1.10. Example 2

1.10.1. main()

1.10.2. TaskStart()

1.10.3. TaskN()

1.11. Example 3

1.11.1. main()

1.11.2. Tasks

1.11.3. Notes


Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:22:51
Processing time 0.0314 sec