잶죫쪽쪵쪱닙ퟷ쾵춳uC/OS2ꋲ퓚SharpLH79520뒦샭웷짏뗄틆횲ꆤ53ꆤ잶죫쪽쪵쪱닙ퟷ쾵춳uC/OS2ꋲ퓚SharpLH79520뒦샭웷짏뗄틆횲쓇ꆡ볓(뚫쓏듳톧뺭볃맜샭톧풺,붭쯕쓏뺩ꆡ210096)햪튪:퇐뺿쇋잶죫쪽쪵쪱닙ퟷ쾵춳uC/OS2ꋲ뗄쳘뗣뫍쓚뫋뷡릹,틔벰uC/OS2ꋲ퓚쒿잰쇷탐뗄잶죫쪽캢뒦샭웷SharpLH79520짏틆횲뗄랽램ꆣ맘볼듊:uC/OS2ꋲ;SharpLH79520;ARM7TDMI;틆횲훐춼럖샠뫅:TP316ꆡꆡ컄쿗뇪쪶싫:Aꆡꆡ컄헂뇠뫅:1000-8829(2007)10-0053-04MigrationoftheEmbeddedReal2TimeOperatingSystemuC/OS2ꋲontheSharpLH79520MicroprocessorNAJia(SchoolofEconomics&Management,SoutheastUniversity,Nanjing210096,China)Abstract:Thecharacteristicandthekernelstructureoftheembeddedreal2timeoperatingsystemuC/OS2ꋲarestudied,andameth2odwhichtransplantsuC/OS2ꋲ:uC/OS2ꋲ;SharpLH79520;ARM7TDMI;migrationꆡꆡ퓚쿖듺짺믮훐,쯦ퟅ잶죫쪽쾵춳뗄펦폃풽살풽맣랺,잶죫쪽OS2ꋲퟜ쫇퓋탐뻍탷쳵볾쿂폅쿈벶ퟮ룟뗄죎컱ꆣ닺욷튲풽살풽웕벰,죧쫖믺ꆢ헆짏뗧쓔뗈ꆣ잶죫쪽닙ퟷ쾵춳뛔웤ꋝ뛠죎컱ꆣuC/OS2ꋲ뿉틔맜샭64룶죎컱,쎿룶죎컱뗄폅닺욷뗄뫃뮵폐ퟅ훘튪뗄펰쿬ꆣ잶죫쪽닙ퟷ쾵춳뗄쳘뗣쫇쳥믽쿈벶뇘탫쫇늻춬뗄,웤훐쾵춳햼폃8룶,펦폃돌탲ퟮ뛠뿉틔폐킡ꆢ쯙뛈뿬ꆢ뿉닃복ꆢ뿉틆횲뗈ꆣ쯤좻쿖퓚폐탭뛠쿖돉뗄닙ퟷ쾵56룶죎컱ꆣ춳,죧WinCE,VxWorks,PSOS뗈,떫틲웤볛룱낺맳뛸죃죋쓑틔ꋞ뿉좷뚨탔ꆣ좫늿uC/OS2ꋲ뗄몯쫽뗷폃폫럾컱뗄횴탐쪱뷓쫜ꆣ뛸uC/OS2ꋲퟮ듳뗄쳘뗣뻍쫇쯼뗄풴듺싫뾪럅,헢쫇웤쯻볤쫇뿉횪뗄,벴uC/OS2ꋲ쾵춳럾컱뗄횴탐쪱볤늻틀삵폚펦폃짌튵쪵쪱쓚뫋컞램뇈쓢뗄ꆣ쯼쫇헫뛔잶죫쪽펦폃뛸짨볆뗄뿉틔돌탲죎컱뗄뛠짙ꆣ닃뗴늻탨튪뗄늿럖,쪹웤뇤뗃킡쟉ꆢ쇩믮ꆢ킧싊룟,늢쟒돉놾붵ꋟ죎컱햻ꆣuC/OS2ꋲ퓊탭쎿룶죎컱폐늻춬뗄뛑햻뿕볤,틔뗍,죃맣듳폃뮧쯹뷓쫜ꆣ뇣톹뗍펦폃돌탲뛔RAM뗄탨쟳ꆣꋠ쾵춳럾컱ꆣuC/OS2ꋲ폐뛠룶쿠뛔뛀솢뗄ꆢ뛌킡뺫솶뗄쒿1ꆡuC/OS2ꋲ볲뷩뇪쒣뿩ퟩ돉,헢킩쒣뿩폐:죎컱맜샭ꆢ쪱볤맜샭ꆢ죎컱볤뗄춨탅ꆡuC/OS2ꋲ뗄쳘뗣폫춬늽ꆢ쓚듦맜샭ꆣꋙ뿉틆횲탔ꆣ뻸듳늿럖uC/OS2ꋲ뗄풴싫쫇폃틆횲탔뫜잿ꋡ훐뛏맜샭ꆣ훐뛏뿉틔쪹헽퓚횴탐뗄죎컱퓝쪱맒웰,죧맻뗄ANSIC킴뗄,뫍캢뒦샭웷펲볾쿠맘뗄쓇늿럖쫇폃믣뇠폯퇔폅쿈벶룼룟뗄죎컱놻룃훐뛏뮽탑,퓲룟폅쿈벶뗄죎컱퓚훐뛏잶킴뗄,믣뇠폯퇔킴뗄늿럖틑뺭복떽ퟮ뗍쿞뛈ꆣ쳗좫늿췋돶뫳솢벴횴탐,uC/OS2ꋲ뗄훐뛏잶쳗닣쫽뿉듯255닣ꆣꋚ뿉만뮯ꆣuC/OS2ꋲ쫇캪잶죫쪽펦폃뛸짨볆뗄,폃뮧뿉틔ꆡuC/OS2ꋲ뗄쾵춳뷡릹춨맽만뮯쫖뛎붫uC/OS2ꋲ잶죫떽닺욷훐돉캪닺욷뗄튻늿럖ꆣ춼1쮵쏷쇋uC/OS2ꋲ뗄죭펲볾쳥쾵뷡릹ꆣꋛ뿉닃복ꆣuC/OS2ꋲ쾵춳평뛠룶쿠뛔뛀솢ꆢ뛌킡뺫솶뗄쒿펦폃돌탲뒦폚헻룶쾵춳뗄뚥닣,쎿룶죎컱뚼뿉틔죏캪ퟔ벺뇪쒣뿩ퟩ돉,폃뮧뿉룹뻝탨튪톡퓱쫊떱쒣뿩살닃보뫍엤훃쾵뛀햼쇋CPU,틲뛸뿉틔짨볆돉캪튻룶컞쿞톭뮷ꆣuC/OS2ꋲ뒦샭춳,헢퇹,춨맽쒿뇪쒣뿩횮볤뗄내탨ퟩ뫏,뿉틔복짙닺욷훐뗄웷컞맘뗄듺싫,uC/OS2ꋲ뗄쾵춳럾컱,펦폃돌탲뿉틔쪹폃헢킩uC/OS2ꋲ쯹탨뗄듦뒢뿕볤,헢훖닃복탔쫇뾿쳵볾뇠틫쪵쿖뗄ꆣAPI몯쫽뷸탐쓚듦맜샭ꆢ죎컱볤춨탅틔벰뒴붨ꆢ즾돽죎컱뗈ꆣ쯼뗄쓚뫋뿉ퟮ킡닃보떽ퟳ폒ꆣꋜ햼쿈쪽ꆣuC/OS2ꋲ췪좫쫇햼쿈쪽뗄쪵쪱쓚뫋,벴uC2ꆡSharpLH79520캢뒦샭웷볲뷩/LH79520캢뒦샭웷쫇쿄웕(Sharp)릫쮾짨볆뗄32캻쫕룥죕웚:2007-01-22ARM7TDMIRISC뒦샭웷뫋,뻟폐뗍릦뫄ꆢ룟탔쓜뗄쳘뗣,훷튪ퟷ헟볲뷩:쓇볓(1958ꆪ),쓐,싺ퟥ,룟벶릤돌쪦,늩쪿퇐뺿짺,훷튪퇐뺿릦쓜쏨쫶죧쿂:ꋙ릤ퟷ퓚,듸8kHz뮺듦뗄랽쿲캪짺닺퓋ퟷ맜샭ꆢ폅뮯뗷뛈퇐뺿ꆢ닢뿘벼쫵ꆢ릤튵ퟔ뚯뮯ꆣ뺲첬ARM7TDMICPU뫋;ꋚ튻룶벯돉뗄SDRAM뿘훆웷뫍뺲첬
ꆤ54ꆤꆶ닢뿘벼쫵ꆷ2007쓪뗚26뻭뗚10웚듦뒢웷뿘훆웷;ꋛDMA뿘훆웷;ꋜ닊즫LCD뿘훆웷(CLCDC);typedefdoubleFP64;ꆡ/3Doubleprecisionfloatingpoint3/ꋝ춬늽뒮탐뿚(SSP);ꋞ벯돉쇋3룶춨폃틬늽쫕랢웷(UART);ꆡꆡLH79520훐뗄뛑햻쫽뻝샠탍캪32캻,뚨틥캪:ꋟ싶뿭뗷훆웷(PWM),ퟮ룟떽16캻뗄럖뇦싊;ꋠ쪸솿훐뛏뿘훆typedefunsignedintOS_STK;ꆡ/3Eachstackentryis32-bit웷냼몬쇋뛔20룶쓚늿뫍8룶췢늿훐뛏풴훐뛏쟫쟳뗄뿘훆뫍펦wide3/폃ꆡꆡ퓚LH79520훐쯹폐뛑햻뇘탨폃OS_STK짹쏷:;ꋡ뾴쏅릷뚨쪱웷(watchdogtimer);ꋢ쳡릩ퟮ뛠86캻뗄뿉뇠돌쫤죫쫤돶뿚typedefunsignedintOS_CPU_SR;/3DefinesizeofCPUstatus(GPIO)ꆣregister(PSR=32bits)3/ꆡ듺싫쇙뷧쟸RTOS퓚뷸죫쾵춳쇙뷧쟸잰뇘탫맘뇕훐뛏,췋돶쇙뷧쟸뫳퓙뾪훐뛏ꆣuC/OS2ꋲ뚨틥쇋솽룶뫪살뾪/맘훐뛏:OS_ENTER_CRITICAL()뫍OS_EXIT_CRITICAL()ꆣ캪쪵쿖뾪맘훐뛏,뫪뚨틥캪:#defineOS_ENTER_CRITICAL()(cpu_sr=OS_CPU_SaveSR())ꆡ/3Disableinterrupts3/#defineOS_EXIT_CRITICAL()(OS_CPU_RestoreSR(cpu_sr))ꆡ/3Restoreinterrupts3/ꆡ뛑햻퓶뎤랽쿲뛑햻퓶뎤랽쿲폫뇠틫웷폐맘,퓚uC/OS2ꋲ훐,폃OS_STK_GROWTH살짨훃뛑햻뗄퓶뎤랽쿲,OS_STK_GROWTH캪0뇭쪾춼1ꆡuC/OS2ꋲ죭펲볾쳥쾵뷡릹뛑햻듓뗍뗘횷쿲룟뗘횷랽쿲퓶뎤;OS_STK_GROWTH캪l뇭쪾3ꆡuC/OS2ꋲ틆횲뛑햻듓룟뗘횷쿲뗍뗘횷랽쿲퓶뎤,퓚놾샽훐뛑햻듓룟뗘횷쿲뗍뗘횷랽쿲퓶뎤,웤뫪뚨틥캪:틆횲뻍쫇쪹튻룶쪵쪱쓚뫋쓜퓚웤쯻캢뒦샭웷믲캢뿘훆웷짏#defineOS_STK_GROWTHl;/3뛑햻듓룟뗘횷쿲뗍뗘횷퓶퓋탐,믹놾짏뻍쫇뇠킴폫뒦샭웷쿠맘뗄듺싫ꆣ싺ퟣuC/OS2ꋲ틆뎤3/횲뗄뒦샭웷뗄튪쟳죧쿂:ꆡ탞룄컄볾ꋙ뒦샭웷뗄C뇠틫웷쓜닺짺뿉훘죫탍듺싫;퓚듋컄볾훐,쪵볊횻탨탞룄OSTaskStkInit()몯쫽ꆣꋚ뒦샭웷횧돖훐뛏,늢쓜닺짺뚨쪱훐뛏;0STaskStkInit()평죎컱뒴붨몯쫽OSTaskCreate()믲ꋛ폃C폯퇔뻍뿉틔뾪,맘훐뛏;0sTaskCreateExT()뗷폃,폃살돵쪼뮯죎컱뗄뛑햻ꆣOSTaskStkInitꋜ뒦샭웷쓜횧돖튻뚨쫽솿뗄쫽뻝듦뒢펲볾뛑햻(뿉쓜쫇벸()폫뗷폃쯼뗄몯쫽평3룶닎쫽뷸탐뒫뗝:죎컱듺싫웰쪼뗘횷KB);(ꋝ뒦샭웷폐붫뛑햻횸헫틔벰웤쯻task),닎쫽횸헫(p_arg),죎컱뛑햻뚥뗘횷(ptos)ꆣCPU별듦웷뗄쓚죝뛁돶,늢듦뒢떽뛑햻믲쓚듦훐좥뗄횸쇮ꆣOS_STK3OSTaskStkInit(void(3task)(void3pd),void3p_믹폚arg,OS_STK3ptos,INT16Uopt)ARM7TDMI뗄뒦샭웷LH79520췪좫싺ퟣ짏쫶튪쟳ꆣ붫{uC/OS2ꋲ틆횲떽LH79520짏,쪹폃ARMADSퟷ캪뇠틫웷,탞룄폫뒦샭웷샠탍폐맘늿럖뗄듺싫ꆡꆡunsignedint3stk;,튲뻍쫇뷸탐틔쿂벸쿮릤ퟷ:ꋙ탞룄opt=opt;ꆡ/3ꇤoptꇤisnotused,preventwarning3/컄볾;stk=(unsignedint3)ptos;ꆡ/3Loadstackpointer3/ꋚ탞룄컄볾;/3buildacontextforthenewtask3/ꋛ탞룄컄볾ꆣ3(stk)=(OS_STK)task;ꆡ/3EntryPoint3/쿂쏦럖뇰뷩짜헢3룶컄볾뗄틆횲맽돌ꆣ3(--stk)=(INT32U)0x14141414L;ꆡ/3LR3/ꆡ탞룄컄볾3(--stk)=(INT32U)0x12121212L;ꆡ/3R123/컄볾냼삨쇋폃#define폯뻤뚨틥뗄ꆢ폫뒦샭웷쿠3(--stk)=(INT32U)0x11111111L;ꆡ/3R113/맘뗄뎣쫽ꆢ뫪틔벰샠탍ꆣ3(--stk)=(INT32U)0x10101010L;ꆡ/3R103/ꆡ쫽뻝샠탍3(--stk)=(INT32U)0x09090909L;ꆡ/3R93/뚨틥LH79520훐뗄쫽뻝샠탍:3(--stk)=(INT32U)0x08080808L;ꆡ/3R83/typedefunsignedcharBOOLEAN;3(--stk)=(INT32U)0x07070707L;ꆡ/3R73/typedefunsignedcharINT8U;ꆡ/3Unsigned8bitquantity3/3(--stk)=(INT32U)0x06060606L;ꆡ/3R63/typedefsignedcharINT8S;ꆡ/3Signed8bitquantity3/3(--stk)=(INT32U)0x05050505L;ꆡ/3R53/typedefunsignedshortINT16U;ꆡ/3Unsigned16bitquantity3/3(--stk)=(INT32U)0x04040404L;ꆡ/3R43/typedefsignedshortINT16S;ꆡ/3Signed16bitquantity3/,3(--stk)=(INT32U)0x03030303L;ꆡ/3R33/typedefunsignedintINT32U;ꆡ/3Unsigned32bitquantity3/3(--stk)=(INT32U)0x02020202L;ꆡ/3R23/typedefsignedintINT32S;ꆡ/3Signed32bitquantity3/3(--stk)=(INT32U)0x01010101L;ꆡ/3R13/typedeffloatFP32;ꆡ/3Singleprecisionfloatingpoint3/3(--stk)=(INT32U)p_arg;ꆡ/3R0:argument
잶죫쪽쪵쪱닙ퟷ쾵춳uC/OS2ꋲ퓚SharpLH79520뒦샭웷짏뗄틆횲ꆤ55ꆤ3(--stk)=(INT32U)ARM_SVC_MODE;ꆡ/3CPSRMSRSPSR_cxsf,R4(EnablebothIRQandFIQinterrupts)3/LDMFDSP!,{R4};popnewtaskꆯsPSR3(--sMSRCPSR_cxsf,r4tk)=(INT32U)ARM_SVC_MODE;ꆡ/3SPSR3/returnLDMFDSP!,{R0-R12,LR,PC};popnewtaskꆯsR0-R12,LR&PC(stk);}ꆡOSIntCtxSw()몯쫽vo훐뛏벶뗄죎컱쟐뮻몯쫽,쓜릻뺡뿬뗘죃룟폅쿈벶죎컱뗃떽idOSTaskCreateHook()voidOSTaskDelHook()쿬펦,놣횤쾵춳뗄쪵쪱탔쓜.웤듺싫죧쿂:voLDRR0,??OS_IntCtxSwFlag;OSIntCtxSwFlag=FALSEidOSTaskSwHook()voidOSTaskStatHookMOVR1,#0()STRR1,[R0]voidOSTimeTickHook()ꆡꆡ뫳5룶몯쫽캪릳ퟓ몯쫽,죧컞쳘쫢탨쟳뿉틔늻볓듺싫ꆣLDMFDSP!,{R0-R3,R12,LR};CleanupIRQstackSTMFDSP!,{R0-R3};ꆡ탞룄컄볾registers퓚듋컄볾훐탨룄킴4룶몯쫽:OSStartHighRdy()ꆢOSCtxSwMOVR1,SP()ꆢOSIntCtxSw()뫍OSTickISR()ꆣADDSP,SP,#163SUBR2,LR,#ꆡOSStartHighRdy()몯쫽룃몯쫽평OSSMRSR3,SPSR;Disableinterruptsforwhenwegotart()뗷폃,릦쓜쫇퓋탐폅쿈벶ퟮ룟뗄뻍탷죎컱ꆣ웤듺싫죧쿂backtoSVCmode:ORRR0,R3,#NO_INTBLOSTaskSwHook;CalluserdefinedtaskswitchhookMSRSPSR_c,R0LDRR4,??OS_Running;OSRunning=TRUEMLDRR0,=+8;SwitchbacktoSVCmode(Codebe2OVR5,#1low,currentlocation+2instructions)STRBR5,[R4]MOVSPC,R0;RestorePCandCPSRLDRR4,??OS_TCBHighRdy;GethighestprioritytaskTCBaddressSTMFDSP!,{R2};PushtaskꆯsPCLDRR4,[R4];getstackpointerSTMFDSP!,{R4-R12,LR};PushtaskꆯsLR,R12-R4LDRSP,[R4];switchtothenewstackMOVR4,R1;MoveR0-R3fromIRQstacktoLDMFDSP!,{R4};popnewtaskꆯsSPSRMSVCstackSRSPSR_cxsf,R4MOVR5,R3LDMFDSP!,{R4};popnewtaskꆯsCPSRMLDMFDR4!,{R0-R3};LoadR0-R3fromIRQstackSRCPSR_cxsf,R4STMFDSP!,{R0-R3};PushR0-R3LDMFDSP!,{R0-R12,LR,PC};popnewtaskꆯsR0-R12,LR&PCSTMFDSP!,{R5};PushtaskꆯꆡOSCtxSw()몯쫽MRSR4,SPSR죎컱벶뗄짏쿂컄쟐뮻,떱죎컱틲캪놻ퟨ죻뛸훷뚯쟫쟳CPUSTMFDSP!,{R4};PushtaskꆯsSPSR뗷뛈쪱놻횴탐,틲듋쟸뇰폚훐뛏벶뇰뗄죎컱쟐뮻ꆣ쯼뗄릤ퟷ쫇LDRR4,??OS_PrioCur;OSPrioCur=OSPrioHighRdy붫떱잰죎컱뗄CPU놣듦떽룃죎컱뗄뛑햻훐,좻뫳믱뗃룼룟폅쿈LDRR5,??OS_PrioHighRdy벶죎컱뗄뛑햻횸헫,듓룃뛑햻훐믖뢴듋죎컱뗄CPU쿖뎡LDRBR5,[R5],쪹횮볌탸횴탐ꆣ웤듺싫죧쿂STRBR5,[R4]:LDRR4,??OS_TCBCur;GetcurrenttaskꆯsOS_TCBaddressSTMFDSP!,{LR};pushpc(lrshouldbepushedinLDRR5,[R4]placeofPC)STRSP,[R5];storespinpreemptedtasksꆯsTCBSTMFDSP!,{R0-R12,LR};pushlr®isterfileMRSR4,CPSRBLOSTaskSwHook;callTaskSwitchHookLDRR6,??OS_TCBHighRdy;GethighestprioritytaskꆯsOS_TCBSTMFDSP!,{R4};pushcurrentPSRMRSRaddress4,SPSRLDRR6,[R6]STMFDSP!,{R4};pushcurrentSPSRLDRSP,[R6];getnewtaskꆯsstackpointerLDRR4,??OS_PrioCur;OSPrioCur=OSPrioHighRdyLDRRSTRR6,[R4];OSTCBCur=OSTCBHighRdy5,??OS_PrioHighRdyLDRBRLDMFDSP!,{R4};popnewtaskꆯsSPSR6,[r5]STRBRMSRSPSR_cxsf,R46,[r4]LDRRLDMFDSP!,{R4};popnewtaskꆯsPSR4,??OS_TCBCur;GetcurrenttaskꆯsOS_TCBaddressLDRRMSRCPSR_cxsf,R45,[r4]LDMFDSP!,{R0-R12,LR,PC};popnewtaskꆯsR0-R12,LR&PCSTRSP,[r5];storespinpreemptedtasksꆯꆡOSTickISR()몯쫽ook;callTaskSwitchHookLDRR6,??OS_TCBHighRdy;GethighestprioritytaskꆯsOS_TCB쪱훓훐뛏뒦샭몯쫽,웤훷튪죎컱쫇뢺퓰뒦샭쪱훓훐뛏.웤address듺싫죧쿂:LDRR6,[R6]STMFDSP!,{R0-R3,R12,LR}LDRSP,[R6];getnewtaskꆯsstackpointerBLOSIntEnter;IndicatebeginningofISRSTRR6,[R4];OSTCBCur=OSTCBHighRdyBLTmr_TickHandler;Handleinterrupt()LDMFDSP!,{R4};popnewtaskꆯsSPSRBLOSIntExit;IndicateendofISR
ꆤ56ꆤꆶ닢뿘벼쫵ꆷ2007쓪뗚26뻭뗚10웚LDRR0,??OS_IntCtxSwFlag;Seeifweneedtodoacontextswitchꋜ퇩횤OSIntCtxSw()뫍OSTickIsr()몯쫽뗄헽좷퓋탐ꆣLDRR1,[R0]볓퓘췪쓚뫋틔뫳,뻍튪뛔쓚뫋돵쪼뮯,좻뫳뒴붨튻룶볲떥CMPR1,#1LCD쿔쪾뗄죎컱,볓퓘뫳,LCD헽뎣쿔쪾,닢쫔돉릦,쓚뫋헽뎣BEQOS_IntCtxSw;Yes,SwitchtoHigherPriorityTaskLDMFD퓋ꆣSP!,{R0-R3,R12,LR};No,Restoreregistersofinterruptedtaskꆯsstack5ꆡ뷡쫸폯SUBSPC,LR,#4;ReturnfromIRQ4ꆡ쾵춳닢쫔RTOS뗄쪹폃쪹뗃펦폃돌탲뗄짨볆맽돌듳캪볲뮯ꆣ늢쟒돌탲뗄뿉뛁탔ꆢ뿉뾿탔ꆢ뿉삩햹탔폐뫜듳뗄룄짆ꆣ놾퇐뺿듓쪵볊돶캪쇋쪹uC/OS2ꋲ뿉틔헽뎣퓋탐,돽쇋짏쫶뇘탫뗄틆횲릤ퟷ랢,룸돶튻훖풴듺싫뾪럅뗄잶죫쪽쪵쪱닙ퟷ쾵춳uC/OS2ꋲ퓚캢췢,펲볾돵쪼뮯뫍엤훃컄볾튲쫇뇘탫뗄ꆣ캪쇋퇩횤uC/OS2ꋲ틆뒦샭웷LH79520짏뗄틆횲랽낸,틆횲뫳뗄닙ퟷ쾵춳뺭맽닢쫔,횲돉릦,탨튪뾴틆횲듺싫쫇럱쓜헽뎣릤ퟷꆣ쫗쿈늻볓죎뫎펦폃퓋탐컈뚨,늢듯떽쇋쪵쪱쾵춳뗄튪쟳ꆣ듺싫살닢쫔틆횲뫃뗄uC/OS2ꋲ,튲뻍쫇쮵쿈닢쫔쓚뫋ퟔ짭뗄퓋닎뾼컄쿗:탐쟩뿶쫇럱솼뫃ꆣ헢퇹ퟶ뗄풭틲폐솽룶:쫗쿈늻쾣췻붫쫂쟩뢴퓓뮯;웤듎쫇죧맻닢쫔쪱랢쿖컊쳢,뿉틔쏷냗쫇틆횲놾짭뗄컊[1]ꆡ