亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
亚洲综合免费观看高清完整版在线| 日韩欧美中文字幕精品| 国产精品少妇自拍| 国产成人在线网站| 国产午夜精品美女毛片视频| 国产精品香蕉一区二区三区| 久久精品无码一区二区三区| 国产精品123| 亚洲啪啪综合av一区二区三区| 成人福利视频在线看| 亚洲精品写真福利| 欧美精品在线一区二区三区| 久久99久久精品欧美| 国产欧美一区二区精品久导航| 不卡一区二区三区四区| 亚洲一区二区三区精品在线| 制服丝袜中文字幕亚洲| 青青草一区二区三区| 国产香蕉久久精品综合网| www.一区二区| 日一区二区三区| 久久精品亚洲精品国产欧美 | 久久一日本道色综合| 国产精品亚洲成人| 一级日本不卡的影视| 欧美一级搡bbbb搡bbbb| 丰满亚洲少妇av| 性久久久久久久久久久久| 精品理论电影在线| 色综合久久久网| 精品在线免费视频| 亚洲精品国产a久久久久久 | 99久久免费精品高清特色大片| 国产黄色精品网站| 亚洲免费观看高清完整| 日韩三级免费观看| 色妹子一区二区| 六月丁香综合在线视频| 亚洲视频免费在线| 久久综合五月天婷婷伊人| 91精品办公室少妇高潮对白| 韩国午夜理伦三级不卡影院| 洋洋av久久久久久久一区| 精品国产乱码久久久久久牛牛| 91在线云播放| 国产高清不卡一区二区| 天堂成人免费av电影一区| 国产精品第五页| 精品1区2区在线观看| 欧美日韩www| 色www精品视频在线观看| 国产一区二区三区四| 日韩国产欧美在线播放| 亚洲九九爱视频| 国产清纯美女被跳蛋高潮一区二区久久w | 久久国产福利国产秒拍| 亚洲美女偷拍久久| 国产精品色在线观看| 日韩精品一区二区三区四区 | 欧美美女视频在线观看| 色先锋资源久久综合| 国产aⅴ综合色| 国产一区免费电影| 看电影不卡的网站| 日本伊人精品一区二区三区观看方式| 亚洲少妇中出一区| 国产精品嫩草99a| 久久夜色精品国产欧美乱极品| 欧美日韩国产综合视频在线观看| 色欲综合视频天天天| 成人动漫一区二区| 成人免费视频国产在线观看| 久久精品国产亚洲a| 蜜臀av一区二区在线免费观看 | 国产精品麻豆久久久| 久久嫩草精品久久久久| 日韩欧美一级二级| 欧美一区二区三区在线观看视频| 欧美日本一区二区三区四区| 欧美日韩在线直播| 欧美日韩你懂的| 欧美亚州韩日在线看免费版国语版| 97精品久久久久中文字幕| jlzzjlzz欧美大全| 97久久精品人人做人人爽| 色欧美日韩亚洲| 欧美色区777第一页| 欧美日韩国产小视频| 欧美精品18+| 日韩美女一区二区三区四区| 日韩你懂的在线观看| 2024国产精品| 国产精品视频一二三区| 综合网在线视频| 夜夜爽夜夜爽精品视频| 亚洲成人免费影院| 人人超碰91尤物精品国产| 蜜桃一区二区三区在线| 国产成人午夜精品影院观看视频| 成人开心网精品视频| 日本高清不卡一区| 欧美精品高清视频| 久久九九国产精品| 亚洲人xxxx| 日韩国产欧美视频| 国产一区日韩二区欧美三区| www.一区二区| 884aa四虎影成人精品一区| 精品粉嫩aⅴ一区二区三区四区| 国产亚洲自拍一区| 一个色妞综合视频在线观看| 日本欧美肥老太交大片| 国产成人免费高清| 91国在线观看| 欧美大片免费久久精品三p| 国产精品色噜噜| 日韩高清电影一区| 国产成人精品亚洲日本在线桃色| 色美美综合视频| 久久久久久久国产精品影院| 最新国产成人在线观看| 美女久久久精品| 91浏览器打开| 欧美精品一区二区三区四区 | 亚洲国产aⅴ天堂久久| 九九**精品视频免费播放| 91一区在线观看| 欧美mv日韩mv亚洲| 亚洲精选免费视频| 国产黄色91视频| 在线综合+亚洲+欧美中文字幕| 中文字幕国产一区二区| 五月综合激情网| 91天堂素人约啪| 久久久精品免费免费| 水蜜桃久久夜色精品一区的特点| 国产69精品久久777的优势| 欧美丰满一区二区免费视频 | 青青草成人在线观看| 日本韩国欧美在线| 中国色在线观看另类| 久久精品国产第一区二区三区| 色婷婷狠狠综合| 中日韩免费视频中文字幕| 精品亚洲成a人| 中文字幕在线观看不卡视频| 日韩精品乱码av一区二区| 色婷婷精品久久二区二区蜜臂av| 亚洲国产岛国毛片在线| 久久国产精品一区二区| 欧美精品成人一区二区三区四区| 亚洲精品日产精品乱码不卡| 国产超碰在线一区| 久久亚洲综合av| 久久国产福利国产秒拍| 91麻豆精品国产自产在线观看一区| 亚洲黄色录像片| 91视频在线观看免费| 国产精品久久久一区麻豆最新章节| 激情成人午夜视频| 欧美成人激情免费网| 视频一区在线播放| 欧美日韩国产片| 五月激情丁香一区二区三区| 91福利国产精品| 一区二区三区四区蜜桃| 91日韩精品一区| 亚洲精品中文在线| 91久久线看在观草草青青 | 久久久久久久久久久久久夜| 久久成人免费网站| 精品国产伦一区二区三区免费 | 欧美三电影在线| 五月天视频一区| 欧美一区二区三区四区在线观看 | 欧美成人精品福利| 国产在线麻豆精品观看| 久久夜色精品国产噜噜av| 国产精品伊人色| 国产精品每日更新在线播放网址| av一区二区三区| 亚洲乱码中文字幕| 欧美三级韩国三级日本三斤| 婷婷综合另类小说色区| 日韩一区二区在线免费观看| 极品少妇xxxx精品少妇偷拍| 国产视频一区二区在线| 成av人片一区二区| 成人不卡免费av| 亚洲欧美日本韩国| 欧美日韩午夜在线| 蜜臀久久久久久久| 久久久99精品久久| 99久久婷婷国产综合精品电影 | 欧美三级资源在线| 美女视频一区在线观看| 国产欧美精品一区二区色综合朱莉 | 婷婷久久综合九色综合绿巨人| 日韩欧美一区二区不卡| 成人永久aaa|