SYSTEMC編寫的51內(nèi)核嵌入式微型操作系統(tǒng)結(jié)構(gòu)_第1頁
SYSTEMC編寫的51內(nèi)核嵌入式微型操作系統(tǒng)結(jié)構(gòu)_第2頁
SYSTEMC編寫的51內(nèi)核嵌入式微型操作系統(tǒng)結(jié)構(gòu)_第3頁
SYSTEMC編寫的51內(nèi)核嵌入式微型操作系統(tǒng)結(jié)構(gòu)_第4頁
SYSTEMC編寫的51內(nèi)核嵌入式微型操作系統(tǒng)結(jié)構(gòu)_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、系統(tǒng)結(jié)構(gòu).系統(tǒng)架構(gòu)本系統(tǒng)是采用分時處理的方式處理多個任務(wù)。各個組成模塊能夠在一定時間間隔內(nèi)被循環(huán)調(diào)用,此結(jié)構(gòu)的詳細說明,請查閱文件 MAIN.DOC.軟件定時系統(tǒng)工作時用到許多定時,這些定時具有如下特征:從定時的時間長度來看:定時時間從數(shù)十毫秒到數(shù)十秒不等,但基本可以分為兩種數(shù)量級:小于一秒和大于一秒。一般來說這些用于控制系統(tǒng)工作的定時器不需要嚴(yán)格精確(允許10%的誤差)。從執(zhí)行的順序來看可分為同時執(zhí)行和順序執(zhí)行兩種,其中順序執(zhí)行的定時器的可共用??紤]到系統(tǒng)中運行的需要,特設(shè)定 3個定時器可同時使用。. 1系統(tǒng)所使用的虛擬定時器Timer8ms以8ms為定時時基,即每 8ms遞減一次(Time

2、r8ms0 ),用于1秒以下的定時。主要應(yīng)用:1) Key Hold 狀態(tài)下,510step/sec定時操作。2)在進行Source切換后,至U進入Playing狀態(tài)前的幾種狀態(tài)轉(zhuǎn)換的定時。Timer64ms以64ms為定時時基,即每 64ms遞減一次(Timer64ms0 ),用于1秒以上的定時。主要應(yīng)用:改變系統(tǒng)設(shè)置的鍵值處理,如 Volume的顯示延時及延時存儲的定時。Timer128ms以128ms為定時時基,即每 128ms遞減一次(Timer128ms0 ),用于1秒以 上的定時,用在可能 會與Timer64ms有沖突的定時。主要應(yīng)用:各模式下的狀態(tài)處理及鍵值處理。如 Radio模

3、式下,在自動搜索電臺時設(shè)置30秒的定時。系統(tǒng)工作模式定義系統(tǒng)軟件的工作始終在各種模式之間切換。系統(tǒng)使用一個16位的字變量(WorkMode)控制各種工作模式。為方便計算及簡化處理,特將該變量的類型設(shè)計為union,其具體定義如下:typedef unionWord W;Byte B2;WordChar;WordChar OS;/can never be changed,MEMOdefine WorkMode OS.Wdefine SourceOS.B0define ModeOS.B1為了使軟件邏輯上的處理更加方便,對WorkMode的取值范圍根據(jù)不同的工作模式設(shè)計了一些規(guī)則,在以后的軟件維護和

4、升級時,可以在符合這些規(guī)則的前提下,增加新的工作模式定義。這些規(guī)則的基本思路是:1、使用某些特定的位定義基本工作模式2、在特定的基本工作模式下,定義可多達256 (1個字節(jié))種子工作模式。3、在特定的基本工作模式下,子工作模式是唯一的。不同的基本工作模式下,子工作模式的取值可以相同。4、通過簡單的邏輯與、或就可以進行如上的處理。為此,定義如下#define SYS_RADIO0 x1000#define SYS_JAPE0 x2000#define SYS_AUX0 x4000#define SYS_CD0 x8000#define SYS0 x01ff /system common proc

5、ess3.2邏輯操作根據(jù)上面的定義,當(dāng)有按鍵操作并使基本工作模式改變時,通過調(diào)用函數(shù)InitWorkMode(),改變當(dāng)前WorkMode的設(shè)置,根據(jù)鍵碼重新定義成規(guī)定的值,比如從CD Mode改變?yōu)?Radio Mode ,使用語句WorkMode=SYS_RADIO;并進行相應(yīng)的初始化設(shè)置,即完成模式切換。模式切換以后即進入基本模式初始化的處理流程。各基本模式(如:RADIO, CD, TAPE 等等)的詳細介紹,請查閱相關(guān)文件。函數(shù)InitWorkMode()的源程序如下:/* * * * * * * * * * * * * * * * * * * * * * * * * * * * *

6、 * * * * * * * * *Name:InitWorkMode()Input:Slide switch statusor Keyboard valueOutput:WorkModeFunction: When system reset or power on, initial the WorkMode according toSlide switch status or Keyboard value.BeCalled: Sys_Mode() - Power on*/static void InitWorkMode(unsigned char SourceKey)Power_On();L

7、S188_RESET=0;CD_DOOR=0;M ute.byte1=0;Mute_Mode=1;FSource=0;VFD_All(CAll);DisplayEQ();FPower=1;Timer8ms=T8ms_SOURCE_POWER_EN;Mode=IDLE;Tuner_Off();switch(SourceKey)case IDLE:/When success switching this flag is set to 1/power on flag/WAIT 150MSSource &= Source_SYS; break;case K_TAPE:Source=Source_TAP

8、E;Source_LED=LED_Tape; break;case K CD:if(FDoorOpen)FDoorOpen=0;Door_Operation();Software Specification V 0.1Door_Mode=5;FDispDoor=0;case K_OPEN:Source=Source_CD;Source_LED=LED_CD; break;default:Source=Source_RADIO;Source_LED=LED_Tuner; break;CD_Off();3.3軟件模式切換示意圖Power KeyCD keyOpen/Close keyPower K

9、ey(if previous mode is CD) /CalKeyEventInitializtionRemoteReeCDECHOTunre KeyTunre KeyTunerCD KeyInsertPower3StandbyTunre KeyPower Key (default) =,Panel Key,Power Key /Tape KeyTape )SYS_Key& SYS ModeI.Timery Sleep ClockVolume)RECDemo3)Area=ReadByte(EEP_SYS_AREA);if(Area3)Area=0;WriteByte(Area,EEP_SYS

10、_AREA);elseWriteByte(Area,EEP_SYS_AREA);if(!FDoorMoveOK | tape_init_req)if(Timer128ms3)ClockHour=HourTemp;ClockMin=MinTemp;FClockSet=1;ClockSec=Timer128ms=ClockSec=0;FSecOver=0;if(Timer128ms)DisplayClock();elseCLOCK_EXIT:ClockMode=0;if(!FClockSet | (Mode=(uchar)SYS_CLOCK_DISP) if(!FPower)Mode=(uchar

11、)SYS_POWER_OFF;elseMode_Return();break;Mode=(uchar)SYS_CLOCK_DISP;Timer128ms=T128ms_5SEC;break;case SYS_TIMER_SET:DisplayTimer();if(!Timer128ms兒 VFD_All(CAll); if(!FPower)Mode=(uchar)SYS_POWER_OFF; else DisplayEQ(); Mode_Return(); break;case SYS_SLEEP_SET:if(!Timer128ms兒 Mode_Return(); break;VFD_Seg

12、ment(Seg_SLEEP,FSleep & FTimer512ms);DataTemp=SleepCounter;VFD_All(CAllDigter);if(!SleepCounter)VFD_String(DIG2,Str_SLEEP);if(FTimer512ms)VFD_String(DIG7,Str_OFF); break; if(SleepCounter=100) VFD_Char(DIG3,1);DataTemp-=100;if(SleepCounter10)DataTemp+=100;VFD_Data(DIG4,DataTemp);VFD_String(DIG7,Str_M

13、IN);/display MINbreak; case SYS_EQ_SET:if(Timer128ms) if(FDispEQ) Position=DIG5; if(EQ=EQ_CLASSIC) Position=DIG3; if(EQ=EQ_POP)Position=DIG6;VFD_String(Position,DISPEQ_LABEQ);elseVFD_String(DIG3,Str_BASS);if(FBbs)VFD_String(DIG7,Str_ON);elseVFD_String(DIG7,Str_OFF);elseSaveEQ();Mode_Return();break;c

14、ase SYS_DIM_SET:if(Timer128ms)if(DisplayMode!=2)VFD_String(DIG2,Str_DIM);if(!DisplayMode)VFD_String(DIG6,Str_HIGH);elseVFD_String(DIG6,Str_LOW);elseVFD_String(DIG3,Str_LED);VFD_String(DIG7,Str_OFF);elseMode_Return();break;case SYS_REC_READY:if(Timer128ms)VFD_All(CAllDigter);if(FError)if(HALF_SW)/ no

15、 tapeif(FTimer512ms)VFD_String(DIG3,Str_NO);VFD_String(DIG6,Str_TAPE);break; elseSoftware Specification V 0.1VFD_String(DIG4,Str_ERROR);break;if(Timer128msT128ms_3SEC)if(VFD_Shift(Str_TAPE,Str_PROTECTED)FError=0;Timer128ms=0;elseTimer128ms=2;break;if(FTimer512ms)Counter256ms=0;VFD_String(DIG4,Str_ER

16、ROR);break;if(HALF_SW)FError=1;Timer128ms=T128ms_5SEC;break;VFD_String(DIG3,Str_REC);VFD_Char(DIG7,Char_L_Play);VFD_Char(DIG9,Char_R_Play);if(FRecord)Mode=(uchar)SYS_REC_PLAY;FTimer256ms=0;FTimer2s=!FTape_Direction;if(!FTimer256ms)VFD_Char(DIG7+(uchar)FTimer2s+(uchar)FTimer2s,Char_CLR);VFD_Segment(S

17、eg_REC,FTimer512ms);elseFError=0;Mode_Return();break;case SYS_REC_PLAY:if(!FRecord)Counter256ms=0;Software Specification V 0.1Mode=(uchar)SYS_REC_STOP; break;if(FDispREC) if(!Timer128ms)FDispREC=0;Counter256ms=0;Timer128ms=T128ms_5SEC; elseif(VFD_Shift(Str_RECORDING ,int_NULL) Timer128ms=0;Mode_Retu

18、rn(); elseTimer128ms=2; break;case SYS_REC_ON:VFD_All(CAllDigter);if(Timer128ms)VFD_String(DIG4,Str_REC); VFD_String(DIG8,Str_ON); else if(FPause)VFD_String(DIG4,Str_PAUSE); elseMode_Return(); break;case SYS_REC_STOP: if(VFD_Shift(Str_RECORD,Str_STOP)Timer128ms=Counter256ms=0; Mode_Return(); elseTim

19、er128ms=2;break;case SYS_DEMO: if(!FDemo)VFD_All(CAllSegment); if(VFD_Shift(Str_DEMO,Str_OFF)Demo_Flag_Reset();VFD_All(CAll);LED_Drive(LED_Off);Mode=(uchar)SYS_POWER_OFF;elseDemo();break;case SYS_DEMO_ON:VFD_All(CAll);if(Timer128ms)if(FTimer512ms)LED_Drive(LED_Off);VFD_String(DIG3,Str_DEMO);VFD_Stri

20、ng(DIG8,Str_ON); break; Demo_Reset(); Mode=(uchar)SYS_DEMO; break;4系統(tǒng)鍵值處理鍵碼的定義系統(tǒng)中產(chǎn)生鍵碼的有鍵盤、遙控器,同樣, SlideSwitch以及ENCODER亦可作鍵處理。為了能做統(tǒng)一 處理,均輸出統(tǒng)一的鍵值,以方便系統(tǒng)對鍵值的處理。有關(guān)鍵值的預(yù)定義請查看附錄。由于Keyboard, Remote, SlideSwitch, Encoder 特性各不相同, 如有按鍵按下,Keyboard處理程序?qū)⒅芷?性的輸出相應(yīng)鍵碼(周期時長由系統(tǒng)決定,如在本系統(tǒng)中是8ms),而在Remote中則是周期性的連續(xù)碼,周期是108ms

21、或216ms( NEC遙控格式),且第一次是含鍵碼,在之后的則是連續(xù)波, 沒有鍵碼。同樣,SlideSwitch 和Encoder也有各自的不同點,在本文中不一一介紹,詳細說明請查閱相關(guān)文檔。為解決上述問題,根據(jù) 實際需要,設(shè)定一變量KEYDA TA,其中Bit0Bit5的6個Bit用于存儲鍵值,可存放64個鍵碼值。Bit6,Bit7 則用于區(qū)別鍵碼的來源,表 4-1列出了具體定義:表4-1鍵碼來源表:Bit7Bit6Describe00IDLE,無按鍵或按鍵已經(jīng)響應(yīng)。011按鍵來自 Keyboard.10按鍵來自Encoder.11按鍵來自Remote.為方便使用,所有的鍵碼定義均放在文件K

22、ey.h中。鍵碼的狀態(tài)在鍵碼的基本狀態(tài)有:無按鍵狀態(tài)(IDLE)、按下狀態(tài)和彈起狀態(tài)。根據(jù)系統(tǒng)需要又將按下/彈起狀態(tài)細分,在按下狀態(tài),保持時間大于0.8秒的事件稱為保持狀態(tài)(Press_Hold),反之稱為按下狀態(tài)(Press_Down);在彈起狀態(tài),由保持狀態(tài)(Press_Hold)彈起的事件稱為保持彈起狀態(tài)(Press_UP_Long),由按下狀態(tài)(Press_Down)彈起的事件稱為按下彈起狀態(tài)(Press_UP_Short),定義如下:#define IDLE#define PRESS_DOWN#define PRESS_HOLD#define PRESS_UP_SHORT#defin

23、e PRESS UP LONG/First press down/Press longer than 0.8 sec/Press up within 0.8 sec/Press up after 0.8 sec(after hold)系統(tǒng)中由一字節(jié)變量(KeyEvent)記錄當(dāng)前按鍵的上述五種狀態(tài),KeyEvent屬于全局變量,可供系統(tǒng)中其它函數(shù)使用。按鍵分析判別由于按鍵的來源不同,并且特性各不相同,因此需根據(jù)其特性設(shè)定相應(yīng)的處理,從而產(chǎn)生正確的按鍵狀態(tài)。程序CalKeyEvent即完成此功能。下面即為源程序和流程圖:源程序:/*Name:CalKeyEvent()Input:KEYDATAO

24、utput:KeyEvent = PRESS_DOWN,PRESS_HOLD,PRESS_UP OR lasteventUsed:Static PrvKData,KeyTimerFunction: Key higher process for Remote,PanelKey,Encoder.To calculateout KeyEvent,only return once if event not be responsedAfter event responsed,LastEvent should be changed to IDLE*/*void CalKeyEvent(void)uchar

25、 KeyStatus,PrvStatus;static uchar data PrvKData,KeyTimer;KeyStatus = KEYDATA & 0 xc0;PrvStatus=PrvKData & 0 xc0;switch(KeyStatus)case S_IDLE:if(PrvStatus=S_IDLE) break;KUP:PrvKData=0;if(KeyEvent = PRESS_HOLD) KeyEvent=PRESS_UP_LONG;elseKeyEvent=PRESS_UP_SHORT;KeyTimer = 0;/Reset timerbreak;case S_PA

26、NEL_KEY:if(PrvStatus = S_PANEL_KEY)if(KEYDATA=PrvKData) KEYDATA=KEYDA TA & 0 x3f; /KeyStatus=IDLE KHD:if(KeyTimer = KEYHOLDTIME) KeyEvent=PRESS_HOLD; break; /return once else KeyTimer+;else KEYDATA=PrvKData=0;/key error else PrvKData=KEYDA TA;KEYDATA=KEYDA TA & 0 x3f;/set KeySatus = IDLEKPD:KeyEvent

27、=PRESS_DOWN;FManual_Key=1;break;case S_REMOTE:if(_testbit_(REMV ALID) goto KPD;if(RPTV ALID|(KeyTimer9)/32*8=256msgoto KHD; KEYDATA=KEYDA TA & 0 x3f;/set KeySatus = IDLEgoto KUP; 流程圖:CalKeyEventsw itch KeyStatusIDLEPrvKStatus=0?PrvKData=0KeyEvent=HOLD?KeyE vent=Hold_UPPanel KeyPvKStatus=P anel?PrvKD

28、ata=KE YDATAEncoderRemoteiRemValid=1?PreKData=KE YDATA?-._nKEYDATA =0PvKData=0KEYDATA &=0 x3fKEYDATA &=0 x3fyKeyEvent=Short_UP-二一KeyTim er=500?KeyTim er+;KeyE vent=HoldreturnKeyEvent=P ress_Dow nFManual_Key=01 yRptValid=1orKeyTimer9?,-r-JRemValid=0return鍵處理:整個系統(tǒng)中的鍵處理需進行很多分析、判斷,如有些按鍵只能在系統(tǒng)模式下處理,如POWER

29、, VOL_UP?DOWN, CLOCK, TIMER, SOUND MODE, RECORD, CD, TUNER, TAPE等按鍵,而有些按鍵在不同工作模式下將產(chǎn)生不同的作用,因此只能在各模式下分別處理,如:A_PLAY/PAUSE, B_PAL Y/PAUSE, STOP, R_SKIP,F_SKIP等。因此在系統(tǒng)下及各工作模式下均有各自獨立的鍵處理程序。在此不一一列出,請查閱源程序。附錄一:KEY.Hextern uchar data KEYDA TA;extern bit REMVALID,RPTV ALID; TOC o 1-5 h z fine KEYHOLDTIME25/* K

30、eyStatus of KEYDATA define */#define S_IDLE0 x0#define S_PANEL_KEY0 x40#define S_ENCODER0 x80#define S_REMOTE0 xc0/*key hold time according to run interval*/ /* KeyEvent define*/#define IDLE00.5sec = 32*16ms ,the 32ms is/the calculation process run interval/First press down#define PRESS_DOWN1Softwar

31、e Specification V 0.1Progress File#define PRESS_HOLD2/Press longer than 0.8 sec#define PRESS_UP_SHORT3/Press up within 0.8sec#define PRESS_UP_LONG4/Press up after 0.8sec(after hold)/#define slideswitch#define K_10 x1#define K_20 x2#define K_30 x3#define K_40 x4#define K_50 x5#define K_60 x6#define K

32、_70 x7#define K_80 x8#define K_90 x9#define K_00 xa#define K_100 xb#define K_MEM_UP0 xcA_PLAY#define K_MEM_DOWN0 xd/B_PLAY#define K_STOP0 xe#define K_MEM_CLK_ADJ0 xf/PROGRAM#define K_PBC0 x10#define K_REPEAT0 x11#define K_F_SKIP0 x12#define K_R_SKIP0 x13#define K_TAPE0 x14#define K_TUNER_BAND0 x15#d

33、efine K_SLEEP0 x16#define K_TIMER0 x17#define K_CD0 x18#define K_OPEN0 x19#define K_KEYCTRL0 x1a#define K_STEREO0 x1b#define K_L_RCH0 x1c#define K_RETURN0 x1d#define K_VP0 x1e#define K_GOTO0 x1f#define K_MEM_PLAY0 x20#define K_A_TO_B0 x21#define K_VIEW0 x22#define K_NTSC_PAL0 x23#define K_FRAME0 x24

34、#define K_SLOWPLAY0 x25#define K_OSD0 x26#define K_MUTE0 x27#define K_JNTRO0 x28#define K_EQ0 x29#define K_VOL_UP0 x2 a#define K_VOL_DOWN0 x2 b#define K_REC0 x2 c#define K_MIC0 x2d#define KCLOCK0 x2e#define K_POWER0 x30K_REPEAT K_MEM_CLK_ADJ K_MEM_UP K_MEM_DOWN#define K_DEMO#define K_PROGRAM#define

35、K_A_PLAY#define K_B_PLAY/KEY DEFINE FOR LS188#define Key_10 x1#define Key_20 x2#define Key_30 x3#define Key_40 x4#define Key_50 x5#define Key_60 x6#define Key_70 x7#define Key_80 x8#define Key_90 x9#define Key_00 xA#define Key_OPEN0 xB#define Key_CAR10 xC#define Key_CAR20 xD#define Key_CAR30 xE#define Key_CARNX0 xF#define Key_PLAY0 x10#define Key_FAST0 x11#define Key_SLOW0 x12#define Key_STEP0 x13#define Key_FSTFW0 x14#define Key_FSTBW0 x15#define Ke

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論