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

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

?? os_cpu_a32.s

?? 非常實在的Nios—μCOS_II源代碼
?? S
?? 第 1 頁 / 共 2 頁
字號:
;********************************************************************************************************
;                                               uC/OS-II
;                                         The Real-Time Kernel
;
;                          (c) Copyright 1992-2002, Jean J. Labrosse, Weston, FL
;                                          All Rights Reserved
;
;
;                                       NIOS 32bits Specific code
;
;
;                                     GNU ASSEMBLER nios-elf-as.exe
;
; File         : OS_CPU_A.S
; By           : Farid LEZIAR    (fleziar@yahoo.fr)
; Version      : 2.0
;
;
;    This port is free. you can use it, redistribute it
;    and/or modify it under the following terms:
;
;    1. You are not allowed to remove or modify this copyright notice
;       and License paragraphs, even if parts of the software is used.
;    2. The improvements and/or extentions you make must be available
;       for the community under THIS license, source code included.
;    4. You may NOT distribute this software under another license without
;       explicit permission from farid LEZIAR (fleziar@yahoo.fr).
;    5. This software is free, and distributed in the hope that it will be
;       useful, but WITHOUT ANY WARRANTY.
;    6. Tou have you inform me whenever you use this software.
;
;********************************************************************************************************

;********************************************************************************************************
;                                    PUBLIC and EXTERNAL REFERENCES
;********************************************************************************************************
            .include "macros.s"
            .text
            .global OSTickISR
            .global OSStartHighRdy
            .global OSCtxSw
            .global OSIntCtxSw

            .equ    regwidth, 4                         ; 4 bytes register width for 32bits version
            .equ    timer_address, na_timer_1		    ; see excalibur.s or excalibur.h
            .equ    OS_CPU_HOOKS_EN,1                   ; must the the same in OS_CFG.H

;*********************************************************************************************************
;                                          START MULTITASKING
;                                       void OSStartHighRdy(void)
;
; The stack frame is assumed to look as follows:
;
;                                   return address    <-- +1
;                                   ISTATUS           <-- +8
;                                   %g0-%g7           <-- +8
;                                   CWP_ISR(%i)       <-- +16
;                                   CWP_TASK(%i-%L)   <-- +16
;                                   ...
;                                   ...
;                                   CWP_HL-1(%i-%L)   <-- +16
;                                   CWPHILIMIT(%i-%L) <-- +16
;                                   STATUS(ISR)       <-- +24
; OSTCBHighRdy->OSTCBStkPtr -->     Compiler space    <-- 0
;
; Note : OSStartHighRdy() MUST:
;           a) Call OSTaskSwHook() then,
;           b) Set OSRunning to TRUE,
;           c) Switch to the highest priority task.
;*********************************************************************************************************

OSStartHighRdy:
   ; C function starts with "save %sp,xx"
   ; Call OSTaskSwHook()
    .if (OS_CPU_HOOKS_EN == 1)
      MOVI32    %g0, OSTaskSwHook@h
      CALL      %g0
      NOP
    .endif

   ; OSRunning = TRUE;
      inc8      OSRunning

   ; Switch to the highest priority task.
   ; %sp = OSTCBHighRdy->OSTCBStkPtr
      MOVI32    %g0, OSTCBHighRdy          ; %g0 = &OSTCBHighRdy
      LD        %g1, [%g0]                 ; %g1 = &OS_TCB
      LD        %sp, [%g1]                 ; stack is the first element

      LOAD_CONTEXT

      TRET      %o7                        ; ISTATUS -> STATUS (no change in fact)
      NOP




;*********************************************************************************************************
;                                PERFORM A CONTEXT SWITCH (From task level)
;                                           void OSCtxSw(void)
;
; Note(s): 1) Upon entry,
;             OSTCBCur     points to the OS_TCB of the task to suspend
;             OSTCBHighRdy points to the OS_TCB of the task to resume
;
;          2) The processor decrement CWP in order to save %i,%L :
;              It Save interrupt status to ISTATUS register
;
;
;          3) The stack frame of the task to resume looks as follows:
;
;                                   return address    <-- +1
;                                   ISTATUS           <-- +8
;                                   %g0-%g7           <-- +8
;                                   CWP_ISR(%i)       <-- +16
;                                   CWP_TASK(%i-%L)   <-- +16
;                                   ...
;                                   ...
;                                   CWP_HL-1(%i-%L)   <-- +16
;                                   CWPHILIMIT(%i-%L) <-- +16
;                                   STATUS(ISR)       <-- +24
; OSTCBHighRdy->OSTCBStkPtr -->     Compiler space    <-- 0
;
;*********************************************************************************************************

OSCtxSw:
   ; This is the entry of a TRAP instruction
   ; We are in a new CWP and ISTATUS is the saved status
   ; %o7 is the Interrupt return address

      SAVE_CONTEXT                          ; affects (%sp, CWP, %g0, %g1, %g2, %g6 and %g7)

   ; OSTCBCur->OSTCBStkPtr = %sp
      MOVI32   %g0, OSTCBCur                ; %g0 = &OSTCBHighRdy
      LD       %g1, [%g0]                   ; %g1 = &OS_TCB
      ST       [%g1], %sp                   ; stack is the first element

   ; Call OSTaskSwHook()
    .if (OS_CPU_HOOKS_EN == 1)
      MOVI32   %g0, OSTaskSwHook@h
      CALL     %g0
      NOP
    .endif

   ; OSTCBCur = OSTCBHighRdy
      MOVI32   %g0, OSTCBHighRdy
      LD       %g1, [%g0]                    ; %g1 = HighRdy TCB
      MOVI32   %g0, OSTCBCur
      ST       [%g0], %g1

   ; OSPrioCur = OSPrioHighRdy
      MOVI32   %g2, OSPrioHighRdy
      LD       %g3, [%g2]                    ; %g3 = HighPrioRdy
      MOVI32   %g2, OSPrioCur
      ST       [%g2], %g3


   ; Switch to the highest priority task.
   ; %sp = OSTCBHighRdy->OSTCBStkPtr (%g1 = OSTCBHighRdy)
      ;MOVI32   %g0, OSTCBHighRdy          ; %g0 = &OSTCBHighRdy
      ;LD       %g1, [%g0]                 ; %g1 = &OS_TCB
      LD       %sp, [%g1]                 ; stack is the first element

      LOAD_CONTEXT

      TRET           %o7
      NOP




;*********************************************************************************************************
;                                            HANDLE TICK ISR
;
;
; Arguments  : none
;
; Returns    : none
;
; Note(s)    : The following C-like pseudo-code describe the operation being performed in the code below.
;
;              Save all registers on the current task's stack;
;              OSIntNesting++;
;              if (OSIntNesting == 1) {
;                 OSTCBCur->OSTCBStkPtr = %sp
;              }
;              OSTimeTick();              Notify uC/OS-II that a tick has occured
;              OSIntExit();               Notify uC/OS-II about end of ISR
;              Restore all registers that were save on the current task's stack;
;              Return from Interrupt;
;*********************************************************************************************************
;
OSTickISR:
   ; We are in a new CWP and ISTATUS is the saved status
   ; %o7 is the Interrupt return address


      SAVE_CONTEXT                          ; affects (%sp, CWP, %g0, %g1, %g2, %g6 and %g7)

   ; Call OSIntEnter() or OSIntNesting++;
   ; warning !! OSIntNesting is 8bits value !!
      MOVI32    %g2, OSIntNesting           ; %g2 = &OSIntNesting
      LD        %g1, [%g2]                  ; %g1 = OSIntNesting
      EXT8D     %g1, %g2                    ; extract byte
      ADDI      %g1, 1                      ; %g1 ++
      FILL8     %r0, %g1                    ; %g0 = %g1 %g1 %g1 %g1
      ST8D      [%g2], %r0                  ; store %g1




   ; if (OSIntNesting == 1) OSTCBCur->OSTCBStkPtr = %sp
   ; %g1 = OSIntNesting
      CMPI      %g1, 1                      ; %g1 == 1
      SKPS      cc_eq                       ; %g1 == 0 ?
      BR        next                        ; no
      ;NOP                                   ; yes
      MOVI32   %g0, OSTCBCur                ; %g0 = &OSTCBHighRdy
      LD       %g1, [%g0]                   ; %g1 = &OS_TCB
      ST       [%g1], %sp                   ; stack is the first element


next:
   ; Clear the interrupt
   ; Clear the timer interrupt : writing to np_timerstatus register
      MOVI32    %g0, timer_address          ; (depends on the design)
      ST        [%g0], %g1

   ; Call OSTimeTick()
      MOVI32   %g0, OSTimeTick@h
      CALL     %g0
      NOP

   ; Call OSIntExit()
      MOVI32   %g0, OSIntExit@h
      CALL     %g0
      NOP

      LOAD_CONTEXT

      TRET           %o7
      NOP



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
丁香婷婷综合激情五月色| 3d动漫精品啪啪一区二区竹菊| 亚洲综合久久av| 精品久久久久一区| 北条麻妃一区二区三区| 香蕉久久一区二区不卡无毒影院| 久久影院午夜论| 日本精品一区二区三区高清 | 在线观看一区日韩| 国产美女精品一区二区三区| 亚洲午夜久久久久久久久电影网 | 亚洲视频在线观看三级| 91麻豆精品国产自产在线| 亚洲乱码国产乱码精品精98午夜| 久久久美女毛片| 亚洲精品一线二线三线| 欧美精品九九99久久| 在线观看日韩国产| 亚洲码国产岛国毛片在线| 国产精品日产欧美久久久久| 日韩欧美中文一区二区| 麻豆成人久久精品二区三区小说| 国产精品一区二区果冻传媒| 日韩亚洲欧美在线| 欧美午夜不卡视频| 91香蕉视频mp4| 国产精品综合在线视频| 日韩精品一二三| 亚洲成av人片www| 日韩免费电影网站| 日韩一二在线观看| aaa欧美日韩| 亚洲一区二区三区中文字幕| 国产精品色在线| 91精品国产综合久久精品麻豆| 欧洲一区二区三区在线| 中文字幕一区三区| 国产精品福利一区二区三区| 亚洲综合久久久| 日韩欧美久久一区| 成人午夜视频免费看| 一区二区三区成人| 精品少妇一区二区三区在线视频| 国产一区二区导航在线播放| 中文字幕日韩欧美一区二区三区| 欧美在线你懂的| 91黄色免费看| 亚洲一区成人在线| 午夜精品福利在线| 国产精品一区二区久激情瑜伽| 在线观看欧美精品| 91精品国产色综合久久不卡电影| 天天综合网 天天综合色| 国产成a人亚洲| 亚洲福利视频导航| 日韩欧美亚洲另类制服综合在线 | 成人国产精品免费观看| 久久久电影一区二区三区| 国产99精品国产| 一区二区三区欧美在线观看| 这里是久久伊人| 国产成人鲁色资源国产91色综| 亚洲三级在线看| 欧美精品在欧美一区二区少妇| 韩国中文字幕2020精品| 青草av.久久免费一区| 精品国产免费一区二区三区香蕉| 偷拍亚洲欧洲综合| 日本韩国精品一区二区在线观看| 日韩一区二区三区免费看| 日韩免费福利电影在线观看| 国产一区91精品张津瑜| 久久蜜桃一区二区| 国产一区三区三区| 亚洲最快最全在线视频| 欧美一级欧美一级在线播放| 美女国产一区二区| 亚洲自拍都市欧美小说| 日本高清免费不卡视频| 亚洲欧洲制服丝袜| 色噜噜久久综合| 亚洲成人一二三| 欧美综合亚洲图片综合区| 亚洲综合激情小说| 色婷婷综合在线| 亚洲网友自拍偷拍| 日韩视频一区二区三区在线播放 | 国产一区二区视频在线| 日韩欧美一卡二卡| 午夜视频一区二区三区| 精品一区二区三区免费毛片爱| 久久精品一区四区| 欧美一级二级在线观看| 欧美在线免费观看视频| 99久久精品一区| 成人自拍视频在线| 国模冰冰炮一区二区| 奇米色一区二区三区四区| 亚洲国产精品天堂| 一区二区在线观看视频| 国产精品福利影院| 中文字幕在线不卡视频| 久久久久久久久久久久久久久99 | 久久综合色婷婷| 色哟哟一区二区三区| 欧美日韩日日夜夜| 国产综合久久久久久久久久久久 | 国产精品第13页| 精品福利一区二区三区免费视频| 色综合av在线| 91福利精品视频| 色女孩综合影院| 色94色欧美sute亚洲线路一久| 99久久精品免费看国产免费软件| 国产91对白在线观看九色| 国产在线播放一区| 国产东北露脸精品视频| 国产高清一区日本| 成人午夜在线视频| kk眼镜猥琐国模调教系列一区二区| 丁香网亚洲国际| 99久久精品情趣| 欧美性大战久久| 欧美放荡的少妇| 日韩美一区二区三区| 久久久久99精品国产片| 精品久久久久久久久久久院品网| 精品国产凹凸成av人网站| 欧美一级理论片| 国产99久久久国产精品潘金网站| 成人午夜视频网站| 一本到三区不卡视频| 欧美在线你懂得| 欧美一区三区四区| 一本到不卡精品视频在线观看| 欧美在线免费视屏| 亚洲国产精品久久久男人的天堂| 五月婷婷综合网| 久久99九九99精品| 成人app下载| 欧美亚洲国产一区二区三区va| 91精品国产乱码| 国产精品天天看| 亚洲午夜免费视频| 国产精品资源在线| 一本到高清视频免费精品| 欧美一区二区三区男人的天堂| 欧美激情在线一区二区三区| 又紧又大又爽精品一区二区| 精品一区二区精品| 99久久精品免费精品国产| 欧美伦理影视网| 成人高清伦理免费影院在线观看| 91视视频在线直接观看在线看网页在线看| 一区二区视频在线| 秋霞午夜鲁丝一区二区老狼| 成人97人人超碰人人99| 欧美精品123区| 国产精品视频观看| 麻豆专区一区二区三区四区五区| 成人一级片在线观看| 91麻豆精品国产| 国产精品久久久99| 蜜臀av性久久久久av蜜臀妖精| 91亚洲大成网污www| 欧美精品一区二区在线播放| 亚洲一区中文在线| 成人教育av在线| 欧美一区二区网站| 亚洲精品五月天| 东方欧美亚洲色图在线| 日韩欧美成人激情| 亚欧色一区w666天堂| 91在线免费播放| 久久久99免费| 美女国产一区二区| 9191久久久久久久久久久| 国产曰批免费观看久久久| 7777精品久久久大香线蕉| 亚洲激情校园春色| 99视频有精品| 国产欧美一区二区精品婷婷| 免费在线成人网| 在线成人高清不卡| 性久久久久久久久| 欧洲av在线精品| 亚洲综合在线第一页| 91年精品国产| 亚洲人成在线播放网站岛国| 国产精品羞羞答答xxdd| 欧美成人精品3d动漫h| 日本美女一区二区三区视频| 欧美视频一区二区三区四区| 亚洲欧美日韩中文字幕一区二区三区| 国产精品77777竹菊影视小说| 日韩精品一区二区三区三区免费| 午夜视频在线观看一区二区 | 综合久久综合久久| 三级成人在线视频| hitomi一区二区三区精品|