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

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

?? rtos.s43

?? ucosiim430os
?? S43
字號:
;========================================================================================
;
;                             實時多任務操作系統源代碼
;
;                                 M430/OS   V1.10
;
;
;  文件名:RTOS.S43
;
;  作  者:劉兵   public_rtos@163.com      2002年11月27日
;
;----------------------------------------------------------------------------------------
;
;  注  釋:
;
;  本操作系統用的是搶占先式內核,如果一個優先級比較低的任務正在運行,另一個優先級高的
;  任務就緒時,系統就把優先級低的任務的現場保存,再切到優先級高的任務運行;優先級高的
;  任務運行完之后,再切到優先級低的任務的斷點處繼續執行。
;
;----------------------------------------------------------------------------------------
;
;  每個任務必須是以下結構:
;
;                                 /--------------\
;                                (    開    始    )
;                                 \--------------/
;                                        |
;                                        V
;                             |----------------------|
;                             |  任務本身數據初始化  |
;                             |----------------------|
;                                        |
;                                        |<-------------------------\
;                                        |                          |
;                                        V                          |
;                               |------------------|                |
;                               |  任務執行代碼    |                |
;                               |------------------|                |
;                                        |                          |
;                                        V                          |
;                     |----------------------------------------|    |
;                     |  調用OS_Time_Dly進行延時,這時系統會   |    |
;                     |  把延時的這段時間切到其它任務來運行    |    |
;                     |----------------------------------------|    |
;                                        |                          |
;                                        \--------------------------/
;
;
;  每個任務都是一個無限循環,只有開始,沒有結束。
;
;----------------------------------------------------------------------------------------
;
;  本操作系統包括7個函數(共86行可執行代碼):
;
;  1.  OS_Init
;  功能:初始化多任務環境,然后直接切到優先級最高的任務。
;
;  2.  OS_Sched
;  功能:進行任務調度、任務切換。
;
;  3.  OS_Time_Dly
;  功能:任務延時函數。
;
;  4.  OS_Free_Task
;  功能:空閑任務。
;
;  5.  OS_Task_Lock
;  功能:禁止任務調度。
;
;  6.  OS_Task_Unlock
;  功能:允許任務調度。
;
;  7.  OS_Task_Wakeup
;  功能:喚醒指定優先級的任務
;
;========================================================================================
NAME     RTOS(16)


#include <msp430x14x.h>
#include "include.h"
Task_Count       DEFINE      06h                      ;任務數目
Task_Data_Count  DEFINE      06h                      ;每個任務要保存的現場數目(單位:字)

FREE_STACK_SIZE  DEFINE      (Task_Data_Count+02h)

SOFTCLOCK_STACK_SIZE  DEFINE      10h                 ;軟時鐘任務的堆棧大?。▎挝唬鹤郑?TASK1_STACK_SIZE      DEFINE      11h                 ;任務1的堆棧大小(單位:字)
TASK2_STACK_SIZE      DEFINE      12h                 ;任務2的堆棧大?。▎挝唬鹤郑?TASK3_STACK_SIZE      DEFINE      13h                 ;任務3的堆棧大?。▎挝唬鹤郑?TASK4_STACK_SIZE      DEFINE      14h                 ;任務4的堆棧大?。▎挝唬鹤郑?LED_STACK_SIZE        DEFINE      FREE_STACK_SIZE+2   ;LED指示燈的堆棧大?。▎挝唬鹤郑?
#include "rtos.h"


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

EXTERN        softclock
EXTERN        task1
EXTERN        task2
EXTERN        task3
EXTERN        task4
EXTERN        taskled

ORG           (0a00h - (SYSTEM_RAM_SIZE + TASK_STACK_SIZE))


Current_Task  DW             0000h                         ;當前運行的任務的指針
Task_Flag     DW             0000h                         ;任務狀態(是否允許調度、是否允許計數等)
Free_Count    DW             0000h                         ;空閑任務計數

Task_SP       DS             (Task_Count*2+2)              ;每個任務的堆棧SP指針位置
Task_Tick     DS             (Task_Count*2+2)              ;每個任務的延時計數

              DS             (TASK_STACK_SIZE)             ;任務棧

ORG           0ffech
dw            OS_Sched

              ORG            3000h


;------------------------------------------------
PUBLIC
OS_Init
;功能:初始多任務數據、環境、任務棧,并啟動最高優先級的任務
;調用方法:call  #OS_Init,多任務就啟動開了
;本函數共有26行代碼
;------------------------------------------------
              clr.w          Current_Task
              clr.w          Task_Flag
              clr.w          Free_Count
              bis.w          #(TASSEL1+TACLR+MC_1),&TACTL
              mov.w          2(sp),&CCR0
              bis.w          #CCIE,&CCTL0
              eint
              mov.w          SR,r13
              dint
              mov.w          #09feh,r11
              mov.w          #OS_Task_Table,r12
              clr.w          r10
OS_Init_for01
              cmp.w          #(Task_Count*2+2),r10
              jz             OS_Init_endfor01
              
              clr.w          Task_Tick(r10)                          ;清0時鐘滴嗒數
              mov.w          0(r12),0(r11)                           ;把任務地址壓入堆棧
              mov.w          r13,-2(r11)                             ;把標志寄存器放入任務棧
              mov.w          r11,Task_SP(r10)
              sub.w          #(Task_Data_Count*2+2),Task_SP(r10)     ;SP位置放入堆棧
              
              sub.w          Stack_Size_Table(r10),r11               ;指向下一個任務
              incd.w         r12
              incd.w         r10
              jmp            OS_Init_for01
OS_Init_endfor01

              clr.w          Task_Flag
              clr.w          Current_Task
              clr.w          Free_Count
              mov.w          #09feh,sp
              eint
              ret                                                    ;返回到最高優先級的任務

;------------------------------------------------
PUBLIC
OS_Time_Dly
;功能:多任務延時,延時單位是時鐘滴嗒數
;調用方法:
;push.w       #延時時間
;call         #OS_Time_Dly
;incd.w       sp
;本函數共有7行代碼
;------------------------------------------------
              push.w         SR                                      ;模擬中斷發生
              dint
              push.w         r10
              mov.w          Current_Task,r10

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

;------------------------------------------------
PUBLIC
OS_Sched
;功能:任務調度
;本函數共有39行代碼
;------------------------------------------------
              push.w         r10
#ifndef debug
              mov.w          #WDTPW+WDTCNTCL,&WDTCTL
#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                          ;如果時鐘滴嗒數為0,則不對其進行減1
              dec.w          Task_Tick(r10)                          ;對時鐘滴嗒數進行減1
OS_Sched_jmp01
              incd.w         r10
              jmp            OS_Sched_for01
OS_Sched_endfor01

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

              cmp.w          Current_Task,r10                        ;比較就緒任務是不是當前運行的任務
              jz             OS_Sched_exit                           ;如果是,轉向下一處

              push.w         r11
              push.w         r12
              push.w         r13
              push.w         r14
              push.w         r15                                     ;保存現場
              
              mov.w          Current_Task,r11                        ;保存當前任務指針
              mov.w          sp,Task_SP(r11)                         ;保存當前任務堆棧指針
              mov.w          r10,Current_Task                        ;就緒任務指針保存為當前任務指針
              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                                     ;恢復就緒任務現場
              reti
              
;如果用戶程序出錯,則把所有中斷關閉,然后死的此處。此段代碼只是調試時用。
;如果在產品投入應用中,請把此段代碼改為單片機的復位代碼。

ERROR_USER_PROGRAM
#ifdef        debug
              dint
              jmp            ERROR_USER_PROGRAM
#else
              br             0fffeh           ;CPU復位
#endif

;------------------------------------------------
PUBLIC
OS_Free_Task
;空閑任務
;功能:進行CPU空閑計數
;本函數共有3行代碼
;------------------------------------------------
OS_Free_Task_jmp01
              inc.w          Free_Count                              ;空閑計數累加
              bis.w          #OS_FREE_FLAG,Task_Flag                 ;置上空閑任務標志
              jmp            OS_Free_Task_jmp01

;------------------------------------------------
PUBLIC
OS_Task_Lock
;禁止任務調度
;本函數共2行代碼
;------------------------------------------------
              bis.w          #OS_TASK_LOCK,Task_Flag
              ret
;------------------------------------------------
PUBLIC
OS_Task_Unlock
;允許任務調度
;本函數共2行代碼
;------------------------------------------------
              bic.w          #OS_TASK_LOCK,Task_Flag
              ret
;------------------------------------------------
PUBLIC
OS_Task_Wakeup
;功能:喚醒指定優先級的任務
;本函數共有7行代碼
;push.w       #PRI
;call         #OS_Task_Wakeup
;incd.w       sp
;------------------------------------------------
              push.w         SR                                      ;模擬中斷發生
              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



Stack_Size_Table:                                           ;每個任務棧的大小
              DW             (SOFTCLOCK_STACK_SIZE*2)
              DW             (TASK1_STACK_SIZE*2)
              DW             (TASK2_STACK_SIZE*2)
              DW             (TASK3_STACK_SIZE*2)
              DW             (TASK4_STACK_SIZE*2)
              DW             (LED_STACK_SIZE*2)
              DW             (FREE_STACK_SIZE*2)


OS_Task_Table:
              DW             softclock       ;軟時鐘任務
              DW             task1           ;任務1
              DW             task2           ;任務2
              DW             task3           ;任務3
              DW             task4           ;任務4
              DW             taskled         ;指示燈任務
              DW             OS_Free_Task    ;空閑任務


end

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品1区二区.| 奇米色一区二区| 国产乱码一区二区三区| 欧美最新大片在线看| 国产亚洲欧美激情| 亚洲va欧美va天堂v国产综合| 成人免费毛片aaaaa**| 欧美一级片在线看| 亚洲影院理伦片| 99久久伊人网影院| 国产日韩视频一区二区三区| 男人的天堂亚洲一区| 欧美亚洲国产一区在线观看网站| 日本一区二区三区电影| 九九精品视频在线看| 欧美一区二区三区精品| 亚洲国产视频a| 欧洲视频一区二区| 亚洲欧美视频在线观看视频| 成人免费观看av| 国产日韩精品视频一区| 国产尤物一区二区| 精品少妇一区二区三区日产乱码| 三级一区在线视频先锋| 欧美自拍偷拍一区| 一区二区三区日本| 一本色道**综合亚洲精品蜜桃冫| 中文字幕制服丝袜一区二区三区| 国产成人自拍网| 国产亚洲精品久| 国产成人夜色高潮福利影视| 久久欧美一区二区| 国产精品456露脸| 国产日韩欧美电影| 成人av手机在线观看| 中文一区在线播放| 成人毛片在线观看| 亚洲视频小说图片| 91麻豆免费看片| 亚洲午夜免费视频| 欧美日韩国产精选| 日本成人在线网站| 欧美精品一区二区三区一线天视频| 卡一卡二国产精品| 精品国产免费一区二区三区四区| 久久精品国产999大香线蕉| 欧美电视剧在线看免费| 国内久久婷婷综合| 中文字幕欧美国产| 一本到不卡精品视频在线观看| 亚洲欧美视频一区| 欧美日韩中文字幕一区| 天天操天天干天天综合网| 91精品国产高清一区二区三区蜜臀 | 日韩高清在线不卡| 日韩欧美一二三| 国产精品一线二线三线精华| 中文字幕巨乱亚洲| bt7086福利一区国产| 亚洲精品视频在线观看免费| 欧美三级三级三级| 麻豆精品国产传媒mv男同| 久久精品视频免费观看| 白白色 亚洲乱淫| 亚洲国产精品一区二区www在线| 欧美日韩一级片网站| 久久成人精品无人区| 亚洲国产精品ⅴa在线观看| 色婷婷久久一区二区三区麻豆| 亚洲v中文字幕| 久久综合色婷婷| 一本色道久久综合亚洲精品按摩| 午夜欧美电影在线观看| 久久综合狠狠综合久久综合88 | 麻豆一区二区三区| 欧美激情综合网| 欧美中文字幕一区二区三区| 蜜桃av一区二区| 中文字幕一区二区三区av| 欧美日韩一区二区三区在线看| 久久爱另类一区二区小说| 国产精品久久久久影院| 欧美军同video69gay| 国产乱码精品一区二区三 | 久久亚洲捆绑美女| 91影院在线免费观看| 日本最新不卡在线| 国产精品久久久久影院亚瑟| 7777女厕盗摄久久久| 成人性生交大合| 午夜久久久影院| 国产精品入口麻豆原神| 欧美人体做爰大胆视频| 国产91精品精华液一区二区三区| 亚洲一区二区三区四区在线免费观看| 欧美成人艳星乳罩| 在线看国产日韩| 国产九九视频一区二区三区| 亚洲国产一区二区三区青草影视| 久久色.com| 欧美日韩国产一二三| 国产成人综合亚洲网站| 日韩不卡手机在线v区| 亚洲欧洲无码一区二区三区| 欧美一级搡bbbb搡bbbb| 色中色一区二区| 国产成人免费视频一区| 日韩精品一级二级 | 久久久久亚洲蜜桃| 欧美日韩国产区一| 99re热这里只有精品视频| 麻豆国产精品一区二区三区 | 国产精品你懂的在线| 欧美一区二区三区四区高清| 色视频成人在线观看免| 国产精品一区不卡| 久久黄色级2电影| 亚洲成年人网站在线观看| 亚洲色大成网站www久久九九| 久久亚洲一区二区三区四区| 欧美一区二区视频在线观看2022| 色综合久久中文字幕综合网| 国产精品18久久久久久久网站| 日韩av中文字幕一区二区三区 | 久久九九99视频| 日韩视频一区二区三区| 欧美性生活影院| 色综合一区二区三区| 国产成人日日夜夜| 国内成人免费视频| 强制捆绑调教一区二区| 日韩精品一二三四| 亚洲成人资源网| 亚洲制服丝袜一区| 一区二区在线观看免费| 中文字幕亚洲成人| 国产精品不卡视频| 中文成人综合网| 国产视频一区在线播放| 久久蜜臀中文字幕| 精品国产乱码久久久久久夜甘婷婷| 91精品国产综合久久久久| 欧美日韩一区高清| 欧美日韩aaaaaa| 欧美精品欧美精品系列| 欧美乱妇23p| 欧美日韩国产美| 欧美精品自拍偷拍| 91超碰这里只有精品国产| 91精品国产综合久久久蜜臀粉嫩 | 国产精品青草久久| 国产精品看片你懂得| 国产精品久久久久久一区二区三区| 久久久精品免费网站| 久久久99免费| 欧美激情自拍偷拍| 中文字幕一区二区三区精华液| 国产精品丝袜一区| 中文字幕日本乱码精品影院| 亚洲欧美日韩久久| 亚洲欧美国产毛片在线| 亚洲精品国产精品乱码不99| 亚洲国产欧美日韩另类综合 | 亚洲综合久久av| 亚洲成人黄色影院| 免费在线观看视频一区| 久久99日本精品| 国产高清在线观看免费不卡| 成人精品小蝌蚪| 一本色道久久综合精品竹菊| 欧美三片在线视频观看| 91精品国产综合久久蜜臀| 欧美xxx久久| 国产精品免费视频一区| 亚洲免费av在线| 偷偷要91色婷婷| 狠狠色狠狠色综合| 成人午夜视频网站| 92国产精品观看| 欧美猛男男办公室激情| 26uuuu精品一区二区| 国产精品久久久久精k8| 亚洲一区二区三区自拍| 青青草成人在线观看| 国产69精品久久久久777| 一本大道久久a久久精品综合| 欧美精品久久一区| 久久久久久影视| 亚洲激情在线激情| 麻豆精品国产传媒mv男同| 成人免费高清在线| 欧美日本一区二区三区四区| 久久―日本道色综合久久| 成人欧美一区二区三区在线播放| 亚洲大片精品永久免费| 国产一区二区三区精品欧美日韩一区二区三区 | 1000部国产精品成人观看| 亚洲午夜电影网| 国产精品一线二线三线| 91高清在线观看|