亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? os_cpu_c.c

?? 一共40M 不能貼在論壇中。絕對好東西。要得話留下email
?? C
字號:
/*
*********************************************************************************************************
*                                               uC/OS-II
*                                               實時內核
*
*                        (c) Copyright 1992-1998, Jean J. Labrosse, Plantation, FL
*                                               版權所有
*
*                                            MCU-51 專用代碼
*                                           KEIL C51大模式編譯
*
* 文件名 : OS_CPU_C.C
* 作者   : Jean J. Labrosse
* 改編   : 楊屹 gdtyy@ri.gdt.com.cn 巨龍公司系統集成開發部 2002.09.27
* 改編   : 鐘文青,升級到與ucOS-II 2.51的代碼,2003.5
*********************************************************************************************************
*/

#define  OS_CPU_GLOBALS
#include "includes.h"

/*
*********************************************************************************************************
*                                        初始化任務堆棧
*
* 描述       : 這個函數被OSTaskCreate()或OSTaskCreateExt()調用,以便初始化新創建任務的堆棧結構。本函數
*              與處理器高度相關。
*
* 參數       : task          指向任務代碼的指針
*
*              pdata         當任務第一次執行時將要傳入任務的用戶數據結構指針
*
*              ptos          棧頂指針。ptos指針被默認為用戶堆棧入口指針。如果OS_STK_GROWTH被置1,那么,
*                            ptos指向用戶堆棧的最高有效地址。同樣地,如果OS_STK_GROWTH清0,ptos將指向
*                            用戶堆棧的最低有效地址。
*
*              opt           指定可以改變OSTaskStkInit()行為的選項。(見uCOS_II.H for OS_TASK_OPT_???)。
*
* 返回值     : 我修改了原來的程序,使函數總是返回用戶堆??臻g的最低有效地址。這樣修改提高了TCB換入換出
*              的效率。
*
* 注意       : 任務堆棧結構:
*
*                                    ---------- -
*                 用戶棧最高地址---->|        | |
*                                    ---------- |
*                                    |   ...  | 仿真堆棧空間
*----------                          ---------- | 每任務一個
*|OSTCBCur|               ?C_XBP---->|        | | KEIL自動處理
*----------                          ---------- -
*    |                               |空閑間隔|
*    |     -----------------------   ----------                           ----------
*    \---->|OSTCBCur->OSTCBStkPtr|   |?C_XBP低|                    SP---->|        |
*          -----------------------   ----------                           ----------
*                     |              |?C_XBP高|                           |        |
*                     |              ---------- -                         ----------
*                     |              |        | |                         |   .    |
*                     |              ---------- |                         |   .    |
*                     |              |        | |                         |   .    |
*                     |              ---------- |                         ----------
*                     |              |   .    |長度                       |        | +1
*                     |              |   .    | |                         ----------
*                     |              |   .    | |             OSStack---->|        | 0
*                     |              ---------- |                         ----------
*                     |              |        | |          OSStkStart---->| 不關心 | -1  低地址
*                     |              ---------- -                         ----------
*                     \------------->|  長度  | 低地址                   系統硬件堆棧
*                                    ----------
*                                     用戶堆棧                       長度=SP-OSStkStart
*********************************************************************************************************
*/

OS_STK *OSTaskStkInit (void (*task)(void *pd) reentrant, void *ppdata, OS_STK *ptos, INT16U opt) reentrant
{    
    OS_STK *stk;

    ppdata = ppdata;
    opt    = opt;                               //opt沒被用到,保留此語句防止告警產生    
    stk    = ptos;                              //用戶堆棧最低有效地址
    *stk++ = 15;                                //用戶堆棧長度
    *stk++ = (INT16U)task & 0xFF;               //任務地址低8位
    *stk++ = (INT16U)task >> 8;                 //任務地址高8位    
    *stk++ = 0x0A;                              //ACC
    *stk++ = 0x0B;                              //B
    *stk++ = 0x00;                              //DPH
    *stk++ = 0x00;                              //DPL
    *stk++ = 0x00;                              //PSW
    *stk++ = 0x00;                              //R0
    
	//R3、R2、R1用于傳遞任務參數ppdata,其中R3代表存儲器類型,R2為高字節偏移,R1為低字節位移。
	//通過分析KEIL匯編,了解到任務的void *ppdata參數恰好是用R3、R2、R1傳遞,不是通過虛擬堆棧。
    *stk++ = (INT16U)ppdata & 0xFF;             //R1
    *stk++ = (INT16U)ppdata >> 8;               //R2
    *stk++ = 0x01;                              //R3  因為我用的全是XDATA,所以存儲器類型固定為1,見C51.PDF第178頁說明。

    *stk++ = 0x04;                              //R4
    *stk++ = 0x05;                              //R5
    *stk++ = 0x06;                              //R6
    *stk++ = 0x07;                              //R7
                                                //不用保存SP,任務切換時根據用戶堆棧長度計算得出。    
    *stk++ = (INT16U) (ptos+MaxStkSize) >> 8;   //?C_XBP 仿真堆棧指針高8位
    *stk++ = (INT16U) (ptos+MaxStkSize) & 0xFF; //?C_XBP 仿真堆棧指針低8位
        
    return ((void *)ptos);
}

#if OS_CPU_HOOKS_EN

/*
*********************************************************************************************************
*                                       OS INITIALIZATION HOOK
*                                            (BEGINNING)
*
* Description: This function is called by OSInit() at the beginning of OSInit().
*
* Arguments  : none
*
* Note(s)    : 1) Interrupts should be disabled during this call.
*********************************************************************************************************
*/
#if OS_VERSION > 203
void OSInitHookBegin (void) reentrant
{

}
#endif

/*
*********************************************************************************************************
*                                       OS INITIALIZATION HOOK
*                                               (END)
*
* Description: This function is called by OSInit() at the end of OSInit().
*
* Arguments  : none
*
* Note(s)    : 1) Interrupts should be disabled during this call.
*********************************************************************************************************
*/
#if OS_VERSION > 203
void OSInitHookEnd (void) reentrant
{
}
#endif

/*
*********************************************************************************************************
*                                          任務創建鉤掛函數
*
* 描述       : 任務創建時調用
*
* 參數       : ptcb是指向將被創建任務的任務控制塊的指針。
*
* 注意       : 1) 調用期間中斷被禁止
*********************************************************************************************************
*/
void OSTaskCreateHook (OS_TCB *ptcb) reentrant
{
    ptcb = ptcb;                       /* Prevent compiler warning                                     */
}


/*
*********************************************************************************************************
*                                          任務刪除鉤掛函數
*
* 描述       : 任務刪除時調用
*
* 參數       : ptcb是指向將被刪除任務的任務控制塊的指針。
*
* 注意       : 1) 調用期間中斷被禁止
*********************************************************************************************************
*/
#if OS_TASK_DEL_EN > 0
void OSTaskDelHook (OS_TCB *ptcb) reentrant
{
    ptcb = ptcb;                       /* Prevent compiler warning                                     */
}
#endif

/*
*********************************************************************************************************
*                                          任務切換鉤掛函數
*
* 描述       : 執行任務切換時調用。這允許你在上下文切換期間執行其它操作。
*
* 參數       : 無
*
* 注意       : 1) 調用期間中斷被禁止
*              2) 假定全局指針'OSTCBHighRdy'已經指向了將要被換入的任務控制塊(即:最高優先級任務),并且
*                 'OSTCBCur'指向了將被換出的任務(即:當前任務)。
*********************************************************************************************************
*/
void OSTaskSwHook (void) reentrant
{
}

/*
*********************************************************************************************************
*                                          統計任務鉤掛函數
*
* 描述       : 這個函數每秒鐘被uC/OS-II統計任務調用。這么做使你的應用程序可以增加統計任務的功能。
*
* 注意       : 無
*********************************************************************************************************
*/
#if OS_TASK_STAT_EN > 0
void OSTaskStatHook (void) reentrant
{
}
#endif

/*
*********************************************************************************************************
*                                           OSTCBInit() HOOK
*
* Description: This function is called by OSTCBInit() after setting up most of the TCB.
*
* Arguments  : ptcb    is a pointer to the TCB of the task being created.
*
* Note(s)    : 1) Interrupts may or may not be ENABLED during this call.
*********************************************************************************************************
*/
#if OS_VERSION > 203
void OSTCBInitHook (OS_TCB *ptcb) reentrant
{
    ptcb = ptcb;                                           /* Prevent Compiler warning                 */
}
#endif

/*
*********************************************************************************************************
*                                          定時鉤掛函數
*
* 描述       : 本函數每一滴答被調用一次。
*
* 參數       : 無
*
* 注意       : 1) 在本調用期間中斷可以或不可以使能。
*********************************************************************************************************
*/
void OSTimeTickHook (void) reentrant
{
}

/*
*********************************************************************************************************
*                                             IDLE TASK HOOK
*
* Description: This function is called by the idle task.  This hook has been added to allow you to do  
*              such things as STOP the CPU to conserve power.
*
* Arguments  : none
*
* Note(s)    : 1) Interrupts are enabled during this call.
*********************************************************************************************************
*/
#if OS_VERSION >= 251
void OSTaskIdleHook (void) reentrant
{
}
#endif

#endif

/*
   使用C語言的中斷處理函數有助與提高程序的移植性。建議中斷程序不要太長,如果長則使用信號量來與任務同步,
   在外部任務中實現大量的處理。
   中斷處理例程都放在下面。
*/

void UserTickTimer(void)
{
    TH0=0x70;    		//MCS51定時器方式1,必須在發生中斷時,重新賦值并再次啟動計時
    TL0=0;            	//Tick=50次/秒(即0.02秒/次),晶振22.1184M
    TR0=1;
}

/* 
  ucOS-II系統時鐘中斷處理程序
*/
void OSTickISR(void) interrupt 1
{
    OSIntEnter();					// Must be called first at every hardware interrupt entry point 
    UserTickTimer();				// User functions can be called here.
   	OSTimeTick();					// Must be called during tick isr 
   	OSIntExit();					// Must be called finally at every hardware interupt exit point 
}

/*--------------------------------------------------------------*/
/* ucOS-II的中斷服務程序示例                                    */
/*--------------------------------------------------------------*/
#include "serial.h"

void SerialISR(void) interrupt 4
{
#if OS_CRITICAL_METHOD == 3         // Allocate storage for CPU status register 
    OS_CPU_SR  cpu_sr;
#endif 

    OSIntEnter();					// Must be called first at every hardware interrupt entry point 
    OS_ENTER_CRITICAL();
    if(TI)
	{
	  TI=0;
      pc_send.ptr++;
      if (pc_send.ptr < pc_send.count)
        SBUF=pc_send.buffer[pc_send.ptr];
	}
	else if(RI)
	{
	    RI=0;
//處理輸入字符
	}
    OS_EXIT_CRITICAL();

   	OSIntExit();			// Must be called finally at every hardware interupt exit point 
}


/*
  設置硬件寄存器的初始值。
  初始化定時器0,作為ucOS-II的系統時鐘。
  還有其他的與硬件相關的初始化也可以放在這里。
*/

//串口初始化  0xfd=19200,0xfa=9600,0xf4=4800,0xe8=2400,0xd0=1200
void InitHardware(void) reentrant
{   
    TMOD = 0x21;   //定時器0:模式1(16位定時器),僅受TR0控制;定時器1:波特率發生器
    TH0  = 0x70;   //定義Tick=50次/秒(即0.02秒/次),TH,TL值與CPU的頻率有關(22.1184M)
    TL0  = 0x00;   //OS_CPU_C.C中定時器中斷響應也要設置,OS_CFG.H中OS_TICKS_PER_SEC也有關系
    //ET0  = 1;    //允許T0中斷(在第一個任務開始執行時才開時鐘中斷,否則萬一中斷系統進入不可知狀態)
    TR0  = 1;

    TH1   = 0xFA;  //晶振22.1084, 波特率 9600
    ET1   = 0;
    TR1   = 1;	   //start timer1
    SCON  = 0x50;
    ES	  = 1;

    //設置串口收發的初始值
    pc_send.ptr=0;
    pc_send.count=0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲香肠在线观看| 美女免费视频一区二区| 欧美成人精品1314www| av电影在线观看完整版一区二区| 天天影视涩香欲综合网| 国产精品久久久久久久岛一牛影视| 欧美私模裸体表演在线观看| 成人一区二区视频| 久久疯狂做爰流白浆xx| 亚洲成人高清在线| 中文字幕在线观看不卡| www亚洲一区| 69堂精品视频| 欧美中文字幕一区| 91在线视频播放地址| 国产精品一区二区视频| 麻豆久久久久久久| 香蕉影视欧美成人| 亚洲伦在线观看| 国产精品久久久久久久久免费相片| 精品久久久久一区| 日韩一区二区在线观看视频播放| 在线观看日韩精品| 91在线码无精品| 99国产精品视频免费观看| 国产不卡视频在线播放| 久久99久久久久| 男人的天堂亚洲一区| 性久久久久久久久久久久| 亚洲一区在线电影| 一区二区三区四区亚洲| 亚洲精品你懂的| 一区二区三区四区五区视频在线观看| 国产精品嫩草影院av蜜臀| 国产清纯白嫩初高生在线观看91 | 韩国毛片一区二区三区| 日韩中文字幕91| 香蕉成人伊视频在线观看| 亚洲第一主播视频| 亚洲国产日韩a在线播放 | 国产风韵犹存在线视精品| 精品中文字幕一区二区| 久久国产精品99精品国产| 老司机午夜精品99久久| 精品一区二区三区在线观看| 精品一区二区三区免费视频| 激情欧美一区二区| 国产成人夜色高潮福利影视| 国产高清视频一区| 99视频精品免费视频| 91视频91自| 欧美在线视频全部完| 欧美三级电影一区| 日韩欧美色综合| 国产偷国产偷亚洲高清人白洁| 亚洲国产精品成人综合 | 欧美日韩一区二区三区四区 | 日韩午夜av电影| 91精品国产乱码久久蜜臀| 欧美一区二区在线免费播放| 精品捆绑美女sm三区| 久久精品一区二区三区不卡 | 免费成人小视频| 国产精品乡下勾搭老头1| 不卡av免费在线观看| 欧美午夜在线一二页| 欧美一区二区视频免费观看| 久久久亚洲欧洲日产国码αv| 欧美国产精品劲爆| 亚洲一区二区精品久久av| 日韩av网站免费在线| 国产成人在线观看免费网站| 色诱亚洲精品久久久久久| 欧美群妇大交群中文字幕| 久久综合久久综合久久| 亚洲日本免费电影| 美女脱光内衣内裤视频久久影院| 成人免费观看男女羞羞视频| 精品视频一区二区三区免费| 久久久久国产免费免费| 亚洲国产一区二区a毛片| 国产在线看一区| 在线观看日韩国产| 欧美精品一区二区不卡| 一区二区三区国产豹纹内裤在线| 日本一不卡视频| 91欧美一区二区| 久久一二三国产| 亚洲成人av在线电影| 国产精品99久久久久久宅男| 欧美三级乱人伦电影| 国产欧美综合在线| 视频一区视频二区在线观看| 成人午夜伦理影院| 欧美岛国在线观看| 亚洲综合在线五月| 国产精品123区| 欧美日韩高清在线播放| 国产精品久久久久影院亚瑟 | 国产成人亚洲综合a∨婷婷| 欧美影视一区二区三区| 久久在线观看免费| 亚洲1区2区3区4区| 91影院在线免费观看| 久久色在线观看| 亚洲国产婷婷综合在线精品| 9久草视频在线视频精品| 日韩欧美电影一区| 亚洲va韩国va欧美va| 成人美女视频在线观看18| 日韩一级片网址| 一级日本不卡的影视| 成人精品鲁一区一区二区| 日韩午夜精品视频| 婷婷久久综合九色国产成人| 91日韩在线专区| 国产精品久久久久毛片软件| 国产精品18久久久| 欧美精品一区在线观看| 天天色天天操综合| 欧美亚洲高清一区二区三区不卡| 国产精品国产三级国产普通话三级| 久久国产精品免费| 精品国产乱码久久久久久蜜臀| 婷婷国产v国产偷v亚洲高清| 欧美日韩综合不卡| 亚洲一区二区在线视频| 色偷偷88欧美精品久久久| 综合久久久久综合| 97se亚洲国产综合在线| 日韩美女精品在线| 99精品黄色片免费大全| 亚洲码国产岛国毛片在线| 91免费国产在线| 一区二区三区在线视频免费观看| 在线看日本不卡| 一区二区三区中文免费| 欧美专区在线观看一区| 亚洲成av人片在www色猫咪| 在线观看日韩精品| 婷婷中文字幕一区三区| 欧美福利一区二区| 麻豆91在线看| 久久―日本道色综合久久| 国产激情视频一区二区在线观看 | 国产精品不卡在线| av亚洲精华国产精华精华| 亚洲男人的天堂av| 欧美日韩国产另类一区| 蜜臀久久99精品久久久久宅男| 欧美大白屁股肥臀xxxxxx| 国产精品中文字幕一区二区三区| 久久久天堂av| 99视频一区二区| 亚洲国产欧美日韩另类综合 | 成人天堂资源www在线| 中文字幕在线观看不卡| 欧美偷拍一区二区| 麻豆精品新av中文字幕| 国产亚洲精品中文字幕| 91在线视频观看| 日韩av中文字幕一区二区三区| 精品美女一区二区三区| aaa亚洲精品一二三区| 亚洲成人免费看| 久久免费看少妇高潮| 色美美综合视频| 另类小说图片综合网| 国产精品国产三级国产有无不卡| 欧美裸体bbwbbwbbw| 国产在线国偷精品免费看| 亚洲免费观看高清在线观看| 91精品国产综合久久久久久| 国产精品99久久久久久似苏梦涵| 亚洲人妖av一区二区| 91精品国产综合久久香蕉的特点| 国产成人亚洲精品青草天美| 一区二区三区在线观看动漫 | 国产精品国产三级国产a| 欧美在线观看禁18| 国精品**一区二区三区在线蜜桃| 中文字幕中文字幕一区| 91精品国产一区二区三区香蕉| 懂色一区二区三区免费观看| 亚洲午夜免费电影| 国产日韩精品一区二区三区在线| 欧美丝袜自拍制服另类| 韩国av一区二区三区| 亚洲精品视频一区二区| 精品区一区二区| 在线免费观看视频一区| 国产成人超碰人人澡人人澡| 天天综合网 天天综合色| 中文字幕五月欧美| 久久综合999| 91精品国产综合久久福利 | 99riav久久精品riav| 日本女优在线视频一区二区| 国产精品国产三级国产有无不卡| 日韩女同互慰一区二区|