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

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

?? os_cpu_c.c

?? ucos-II的中文注釋源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*
*********************************************************************************************************
*                                               uC/OS-II
*                                         The Real-Time Kernel
*
*                        (c) Copyright 1992-2002, Jean J. Labrosse, Weston, FL
*                                          All Rights Reserved
*
*                                          80x86 Specific code
*                                 LARGE MEMORY MODEL WITH FLOATING-POINT
*                                          Borland C/C++ V4.51
*
*
* File         : OS_CPU_C.C
* By           : Jean J. Labrosse
*********************************************************************************************************
*/

#define  OS_CPU_GLOBALS
#include "includes.h"

/*$PAGE*/
/*
*********************************************************************************************************
*                                             LOCAL CONSTANTS
*
* Note(s) : 1) OS_NTASKS_FP  establishes the number of tasks capable of supporting floating-point.  One
*              task is removed for the idle task because it doesn't do floating-point at all.
*           2) OS_FP_STORAGE_SIZE  currently allocates 128 bytes of storage even though the 80x86 FPU 
*              only require 108 bytes to save the FPU context.  I decided to allocate 128 bytes for 
*              future expansion.  
*********************************************************************************************************
*/
/*
*********************************************************************************************************
                                                     局部常量
 備注:1、OS_NTASKS_FP:建立能支持浮點的任務數,空閑任務將被去除因為它一
                         點浮點也不會算。
                  2、OS_FP_STORAGE_SIZE:即使80x86浮點運算單元只需要108字節去保存浮點運算
                        內容,但是我分配128字節,作為進一步擴展
*********************************************************************************************************
*/



#define  OS_NTASKS_FP         (OS_MAX_TASKS + OS_N_SYS_TASKS - 1)//OS_N_SYS_TASKS 為系統統計任務
#define  OS_FP_STORAGE_SIZE   128

/*
*********************************************************************************************************
*                                             LOCAL VARIABLES
*********************************************************************************************************
*/
//局部變量

static  OS_MEM  *OSFPPartPtr;          /* Pointer to memory partition holding FPU storage areas        */

                                       /* I used INT32U to ensure that storage is aligned on a ...     */
                                       /* ... 32-bit boundary.                                         */
//指向內存分割區掌握FPU存儲空間的指針。我用了32位保證在32位上是對齊模式
//它是一個指針,指向此建立的分區,靜態變量,用戶程序不能訪問
static  INT32U   OSFPPart[OS_NTASKS_FP][OS_FP_STORAGE_SIZE / sizeof(INT32U)];
//OS_NTASKS_FP為支持浮點的任務數,OS_FP_STORAGE_SIZE是浮點存儲空間
//OSFPPart[][]是實際的分區,保存了所有任務的FPU寄存器內容。至少要為它
//提供(OS_MAX_TASK+1)*128字節的RAM,因為它是靜態,所以用戶不能訪問
/*$PAGE*/
/*
*********************************************************************************************************
*                                        INITIALIZE FP SUPPORT
*
* Description: This function is called to initialize the memory partition needed to support context
*              switching the Floating-Point registers.  This function MUST be called AFTER calling
*              OSInit().
*
* Arguments  : none
*
* Returns    : none
*
* Note(s)    : 1) Tasks that are to use FP support MUST be created with OSTaskCreateExt().
*              2) For the 80x86 FPU, 108 bytes are required to save the FPU context.  I decided to
*                 allocate 128 bytes for future expansion.  Also, I used INT32U to ensure that storage 
*                 is aligned on a 32-bit boundary.
*              3) I decided to 'change' the 'Options' attribute for the statistic task in case you
*                 use OSTaskStatHook() and need to perform floating-point operations in this function.
*                 This only applies if OS_TaskStat() was created with OSTaskCreateExt().
*********************************************************************************************************
*/
/*
*********************************************************************************************************
                                                                      初始化浮點指針支持
 描述:這個函數初始化需要支持任務轉換浮點寄存器的內存分割區。
                  必須在調用OSInit()后再調用
參數:無
返回:無
備注:1、支持浮點指針的任務必須由OSTaskCreateExt()建立
                 2、在80x86 FPU中,要108字節去保存FPU內容,我準備用128字節去作為進
                     一步擴展。也用了INT32U去保證在32位邊界線上對齊
                 3、在此函數中,你用OSTaskStatHook()又需要浮點運算操作情況下,我想改變
                       它的選項。這只應用于OS_TaskStat() 用 OSTaskCreateExt().建立的情況。
*********************************************************************************************************
*/


void  OSFPInit (void)//浮點處理單元初始化
{
    INT8U    err;
#if OS_TASK_STAT_EN && OS_TASK_CREATE_EXT_EN//允許統計任務和浮點建立任務
    OS_TCB  *ptcb;//任務控制塊
    void    *pblk;
#endif
    
    
    OSFPPartPtr = OSMemCreate(&OSFPPart[0][0], OS_NTASKS_FP, OS_FP_STORAGE_SIZE, &err);
//OSFPInit()將此分區信息告訴ucosII,OSMemCreate函數把一個內存分區分成多塊,
//每塊128B,并將這些塊鏈成單向鏈表,當需要一個內存保存FPU寄存器時,
//只須調用OSMemGet()函數
    
#if OS_TASK_STAT_EN && OS_TASK_CREATE_EXT_EN       /* CHANGE 'OPTIONS' for OS_TaskStat()               */
	//允許統計任務和浮點建立任務,改變OS_TaskStat() 的選項

    ptcb            = OSTCBPrioTbl[OS_STAT_PRIO];
//改變OS_TaskStat()屬性,使之能進行浮點運算,這樣做是為了使用戶
//可以通過OS_TaskStatHook()來擴展OS_TaskStat()函數的功能,使之可以做浮點運算。
//在此,OSFPInit()得到統計任務的任務控制塊的指針。
    ptcb->OSTCBOpt |= OS_TASK_OPT_SAVE_FP;         /* Allow floating-point support for Statistic task  */
//指明是需要保存和恢復浮點寄存器的,因為系統默認為0
    pblk            = OSMemGet(OSFPPartPtr, &err); /* Get storage for FPU registers                    */
//得到一個緩沖區,用于在統計任務OS_TaskStat()掛起時,保存該任務的浮點
//寄存器內容。
    if (pblk != (void *)0) {                       /* Did we get a memory block?                       */
		//檢查得到的緩沖區是否合法
        ptcb->OSTCBExtPtr = pblk;                  /* Yes, Link to task's TCB                          */
		//合法,保存在OS_TCB的擴展變量,OSTCBExtPtr中的指針指向
		//保存FPU的存儲區
        OSFPSave(pblk);                            /*      Save the FPU registers in block             */
		//將FPU寄存器當前內容保存在pblk指向的地方。
    }
#endif
}

/*$PAGE*/
/*
*********************************************************************************************************
*                                       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.
*********************************************************************************************************
*/
/*
*********************************************************************************************************
                                          系統初始化開始接口函數
  描述:在  OSInit()開始的時候由OSInit()調用                      
*********************************************************************************************************
*/


#if OS_CPU_HOOKS_EN > 0 && OS_VERSION > 203
void  OSInitHookBegin (void)
{
}
#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.
*********************************************************************************************************
*/
/*
*********************************************************************************************************
                                               系統初始化結束接口函數
 描述:在OSInit()結束的時候由OSInit()調用
 備注:調用此函數時要關中斷
 此函數調用了OSFPInit(),它負責設置保留的內存分區,該內存分區
 用來保存各任務的浮點寄存器
*********************************************************************************************************
*/


#if OS_CPU_HOOKS_EN > 0 && OS_VERSION > 203
void  OSInitHookEnd (void)
{
    OSFPInit();//它負責設置保留的內存分區,該內存分區
 //用來保存各任務的浮點寄存器
}
#endif

/*$PAGE*/
/*
*********************************************************************************************************
*                                          TASK CREATION HOOK
*
* Description: This function is called when a task is created.
*
* Arguments  : ptcb   is a pointer to the task control block of the task being created.
*
* Note(s)    : 1) Interrupts are disabled during this call.
*              2) I decided to change the options on the statistic task to allow for floating-point in
*                 case you decide to do math. in OSTaskStatHook().
*********************************************************************************************************
*/
/*
*********************************************************************************************************
                                                      任務建立接口函數
描述:任務建立的時候調用
參數:ptcb:將要建立任務的任務控制塊指針
備注:1、調用的時候中斷要關閉
                2、當我們要在OSTaskStatHook()中作計算的時候我打算改變
                       它的屬性使之能夠浮點運算
                                                      
*********************************************************************************************************
*/


#if OS_CPU_HOOKS_EN > 0
void OSTaskCreateHook (OS_TCB *ptcb)
{
    INT8U  err;
    void  *pblk;
    
    
    if (ptcb->OSTCBOpt & OS_TASK_OPT_SAVE_FP) {  /* See if task needs FP support                      */
		//任務是否需要支持浮點
        pblk = OSMemGet(OSFPPartPtr, &err);      /* Yes, Get storage for FPU registers                */
		//需要的話,得到存儲FPU寄存器的存儲空間
        if (pblk != (void *)0) {                 /*      Did we get a memory block?                   */
			//得到的空間是否合法
            ptcb->OSTCBExtPtr = pblk;            /*      Yes, Link to task's TCB                      */
			//合法,加到任務TCB單向鏈表
            OSFPSave(pblk);                      /*           Save the FPU registers in block         */
			//將FPU寄存器當前內容保存在pblk指向的地方。這一過程中,FPU包含
          //了什么內容不重要,重要的是,FPU寄存器包含了有效數值
		
        }
    }
}
#endif

/*
*********************************************************************************************************
*                                           TASK DELETION HOOK
*
* Description: This function is called when a task is deleted.
*
* Arguments  : ptcb   is a pointer to the task control block of the task being deleted.
*
* Note(s)    : 1) Interrupts are disabled during this call.
*********************************************************************************************************
*/
/*
*********************************************************************************************************
                                               任務刪除接口函數
描述:當一個任務刪除時這個函數被調用
參數:ptcb:將要建立任務的任務控制塊指針
備注:1、調用的時候中斷要關閉
                2、OSTaskDel()通過調用OSTaskDelHook()函數擴展其功能,
                因為在建立任務時,分配了一個內存塊,用于保存浮點寄存器的內容
                所以在任務刪除時,需要釋放該內存塊。

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
天天色综合天天| 黑人精品欧美一区二区蜜桃| 亚洲第一二三四区| 国产麻豆9l精品三级站| 色国产精品一区在线观看| 久久久激情视频| 青青草91视频| 欧美人妇做爰xxxⅹ性高电影 | 中文字幕欧美日韩一区| 亚洲精品一区二区三区在线观看| 中日韩免费视频中文字幕| 亚洲免费观看视频| 国产乱妇无码大片在线观看| 色狠狠一区二区| 中文字幕欧美一区| 久久激五月天综合精品| 欧美日韩一级大片网址| 国产午夜一区二区三区| 国产一区二区三区久久悠悠色av| 欧美专区日韩专区| 欧美精品乱码久久久久久| 亚洲欧美在线视频观看| 蓝色福利精品导航| 欧美一级xxx| 一区二区三区四区亚洲| 91日韩在线专区| 久久青草欧美一区二区三区| 美女一区二区三区在线观看| 色香色香欲天天天影视综合网| 精品乱人伦小说| 麻豆成人久久精品二区三区红| 色菇凉天天综合网| 亚洲黄色在线视频| 99久久久精品| 亚洲男人的天堂在线观看| 成人性色生活片| 欧美电视剧免费观看| 黄一区二区三区| 欧美一区二区三区视频免费播放| 日韩av电影天堂| 欧美日韩www| 久久国产精品99久久久久久老狼| 欧美日韩在线播放一区| 日韩av电影免费观看高清完整版 | 亚洲国产乱码最新视频 | 5858s免费视频成人| 日韩综合一区二区| 欧美美女一区二区三区| 美女视频黄久久| 欧美变态口味重另类| 精品制服美女丁香| 精品剧情v国产在线观看在线| 日韩激情在线观看| 精品99一区二区| 国产精品99久久久久久似苏梦涵| 欧美极品xxx| 成人18视频在线播放| 亚洲成人一区在线| 在线不卡中文字幕播放| 久久国产精品露脸对白| 国产欧美日韩视频在线观看| 国产九色sp调教91| 一区二区三区成人在线视频| 欧美在线观看视频一区二区 | 亚洲一区二区三区爽爽爽爽爽| 91在线国内视频| 国产精品欧美一级免费| 色综合久久精品| 日韩中文字幕91| 精品少妇一区二区三区日产乱码| 另类人妖一区二区av| 久久精品欧美日韩| 欧美人与性动xxxx| 国产麻豆视频一区| 亚洲不卡av一区二区三区| 欧美一区二区三区公司| 97se亚洲国产综合自在线观| 亚洲国产精品天堂| 欧美国产成人精品| 欧美日韩一区二区三区视频| 国产不卡一区视频| 亚洲综合在线第一页| 久久午夜羞羞影院免费观看| 91视频免费看| 亚洲成人激情av| 中文在线资源观看网站视频免费不卡| 一本色道**综合亚洲精品蜜桃冫| 久久av老司机精品网站导航| 国产精品国产三级国产普通话99 | 91啪在线观看| 国产在线精品不卡| 亚洲日本va午夜在线影院| 337p日本欧洲亚洲大胆色噜噜| www.欧美精品一二区| 美女免费视频一区| 亚洲免费观看高清完整| 亚洲国产精品黑人久久久| 欧美高清精品3d| 在线精品视频免费观看| 国产精品一二三四五| 国产精品国产成人国产三级| 欧美一区二区三区视频免费播放| 国产成人亚洲综合a∨婷婷图片| 日韩国产欧美在线播放| 亚洲精品国产a久久久久久| 久久综合九色综合97婷婷| 欧美日韩国产一级二级| 91视频一区二区三区| 93久久精品日日躁夜夜躁欧美| 久久激情五月激情| 麻豆国产91在线播放| 亚洲丰满少妇videoshd| 一区二区三区四区在线| 自拍偷拍欧美精品| 亚洲欧洲韩国日本视频| 国产日韩精品一区| 欧美日韩成人一区| 4438x亚洲最大成人网| 国产福利一区二区三区| 成人免费高清在线观看| 国产综合成人久久大片91| 国产一区二区免费在线| 精品一区二区三区久久| 国产尤物一区二区| 久久99精品一区二区三区| 国产综合色视频| 国产麻豆91精品| 成人午夜激情视频| 国产91色综合久久免费分享| 成人一级片在线观看| 国产美女娇喘av呻吟久久| 成人久久视频在线观看| 成人精品gif动图一区| 97se亚洲国产综合自在线不卡| 成人国产精品免费观看动漫 | 欧美国产日韩亚洲一区| 国产精品午夜电影| 一区二区三区资源| 亚洲图片欧美色图| 免费看日韩a级影片| 精品一区二区久久| 成人av电影在线| 成人a区在线观看| 欧美日韩一区三区| 欧美一二三区在线| 国产精品黄色在线观看| 一区二区三区日韩欧美精品| 三级欧美在线一区| 亚洲黄色小视频| 日韩专区一卡二卡| 国产一区二区中文字幕| av午夜一区麻豆| 欧美日韩不卡一区| 久久免费看少妇高潮| 亚洲男女一区二区三区| 日韩在线播放一区二区| 处破女av一区二区| 一本大道久久a久久综合婷婷 | 综合久久综合久久| 亚洲午夜免费电影| 国产成a人亚洲| 91成人免费在线视频| 精品福利视频一区二区三区| 国产拍揄自揄精品视频麻豆| 亚洲第一狼人社区| 国产激情一区二区三区四区| 欧美日韩亚洲不卡| 久久人人超碰精品| 人人精品人人爱| 成人av资源在线| 精品国产乱码久久久久久久久 | 精品91自产拍在线观看一区| 中文字幕一区三区| 国产精品888| 精品视频一区二区三区免费| 欧美激情综合在线| 日本中文字幕不卡| 欧美色大人视频| 国产视频一区在线观看| 老司机午夜精品| 欧美性一二三区| 亚洲女同一区二区| 国产一区在线看| 亚洲精品一区二区三区福利| 一区二区三区中文免费| 97久久久精品综合88久久| 日韩美女视频在线| 日韩精品免费专区| 91免费观看视频| 亚洲日本va午夜在线影院| 国产一区二区伦理| 精品少妇一区二区三区视频免付费 | 日韩成人精品视频| 欧美丰满少妇xxxxx高潮对白| 亚洲国产精华液网站w| 国产成人在线色| 精品国产乱码久久久久久久| 久久精品国产99国产| 7777精品伊人久久久大香线蕉经典版下载 | 久久免费国产精品|