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

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

?? manual.txt

?? 關于C8051F022的RTOS系統
?? TXT
?? 第 1 頁 / 共 3 頁
字號:
                Small RTOS(51) 1.12.1v 使用手冊 

概述:
    Small RTOS是一個源代碼公開的多任務實時操作系統,Small RTOS 51
是其在8051系列處理器上的移植(使用keil c51)。Small RTOS可以簡化那
些復雜而且時間要求嚴格的工程的軟件設計工作.本手冊主要講述Small RTOS
的使用,本說明了在8051系列處理器上使用應該注意的問題。同時講述了
Small RTOS的移植。
    本手冊僅針對Small RTOS(51) 1.12版本




Small RTOS的特點:
(1)公開源代碼
    只要遵循許可協議,任何人可以免費獲得源代碼。
(2)可移植
    作者盡量使用把與CPU相關部分壓縮到最小,與CPU無關部分用ansi c編
    寫。
(3)可固化
    Small RTOS為嵌入系統設計,如果您有固化手段,它可以嵌入到您的產
    品中成為產品的一部分。
(4)占先式
    Small RTOS可以管理17個任務,用戶最多可以使用16個任務,每個任務
    優先級不同。
(5)中斷管理
    中斷可以使正在執行的任務掛起。如果優先級更高的任務被中斷喚醒,則
    高優先級的任務在中斷嵌套全部退出后立即執行。中斷嵌套層數可達255
    層。如果需要,可以禁止中斷嵌套管理。
(6)RAM需求小
    Small RTOS為小RAM系統設計,應而RAM需求小,相應的,系統服務也少。




Small RTOS的使用:
(1)系統配置:
    os_cfg.h中定義了一些常量可以配置系統,具體定義如下:

    #define OS_MAX_TASKS            4           /* 最大任務數1~16,也就是實際任務數                         */
    #define OS_TICKS_PER_SEC        10          /* 聲明1秒系統系統節拍數                                    */
    #define EN_USER_TICK_TIMER      0           /* 禁止(0)或允許(1)系統定時中斷調用用戶函數UserTickTimer()  */
    #define EN_OS_INT_ENTER         1           /* 禁止(0)或允許(1)中斷嵌套管理                             */
    #define EN_TIMER_SHARING        1           /* 禁止(0)或允許(1)定時器中斷調用OSTimeTick()               */
    #define TICK_TIMER_SHARING      1           /* 定義進入多少次硬件中斷為一次系統定時器軟中斷             */

    #define EN_OS_Q                 0           /* 禁止(0)或允許(1)消息隊列                                 */
    #define EN_OS_Q_CHK             0           /* 禁止(0)或允許(1)校驗消息隊列指針                         */
    #define OS_Q_MEM_SEL            xdata       /* 消息隊列存儲空間選擇,keil c51有用,必須為idata、xdata   */
                                                /* 不是keil c51時它必須為空格                               */
    #define EN_OS_Q_PENT            1           /* 禁止(0)或允許(1)等待隊列中的消息                         */
    #define EN_OS_Q_ACCEPT          0           /* 禁止(0)或允許(1)無等待的從隊列中取得消息                 */
    #define EN_OS_Q_POST            0           /* 禁止(0)或允許(1)FIFO方式相對列發送消息                   */
    #define EN_OS_Q_POST_FRONT      1           /* 禁止(0)或允許(1)LIFO方式相對列發送消息                   */
    #define EN_OS_Q_INT_POST        0           /* 禁止(0)或允許(1)中斷中FIFO方式相對列發送消息             */
    #define EN_OS_Q_INT_POST_FRONT  1           /* 禁止(0)或允許(1)中斷中LIFO方式相對列發送消息             */
    #define EN_OS_Q_NMsgs           1           /* 禁止(0)或允許(1)取得隊列中消息數                         */
    #define EN_OS_Q_SIZE            0           /* 禁止(0)或允許(1)取得隊列總容量                           */
    #define EN_OS_Q_FLUSH           0           /* 禁止(0)或允許(1)清空隊列                                 */

    #define EN_OS_SEM               0           /* 禁止(0)或允許(1)信號量                                   */
    #define EN_OS_SEM_CHK           0           /* 禁止(0)或允許(1)校驗信號量索引                           */
    #define OS_SEM_MEM_SEL          idata       /* 信號量儲空間選擇,keil c51有用,必須為idata、xdata       */
                                                /* 不是keil c51時它必須為空格                               */
    #define OS_MAX_SEMS             2           /* 最大信號量數目                                           */
    #define EN_OS_SEM_PENT          1           /* 禁止(0)或允許(1)等待信號量                               */
    #define EN_OS_SEM_ACCEPT        0           /* 禁止(0)或允許(1)無等待請求信號量                         */
    #define EN_OS_SEM_INT_POST      0           /* 禁止(0)或允許(1)中斷中發送信號量                         */
    #define EN_OS_SEM_POST          1           /* 禁止(0)或允許(1)中發送信號量                             */
    #define EN_OS_SEM_QUERY         0           /* 禁止(0)或允許(1)查詢信號量                               */

    //#define data                                /* 非keil c51時必須加止這一句                               */


    #if EN_TIMER_SHARING == 0
    #define TIME_ISR_TASK_ID     SHOW_TASK_ID   /* 定義系統定時器軟中斷觸發的任務ID                         */
    #endif

    Os_cpu.h中定義了一些常量可以配置一些與cpu相關的部分。
    針對Small RTOS 51,具體定義如下:

    #define  OS_ENTER_CRITICAL()  EA = 0,Os_Enter_Sum++             /* 關中斷                                     */
    #define  OS_EXIT_CRITICAL()   if (--Os_Enter_Sum==0) EA = 1     /* 開中斷                                     */
    /* 以上兩句僅可以改變“EA = ? ”部分 */
    
    #define EN_SP2        0                     /* 禁止(0)或允許(1)非屏蔽中斷                               */
    #define  IDATA_RAM_SIZE  0x100              /* idata大小                                                */
    #define  Sp2Space       4                   /* 高級中斷(軟非屏蔽中斷)堆棧大小 EN_SP2為0時無效         */
    #define OS_TIME_ISR     1                   /* 系統定時器使用的中斷                                     */
    //
    SET_EA   MACRO                              ;打開所有允許中斷
             SETB     EA
         ENDM

(2)與編譯器無關的數據類型
    為了便于移植,Small RTOS定義了6種數據類型,它在Os_cpu.h定義。
    針對Small RTOS 51,具體定義如下:
    
    typedef unsigned char  uint8;                                   /* 定義可移植的無符號8位整數關鍵字            */
    typedef signed   char  int8;                                    /* 定義可移植的有符號8位整數關鍵字            */
    typedef unsigned int   uint16;                                  /* 定義可移植的無符號16位整數關鍵字           */
    typedef signed   int   int16;                                   /* 定義可移植的有符號16位整數關鍵字           */
    typedef unsigned long  uint32;                                  /* 定義可移植的無符號32位整數關鍵字           */
    typedef signed   long  int32;                                   /* 定義可移植的有符號32位整數關鍵字           */
    
(3)運行Small RTOS
    在main函數中調用OSStart()后系統開始運行,OSStart()結束后運行
    優先級為0的任務。
    注意:在調用OSStart()前不要使能總中斷標志,系統會自動執行開中斷宏
    OS_EXIT_CRITICAL()。
(4)建立任務:
    Small RTOS使用靜態方法建立任務,在config.h中有這樣一段代碼:

   #ifdef IN_OS_CPU_C 
   extern void TaskA(void);
   extern void TaskB(void);
   extern void TaskC(void);
   void  (* const TaskFuction[OS_MAX_TASKS])(void)={TaskA,TaskB,TaskC};
   //函數數組TaskFuction[]保存了各個任務初始PC指針,其按任務ID(既優先級次序)順序保存
   #endif
   
    用戶只要定義好OS_MAX_TASKS,TaskFuction[],任務將自動運行。其
    中TaskA等為任務對應函數。
    注意:1、ID為0的任務為最高優先級任務,系統運行后首先執行它。
          2、ID為OS_MAX_TASKS的任務由系統定義。
(5)刪除任務
    Small RTOS 1.12版不允許刪除任務,因此,每個任務必須為無限循環
    結構。
(6)任務睡眠
    任務可以調用OSWait()使自己睡眠,其原型如下:
    
    unsigned char OSWait(uint8 typ, uint8 ticks);

    功能描述: 系統等待函數,任務調用此函數可以等待一定時間或信號
    輸入: typ: 等待事件類型,目前可以取以下值,或是其中任意個值的按位或
              K_SIG: 等待信號
              K_TMO: 等待超時    
         ticks : 等待超時時的系統節拍數
    輸出 : NOT_OK : 參數錯誤
          TMO_EVENT : 超時到
          SIG_EVENT : 有信號
    如果任務等待信號,另一個任務可以調用OSSendSignal()使其進入就
    緒狀態,其原型如下:
   
    void OSSendSignal(uint8 TaskId);
 
    功能描述: 中斷中給指定任務發送信號,既使指定任務就緒
    輸 入: TaskId : 任務ID
    輸 出: 無
    中斷調用OSIntSendSignal()也可以喚醒睡眠任務,其原型如下:
   
    void OSIntSendSignal(uint8 TaskId);

    功能描述: 任務中給指定任務發送信號,既使指定任務就緒
    輸 入: TaskId : 任務ID
    輸 出: 無
    
    用戶調用OSQPend和OSSemPend時也可能使任務睡眠,可參見相應章節。
(7)信號量
    在Small RTOS中,用一個0到(OS_MAX_SEMS-1)的值做索引標識一個信
    號量,所有對信號量的訪問都通過它訪問。Small RTOS在使用一個信號量
    之前,首先要初始化該信號量,也即調用OSSemCreate()函數,對信號量
    的初始計數值賦值,該初始值為0到255之間的一個數。如果信號量是用來
    表示一個或者多個事件的發生,那么該信號量的初始值應設為0。如果信號
    量是用于對共享資源的訪問,那么該信號的初始值應設為1(例如,把它當
    作二值信號量使用)。最后,如果該信號量是用來表示允許任務訪問n個
    相同的資源,那么該初始值顯示應該是 n,并把該信號量作為一個可計數
    的信號量使用。
    信號量使用的內存空間由用系統分配。
(8)消息隊列
    與一般的RTOS不同,Small RTOS的消息隊列是以字節變量(uint8型變
    量,范圍為0到255)作為消息,而不是以指針指向的內容作為消息。也就
    是說,消息隊列發送一個消息實質是將一個0到255的數值存到消息隊列中,
    而不是將一個指針存到消息隊列中。類似的,從消息隊列中獲得一個消息
    就是得到一個范圍為0到255的值。這個0到255的值用戶可以任意解釋。如
    果用戶確實需要多個字節作為一個整體傳遞,可以有兩個方法:一是消息
    隊列僅僅傳遞數據的索引,真實數據放在另外的地方;一是一次向消息隊
    列中發送多個消息。
    消息隊列使用的內存空間由用戶分配。
(9)Small RTOS 51 任務特殊處
    由于keil c51由于keil c51默認不支持重入函數,它的重入函數使用
    仿真的重入棧而不使用系統棧,而Small RTOS 51沒有進行重入棧管
    理,因此,用戶應該保證各個任務的局部變量不會互相覆蓋(方法后
    面有介紹),并且不定義重入函數。
(10)中斷程序編制
    keil c51 例子如下:
    
    #if EN_OS_INT_ENTER >0 
    #pragma disable                                        /* 除非最高優先級中斷或是不需要系統管理的中斷,否則,必須加上這一句  */
    #endif
        void OSTickISR(void) interrupt USER_ISR

    {
        #if EN_OS_INT_ENTER >0 
            OS_INT_ENTER();                                /* 中斷開始處理                                                      */
        #endif
        
        /*用戶代碼在這*/
        
        OSIntExit();                                       /* 中斷結束處理,                                                    */
    }

        
    在其它CPU中,#pragma disable不是必須的,但是可能需要自己在
    OS_INT_ENTER()之前保存任務環境。如果某個中斷不需要OS管理,
    則可以自由編寫。




Small RTOS的系統調用:
(1)OSVersion()
    宏,返回Small RTOS版本號*100
(2)OSRunningTaskID()
    宏,返回當前正在運行的任務ID
(3)OSWait()
    原型:uint8 OSWait(uint8 typ, uint8 ticks);
    功能描述: 系統等待函數,任務調用此函數可以等待一定時間或信號
    輸 入: typ: 等待事件類型,目前可以取以下值,或是其中任意個值的按位或
                K_SIG: 等待信號
                K_TMO: 等待超時    
           ticks : 等待超時時的系統嘀嗒數
    輸 出 : NOT_OK : 參數錯誤
            TMO_EVENT : 超時到
            SIG_EVENT : 有信號
    全局變量: OSWaitTick
    調用模塊: OSIntSendSignal    
(4)OSSendSignal()
    原型:void OSSendSignal(uint8 TaskId)    
    功能描述: 任務中給指定任務發送信號,既使指定任務就緒
    輸 入: TaskId : 任務ID
    輸 出: 無
    全局變量: OSTaskRuning
    調用模塊: OSSched    
(5)OSIntSendSignal()
    原型:void OSIntSendSignal (uint8 TaskId);
    功能描述: 中斷中給指定任務發送信號,既使指定任務就緒
    輸 入: TaskId : 任務ID
    輸 出: 無
    全局變量: OSTaskRuning
    調用模塊: 無
(6)OSQCreate()
    原型:uint8 OSQCreate(uint8 OS_Q_MEM_SEL *Buf, uint8 SizeOfBuf);
    功能描述: 初始化消息隊列
    輸 入: Buf:為隊列分配的存儲空間地址
            SizeOfBuf:為隊列分配的存儲空間大小
    輸 出: NOT_OK:參數錯誤

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品亚洲国内自在自线福利| 午夜国产不卡在线观看视频| 在线观看欧美精品| 韩日精品视频一区| 一区二区三区日韩| 国产精品全国免费观看高清| 欧美久久久久久蜜桃| 国产盗摄视频一区二区三区| 日本系列欧美系列| 亚洲国产成人tv| 亚洲欧美日韩中文字幕一区二区三区 | 国产91精品一区二区麻豆亚洲| 日本一道高清亚洲日美韩| 亚洲日本va午夜在线影院| 国产欧美日韩在线| 久久先锋影音av鲁色资源网| 欧美精品久久一区二区三区| 99久久精品免费| 99久久久久久99| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 精品一区二区三区免费| 日韩精品1区2区3区| 日韩影院免费视频| 亚洲va欧美va人人爽| 亚洲国产日韩a在线播放性色| 亚洲三级视频在线观看| 一区二区激情视频| 亚洲一区在线观看免费| 亚洲精品综合在线| 性久久久久久久久久久久| 一区二区三区国产精品| 亚洲国产精品影院| 麻豆国产精品视频| www.欧美色图| 日本韩国欧美一区| 777奇米四色成人影色区| 欧美一二三四区在线| www精品美女久久久tv| 欧美国产欧美亚州国产日韩mv天天看完整 | 日韩不卡在线观看日韩不卡视频| 日韩国产欧美视频| 国产91在线观看丝袜| 色综合天天狠狠| 久久91精品久久久久久秒播| 欧美天天综合网| 韩国女主播成人在线观看| 秋霞午夜鲁丝一区二区老狼| 亚洲制服欧美中文字幕中文字幕| 青青青伊人色综合久久| 粉嫩av一区二区三区| 欧美亚洲高清一区二区三区不卡| 日韩精品最新网址| 一区二区三区在线观看视频| 国产乱码精品一区二区三区忘忧草| 91色在线porny| 国产欧美视频在线观看| 日韩一区精品视频| 在线一区二区三区四区五区| 日韩精品一区二区三区四区视频| 亚洲女人****多毛耸耸8| 久久国产精品99久久久久久老狼| 91污在线观看| 国产精品乱码人人做人人爱| 久久精品噜噜噜成人av农村| 欧美日韩精品高清| 一区二区三区四区蜜桃| 99re这里只有精品视频首页| 国产日韩欧美精品电影三级在线| 免费看欧美美女黄的网站| 欧美视频在线一区二区三区 | 欧美日韩日日夜夜| 一片黄亚洲嫩模| 在线观看日韩精品| 一区二区三区精品在线| 欧美色综合久久| 同产精品九九九| 日韩精品一区二区三区中文不卡| 日本一区中文字幕| 久久婷婷国产综合精品青草| 国产精品一区二区久久不卡 | 东方欧美亚洲色图在线| 久久久精品免费观看| 国产麻豆91精品| 亚洲免费观看高清完整版在线观看熊 | av在线这里只有精品| 国产精品久久久久桃色tv| 92国产精品观看| 亚洲福中文字幕伊人影院| 欧美一卡二卡在线观看| 国产综合久久久久久久久久久久| 国产亚洲欧美一级| 97se亚洲国产综合自在线观| 亚洲国产一区二区三区青草影视| 日韩情涩欧美日韩视频| 粉嫩蜜臀av国产精品网站| 亚洲欧美日韩一区二区三区在线观看 | 在线视频一区二区三| 日韩精品午夜视频| 国产精品色噜噜| 911国产精品| aaa亚洲精品| 美腿丝袜在线亚洲一区| 成人免费一区二区三区在线观看| 精品视频在线免费看| 国产suv精品一区二区883| 亚洲成人资源网| 国产精品久久久久影视| 日韩精品一区二区三区在线| 在线国产电影不卡| 成人综合激情网| 国产麻豆日韩欧美久久| 日韩高清一区在线| 亚洲一区二区三区自拍| 国产精品女主播在线观看| 欧美www视频| 欧美日韩和欧美的一区二区| 成人avav影音| 91婷婷韩国欧美一区二区| 高潮精品一区videoshd| 国产一区三区三区| 久久精品国产亚洲a| 免费看日韩a级影片| 麻豆一区二区三区| 免费成人av在线| 激情文学综合网| 国产精品1区2区3区在线观看| 免费欧美在线视频| 免费一级片91| 美日韩一级片在线观看| 天天色 色综合| 免费观看成人av| 国产一区二区精品久久| 国产成人精品影院| 本田岬高潮一区二区三区| av色综合久久天堂av综合| 一本大道综合伊人精品热热 | 国产在线国偷精品免费看| 另类欧美日韩国产在线| 激情五月婷婷综合网| 成人午夜碰碰视频| 欧美日韩中文字幕一区| 日韩欧美123| 国产午夜亚洲精品理论片色戒| 中文字幕一区二区三区乱码在线 | 成人高清视频在线| 在线综合视频播放| 久久综合久色欧美综合狠狠| 亚洲国产精品二十页| 亚洲精品国产一区二区精华液 | 国产精品久久久久久久久搜平片 | 亚洲天堂福利av| 秋霞av亚洲一区二区三| 成人网在线免费视频| 5566中文字幕一区二区电影| 亚洲国产精品黑人久久久| 图片区小说区区亚洲影院| 国产成人av网站| 欧美二区三区的天堂| 亚洲桃色在线一区| 国产一区二区三区四区在线观看 | 9191成人精品久久| 亚洲激情欧美激情| 国产精品99久久久久久久vr| 91精品国产免费久久综合| 亚洲免费观看高清在线观看| 东方欧美亚洲色图在线| 精品女同一区二区| 日韩精品每日更新| 欧美一a一片一级一片| 一区二区三区美女视频| 91香蕉视频mp4| 亚洲精品成人a在线观看| av在线不卡观看免费观看| 国产欧美一区二区精品久导航 | 在线不卡中文字幕播放| 一区二区免费视频| 欧美亚州韩日在线看免费版国语版| 国产三级精品视频| 成人毛片视频在线观看| 国产欧美日韩综合| 成人激情小说网站| 亚洲欧洲三级电影| 91亚洲午夜精品久久久久久| 最好看的中文字幕久久| 欧美性猛片aaaaaaa做受| 亚洲综合激情另类小说区| 欧美三区在线视频| 免费精品99久久国产综合精品| 日韩视频国产视频| 国产一区二区三区综合| 综合自拍亚洲综合图不卡区| 欧美亚洲综合在线| 精品一区二区在线播放| 久久久久九九视频| 在线亚洲精品福利网址导航| 蜜臀久久99精品久久久画质超高清 | 艳妇臀荡乳欲伦亚洲一区| 日韩一级精品视频在线观看| 国产一区二区电影| 一个色在线综合|