免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項超值服

開通VIP
ucos在f120上移植

3.1 OS_CPU.H文件的修改
(1)C8051F120
是一種內(nèi)核為51的單片機(jī),其增長堆棧方向從低地址到高地址,故其堆棧增長方向應(yīng)定義為1,即
#define OS_STK_ GROWTH 1
(2)
定義相關(guān)宏。C8051F120有直接開關(guān)中斷的指令,對臨界區(qū)的設(shè)定直接定義如下:
#define OS_ENTER_CRITICAL EA =0
#define OS_EXIT_CRITICAL EA =1
任務(wù)切換宏封裝了對任務(wù)切換函數(shù)OSCtxSw()的調(diào)用,定義如下:
#define OS_TASK_SW OSCtxSw()
(3)
數(shù)據(jù)類型的定義。根據(jù)C8051F120芯片特點(diǎn)來定義數(shù)據(jù)類型和數(shù)據(jù)長度,其定義與常用51內(nèi)核單片機(jī)相同。

3.2 OS_CPU.C文件的修改
(1)
添加系統(tǒng)時鐘初始化程序
    C8051F120
采用TIMER0作為系統(tǒng)時鐘中斷源,其代碼為可重入函數(shù):
void InitTimer0(void) reentrant
{SFRPAGE =0x00;//
切換寄存器頁
TMOD =TMOD&0xF0;
TMOD=TMOD | 0x01;//
模式1(16位定時器),僅受TR0控制
TH0=0x70; //
定義Tick=50/(0.02/)
TL0=0x00;
ET0=1;//
允許T0中斷
TR0=1;
}
(2)
任務(wù)堆棧初始化函數(shù)的改寫
   
任務(wù)堆??臻g由高至低依次將保存著PSWACC,B,DPLDPH等寄存器。為了使任務(wù)的調(diào)度一致,初始狀態(tài)的堆棧實際上是模擬了一次中斷發(fā)生后的堆棧結(jié)構(gòu),以便在OSSched()進(jìn)行任務(wù)調(diào)度時,從堆棧中恢復(fù)剛開始運(yùn)行時的處理器現(xiàn)場。當(dāng)前任務(wù)堆棧初始化完成后,OSTaskStklnit返回新的堆棧指針stk,在OSTaskCreate()執(zhí)行時將調(diào)用OS_TaskStkInit的初始化過程,然后再通過調(diào)用OSTCBInit()將返回的sp指針保存到該任務(wù)的TCB塊中。

3.3  OS_CPU.ASM文件的修改
    OS_CPU.ASM
文件是用匯編語言編寫的模塊,包括大量對處理器寄存器的讀寫操作,其中主要由4個匯編語言函數(shù):OSStartHighRdy()、OSCtxSw()、OSIntCtxSw()、OSTickISR()組成,每一個函數(shù)都需要用PUBLIC聲明為可以被外部模塊調(diào)用。
    uCOS II
任務(wù)的切換,系統(tǒng)寄存器需要頻繁完成進(jìn)棧和出棧操作,為了減少代碼編寫工作量,在OS_CPU.ASM中根據(jù)芯片特點(diǎn)將寄存器的進(jìn)棧出棧操作定義為宏。

3.4 數(shù)據(jù)采集任務(wù)的實現(xiàn)(自己功能的實現(xiàn))
   
為了提高數(shù)據(jù)采集實時性和可靠性,對每個模擬量數(shù)據(jù),uCOS II采用單獨(dú)的任務(wù)來實現(xiàn)。下面給出溫度和壓力數(shù)據(jù)采集的實現(xiàn)程序。溫度數(shù)據(jù)采集任務(wù)程序:
void Task1(void *pada)
{
mux_select = MUX_CPU_TEMP;//
溫度數(shù)據(jù)測量
StartCollect();
For(;;)
{read_TEMP_inputs();//
數(shù)據(jù)讀入,標(biāo)度轉(zhuǎn)換
temp_long=ADC0 - 42380/2;
temp_long= (temp_long* 200L)/156;
cpu_temperature=temp_long;
……
OSTimeDly(OS_TICKS_PER_SEC);//
任務(wù)調(diào)度
}
}
壓力數(shù)據(jù)采集任務(wù)程序:
void Task2(void *pada)
{
mux_select = MUX_CPU_PRESS;//
溫度數(shù)據(jù)測量
StartCollect();// start the collecting
For(;;)
{read_Press_inputs();
press_long= ADC0;
press_long= temp_ long;
……
OSTimeDly(OS_TICKS_PER_SEC);//
任務(wù)調(diào)度
}
}

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
我的ucos學(xué)習(xí)分析
uCOS-Ⅱ C51移植筆記
uCOS II內(nèi)核調(diào)度分析
μCOSII在Cortex-M3核ARM處理器上的移植
freeRTOS和UCOS
嵌入式實時系統(tǒng)中局部變量和全局變量
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服