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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? rtos.s43

?? 實時多任務(wù)操作系統(tǒng)源代碼M430/OS V1.20
?? S43
字號:
;========================================================================================
;
;                             實時多任務(wù)操作系統(tǒng)源代碼
;
;                                 M430/OS   V1.20
;
;
;  文件名:RTOS.S43
;
;  作  者:劉兵   public_rtos@163.com      2002年11月27日
;
;----------------------------------------------------------------------------------------
;
;  注  釋:
;
;  本操作系統(tǒng)用的是搶占先式內(nèi)核,如果一個優(yōu)先級比較低的任務(wù)正在運行,另一個優(yōu)先級高的
;  任務(wù)就緒時,系統(tǒng)就把優(yōu)先級低的任務(wù)的現(xiàn)場保存,再切到優(yōu)先級高的任務(wù)運行;優(yōu)先級高的
;  任務(wù)運行完之后,再切到優(yōu)先級低的任務(wù)的斷點處繼續(xù)執(zhí)行。
;
;----------------------------------------------------------------------------------------
;
;  每個任務(wù)必須是以下結(jié)構(gòu):
;
;                                 /--------------\
;                                (    開    始    )
;                                 \--------------/
;                                        |
;                                        V
;                             |----------------------|
;                             |  任務(wù)本身數(shù)據(jù)初始化  |
;                             |----------------------|
;                                        |
;                                        |<-------------------------\
;                                        |                          |
;                                        V                          |
;                               |------------------|                |
;                               |  任務(wù)執(zhí)行代碼    |                |
;                               |------------------|                |
;                                        |                          |
;                                        V                          |
;                     |----------------------------------------|    |
;                     |  調(diào)用OS_Time_Dly進行延時,這時系統(tǒng)會   |    |
;                     |  把延時的這段時間切到其它任務(wù)來運行    |    |
;                     |----------------------------------------|    |
;                                        |                          |
;                                        \--------------------------/
;
;
;  每個任務(wù)都是一個無限循環(huán),只有開始,沒有結(jié)束。
;
;----------------------------------------------------------------------------------------
;
;  本操作系統(tǒng)包括9個函數(shù):
;
;  1.  OS_Init
;  功能:初始化M430/OS的系統(tǒng)數(shù)據(jù)。
;
;  2.  OS_Create
;  功能:建立任務(wù)。
;
;  3.  OS_Start
;  功能:啟動M430/OS。
;
;  4.  OS_Sched
;  功能:進行任務(wù)調(diào)度、任務(wù)切換。
;
;  5.  OS_Time_Dly
;  功能:任務(wù)延時函數(shù)。
;
;  6.  OS_Free_Task
;  功能:空閑任務(wù)。
;
;  7.  OS_Task_Lock
;  功能:禁止任務(wù)調(diào)度。
;
;  8.  OS_Task_Unlock
;  功能:允許任務(wù)調(diào)度。
;
;  9.  OS_Task_Wakeup
;  功能:喚醒指定優(yōu)先級的任務(wù)
;
;
;
;========================================================================================
NAME     RTOS(16)
RSEG     CODE(1)
RSEG     IDATA0(1)
RSEG     CDATA0(1)
RSEG     CONST(1)
COMMON   INTVEC(1)


#include <msp430x14x.h>
#include "include.h"
#include "rtos.h"

CORRENT_DATA_LENGTH DEFINE      Task_Data_Count*2        ;現(xiàn)場數(shù)據(jù)長度



PUBLIC        OS_Init
PUBLIC        OS_Sched
PUBLIC        OS_Time_Dly
PUBLIC        OS_Task_Lock
PUBLIC        OS_Task_Unlock
PUBLIC        OS_Task_Wakeup
PUBLIC        OS_Task_Wakeup_I
PUBLIC        Task_Flag
PUBLIC        OS_Task_Create
PUBLIC        OS_Start

EXTERN        Task_SP
EXTERN        Task_Tick

RSEG  CODE

;------------------------------------------------
OS_Task_Create
;功能:建立新任務(wù)。
;參數(shù):任務(wù)TCB結(jié)構(gòu):
;      unsigned int *task_base;      //任務(wù)入口
;      unsigned int *stack_base;     //任務(wù)堆棧基址
;      unsigned int *stack_point;    //任務(wù)堆棧指針的位置
;      unsigned int *time_tick;      //任務(wù)時鐘嘀嗒數(shù)的位置
;      unsigned int stack_size;      //堆棧大小
;調(diào)用方式:
;             push.w    #Task_TCB
;             call      #OS_Task_Create
;             incd.w    sp
;
;任務(wù)堆棧示意圖
;
; ^       |           |
; |       |-----------|   //棧頂(低地址)
; |       |     .     |
; |       |     .     |
; |       |   棧區(qū)    |
; |       |     .     |
; |       |     .     |
; |       |-----------|   //堆棧指針
; |       |     .     |
; |       |     .     |
; |       | 現(xiàn)場數(shù)據(jù)  |
; |       |     .     |
; |       |     .     |
; |       |-----------|
; |       |標志寄存器 |
; |       |-----------|
; |       |   斷點    |
; |       -------------   //棧底(高地址)
;
;
;本函數(shù)共有18行代碼
;------------------------------------------------
              push.w    r10
              push.w    r11
              mov.w     6(sp),r10                          ;取出結(jié)構(gòu)指針
              mov.w     STACK_BASE(r10),r11                ;取出結(jié)構(gòu)指針指向的堆棧基址(棧頂)
              add.w     STACK_SIZE(r10),r11                ;找到棧底
              mov.w     TASK_BASE(r10),-2(r11)             ;任務(wù)首地址做為斷點放入棧底
              mov.w     sr,-4(r11)
              bis.w     #GIE,-4(r11)                       ;標志寄存器放入棧底
              mov.w     TIME_TICK(r10),r10
              clr.w     0(r10)                             ;清0此任務(wù)的時鐘嘀嗒數(shù)
              mov.w     6(sp),r10
              mov.w     STACK_POINT(r10),r10
              mov.w     r11,0(r10)
              sub.w     #CORRENT_DATA_LENGTH+4,0(r10)      ;堆棧指針
              inc.w     Free_Count
              pop.w     r11
              pop.w     r10
              ret

;------------------------------------------------
OS_Start
;多任務(wù)動函數(shù)
;功能:初始化定時器TimeA0、空閑任務(wù),啟動最高優(yōu)先級的任務(wù)。
;參數(shù):無
;反值:無
;本函數(shù)有14行代碼
;------------------------------------------------
              bis.w     #(TASSEL1+TACLR+MC_1),&TACTL
              mov.w     2(sp),&CCR0
              bis.w     #CCIE,&CCTL0                       ;初始化TimerA0
              mov.w     #OS_Free_Task,2(sp)
              mov.w     sr,0(sp)
              bis.w     #GIE,0(sp)
              decd.w    sp
              mov.w     sp,free_task_stack_point
              clr.w     free_task_time_tick                ;初始化空閑任務(wù)
              cmp.w     #Task_Count,Free_Count
              jnz       ERROR_USER_PROGRAM                 ;任務(wù)個數(shù)是否夠,如果不夠就死機或不斷復(fù)位
              clr.w     Free_Count
              clr.w     r10
              jmp       OS_Sched_jmp02
;------------------------------------------------
PUBLIC
OS_Init
;功能:初始多任務(wù)數(shù)據(jù)
;調(diào)用方法:call  #OS_Init
;本函數(shù)共有4行代碼
;------------------------------------------------
              clr.w     Current_Task
              clr.w     Task_Flag
              clr.w     Free_Count
              ret
;------------------------------------------------
PUBLIC
OS_Time_Dly
;功能:多任務(wù)延時,延時單位是時鐘滴嗒數(shù)
;調(diào)用方法:
;push.w       #延時時間
;call         #OS_Time_Dly
;incd.w       sp
;本函數(shù)共有7行代碼
;------------------------------------------------
              push.w    SR                                      ;模擬中斷發(fā)生
              dint
              push.w    r10
              mov.w     Current_Task,r10

              mov.w     6(sp),Task_Tick(r10)                    ;把任務(wù)延時的滴嗒數(shù)存入
              
              bic.w     #OS_TASK_LOCK,Task_Flag                 ;解開任務(wù)鎖
              br        #OS_Sched_endfor01

;------------------------------------------------
PUBLIC
OS_Sched
;功能:任務(wù)調(diào)度
;本函數(shù)共有51行代碼
;------------------------------------------------
              push.w    r10
#ifndef debug
              mov.w     #WDTPW+WDTCNTCL,&WDTCTL                 ;如果程序是編譯的不是debug版本,清看門狗
#endif
              
              clr.w     r10
OS_Sched_for01
              cmp.w     #Task_Count*2-1,r10
              jge       OS_Sched_endfor01
              
              tst.w     Task_Tick(r10)
              jz        OS_Sched_jmp01                          ;如果時鐘滴嗒數(shù)為0,則不對其進行減1
              dec.w     Task_Tick(r10)                          ;對時鐘滴嗒數(shù)進行減1
OS_Sched_jmp01
              incd.w    r10
              jmp       OS_Sched_for01
OS_Sched_endfor01

              bit.w     #OS_TASK_LOCK,Task_Flag                 ;檢查任務(wù)鎖是否加上
              jnz       OS_Sched_exit                           ;如果任務(wù)鎖被加上,則不進行調(diào)度
              clr.w     r10
OS_Sched_for02
              cmp.w     #Task_Count*2-1,r10
              jge       OS_Sched_jmp06
              
              tst.w     Task_Tick(r10)                          ;檢查是否有任務(wù)就緒
              jz        OS_Sched_Task_Switch                    ;有,則跳轉(zhuǎn)到任務(wù)切換
              
              incd.w    r10
              jmp       OS_Sched_for02
OS_Sched_jmp06
              tst.w     free_task_time_tick
              jnz       ERROR_USER_PROGRAM
OS_Sched_Task_Switch

              cmp.w     Current_Task,r10                        ;比較就緒任務(wù)是不是當前運行的任務(wù)
              jz        OS_Sched_exit                           ;如果是,轉(zhuǎn)向下一處
              
              cmp.w     #Task_Count*2,Current_Task
              jz        OS_Sched_jmp03

              push.w    r11
              push.w    r12
              push.w    r13
              push.w    r14
              push.w    r15                                     ;保存現(xiàn)場
              
              mov.w     Current_Task,r11                        ;保存當前任務(wù)指針
              mov.w     sp,Task_SP(r11)                         ;保存當前任務(wù)堆棧指針
OS_Sched_jmp02
              mov.w     r10,Current_Task                        ;就緒任務(wù)指針保存為當前任務(wù)指針
              cmp.w     #Task_Count*2,r10
              jz        OS_Sched_jmp05
OS_Sched_jmp04
              mov.w     Task_SP(r10),sp                         ;堆棧切換

              pop.w     r15
              pop.w     r14
              pop.w     r13
              pop.w     r12
              pop.w     r11
OS_Sched_exit
              pop.w     r10                                     ;恢復(fù)就緒任務(wù)現(xiàn)場
              reti
              
;如果用戶程序出錯,則把所有中斷關(guān)閉,然后死的此處。此段代碼只是調(diào)試時用。
;如果在產(chǎn)品投入應(yīng)用中,請把此段代碼改為單片機的復(fù)位代碼。

ERROR_USER_PROGRAM
#ifdef        debug
              dint
              jmp       ERROR_USER_PROGRAM
#else
              br        0fffeh           ;CPU復(fù)位
#endif
OS_Sched_jmp03
              mov.w     r10,Current_Task                        ;就緒任務(wù)指針保存為當前任務(wù)指針
              mov.w     sp,free_task_stack_point                ;保存當前任務(wù)堆棧指針
              jmp       OS_Sched_jmp04
OS_Sched_jmp05
              mov.w     free_task_stack_point,sp
              jmp       OS_Sched_exit
;------------------------------------------------
PUBLIC
OS_Free_Task
;空閑任務(wù)
;功能:進行CPU空閑計數(shù)
;本函數(shù)共有3行代碼
;------------------------------------------------
OS_Free_Task_jmp01
              inc.w     Free_Count                              ;空閑計數(shù)累加
              bis.w     #OS_FREE_FLAG,Task_Flag                 ;置上空閑任務(wù)標志
              jmp       OS_Free_Task_jmp01

;------------------------------------------------
PUBLIC
OS_Task_Lock
;禁止任務(wù)調(diào)度
;本函數(shù)共2行代碼
;------------------------------------------------
              bis.w     #OS_TASK_LOCK,Task_Flag
              ret
;------------------------------------------------
PUBLIC
OS_Task_Unlock
;允許任務(wù)調(diào)度
;本函數(shù)共2行代碼
;------------------------------------------------
              bic.w     #OS_TASK_LOCK,Task_Flag
              ret
;------------------------------------------------
PUBLIC
OS_Task_Wakeup
;功能:喚醒指定優(yōu)先級的任務(wù)
;本函數(shù)共有7行代碼
;push.w       #PRI
;call         #OS_Task_Wakeup
;incd.w       sp
;------------------------------------------------
              push.w    SR                                      ;模擬中斷發(fā)生
              dint
OS_Task_Wakeup_I
              push.w    r10
              mov.w     6(sp),r10
              add.w     r10,r10
              clr.w     Task_Tick(r10)
              br        #OS_Sched_endfor01

RSEG  IDATA0

Current_Task: ds   2
Task_Flag:    ds   2
Free_Count:   ds   2
free_task_stack_point:
              ds   2

free_task_time_tick:
              ds   2

RSEG CDATA0

dw  0
dw  0
dw  0
dw  0
dw  0

COMMON   INTVEC

ds  TIMERA0_VECTOR                     ;時鐘中斷向量
dw  OS_Sched

end

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线观看一区二区视频| 国产精品乱码人人做人人爱| 亚洲精品在线免费观看视频| 国产欧美一区二区精品性| 亚洲免费观看在线视频| 久久99国产精品久久| 日本精品视频一区二区| 精品少妇一区二区三区日产乱码| 看电视剧不卡顿的网站| 成人高清av在线| 日韩欧美激情在线| 一区二区三区在线观看动漫 | 日韩精品一二三| 成人自拍视频在线| 欧美大片拔萝卜| 亚洲电影在线播放| av电影在线观看完整版一区二区| 精品免费国产二区三区| 日韩专区欧美专区| 欧美性感一类影片在线播放| 中文av一区特黄| 国产制服丝袜一区| 欧美理论片在线| 一区二区高清在线| 99久久免费国产| 国产免费久久精品| 久久99国产精品久久99果冻传媒| 91精品国产入口| 午夜欧美视频在线观看| 欧美影视一区在线| 亚洲欧美激情在线| av福利精品导航| 国产精品国产三级国产普通话三级 | 国产麻豆欧美日韩一区| 91精品国产一区二区人妖| 亚洲影院理伦片| 色视频成人在线观看免| 国产精品大尺度| hitomi一区二区三区精品| 久久久国产午夜精品| 精品亚洲成a人在线观看| 欧美一区二区三区精品| 日韩电影免费在线观看网站| 在线播放国产精品二区一二区四区| 一区二区三区四区高清精品免费观看| 欧美一区二区视频在线观看2020 | 粉嫩绯色av一区二区在线观看| 精品欧美一区二区久久| 韩国欧美一区二区| 久久久久国产精品麻豆| 国产99精品视频| 欧美经典一区二区三区| 成人av动漫在线| 亚洲老妇xxxxxx| 欧美三区免费完整视频在线观看| 亚洲图片欧美视频| 欧美一区二区三区日韩| 韩国欧美国产一区| 国产精品免费看片| 欧洲精品一区二区| 日本三级亚洲精品| 日本一区二区三区在线不卡| 91在线小视频| 五月激情丁香一区二区三区| 欧美mv日韩mv亚洲| 色综合天天天天做夜夜夜夜做| 一区二区三区高清在线| 日韩一卡二卡三卡| 本田岬高潮一区二区三区| 亚洲一区二区在线播放相泽| 日韩欧美一级精品久久| 成人一二三区视频| 午夜精品免费在线| 欧美激情在线一区二区三区| 欧美在线视频你懂得| 久久99精品国产91久久来源| 成人欧美一区二区三区黑人麻豆| 国产清纯白嫩初高生在线观看91 | 91美女片黄在线| 蜜桃av一区二区在线观看| 国产精品三级av| 欧美日韩免费高清一区色橹橹| 精品亚洲porn| 亚洲国产日产av| 国产日本欧美一区二区| 3d动漫精品啪啪一区二区竹菊| 国产高清精品久久久久| 午夜精品成人在线视频| 国产午夜精品福利| 欧美一卡二卡在线| 色婷婷精品大视频在线蜜桃视频| 激情综合色丁香一区二区| 亚洲一线二线三线视频| 国产亚洲短视频| 日韩欧美专区在线| 欧美日韩一区二区三区不卡 | 欧美日韩精品免费观看视频 | 丁香婷婷综合激情五月色| 日韩国产成人精品| 亚洲精品美国一| 国产精品区一区二区三区| 欧美成va人片在线观看| 欧美久久久一区| 91久久精品一区二区二区| 丁香另类激情小说| 国产精品 欧美精品| 美女久久久精品| 日韩综合在线视频| 丝袜美腿亚洲色图| 亚洲午夜精品在线| 亚洲一区在线观看网站| 亚洲色图第一区| 国产精品久久久久久久久免费樱桃| 久久久美女毛片| 久久综合色天天久久综合图片| 欧美一区二区国产| 日韩一区二区三| 欧美一级在线视频| 欧美sm美女调教| www国产成人| 久久在线免费观看| 国产日产欧美精品一区二区三区| 精品国产凹凸成av人导航| 精品久久人人做人人爽| www一区二区| 国产亚洲成av人在线观看导航| 久久久综合精品| 日本一区二区三区四区| 国产精品国产自产拍在线| 中文字幕一区二区三| 亚洲欧美在线高清| 亚洲精品国产品国语在线app| 亚洲欧美色图小说| 亚洲自拍偷拍九九九| 婷婷开心激情综合| 蜜桃视频在线观看一区| 精品无人码麻豆乱码1区2区| 国产精品99久久久久久似苏梦涵| 国产高清一区日本| 色婷婷综合在线| 8x福利精品第一导航| 久久色中文字幕| 亚洲天堂网中文字| 日韩精品高清不卡| 国产精品中文欧美| 91一区一区三区| 555夜色666亚洲国产免| 久久久久国产免费免费| 一色屋精品亚洲香蕉网站| 亚洲午夜成aⅴ人片| 精品一二三四在线| 91在线精品一区二区三区| 欧美日本在线观看| 久久精品一级爱片| 亚洲一线二线三线视频| 国产永久精品大片wwwapp| jiyouzz国产精品久久| 欧美欧美欧美欧美| 国产精品欧美极品| 午夜精品一区二区三区电影天堂 | 成人黄色国产精品网站大全在线免费观看 | 风间由美性色一区二区三区| 91福利在线观看| 久久综合色鬼综合色| 亚洲午夜久久久久中文字幕久| 激情国产一区二区| 在线欧美日韩精品| 精品999久久久| 亚洲一级二级在线| 成人三级在线视频| 日韩三级视频中文字幕| 亚洲精品中文在线| 国产不卡在线播放| 制服视频三区第一页精品| **网站欧美大片在线观看| 蜜臀久久99精品久久久画质超高清| 99精品黄色片免费大全| 亚洲精品一区二区三区四区高清 | 国产乱人伦偷精品视频免下载| 欧美亚洲动漫另类| 国产精品国产三级国产aⅴ原创| 免费成人在线网站| 91福利视频在线| 国产精品网站在线| 韩国视频一区二区| 欧美一区二区不卡视频| 亚洲成人激情综合网| av不卡在线播放| 国产午夜精品美女毛片视频| 久久精品国产99国产精品| 欧美色大人视频| 一区二区三区四区激情| av电影天堂一区二区在线观看| 久久精品人人爽人人爽| 韩国av一区二区| 精品久久一区二区三区| 另类欧美日韩国产在线| 欧美一级夜夜爽| 日本中文字幕一区二区视频| 911精品产国品一二三产区|