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

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

?? portasm_fx3.s85

?? STM32 FreeRTOS v5.2移植源代碼
?? S85
字號:
;/*
;	FreeRTOS.org V5.2.0 - Copyright (C) 2003-2009 Richard Barry.
;
;	This file is part of the FreeRTOS.org distribution.
;
;	FreeRTOS.org is free software; you can redistribute it and/or modify it 
;	under the terms of the GNU General Public License (version 2) as published
;	by the Free Software Foundation and modified by the FreeRTOS exception.
;
;	FreeRTOS.org is distributed in the hope that it will be useful,	but WITHOUT
;	ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
;	FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for 
;	more details.
;
;	You should have received a copy of the GNU General Public License along 
;	with FreeRTOS.org; if not, write to the Free Software Foundation, Inc., 59 
;	Temple Place, Suite 330, Boston, MA  02111-1307  USA.
;
;	A special exception to the GPL is included to allow you to distribute a 
;	combined work that includes FreeRTOS.org without being obliged to provide
;	the source code for any proprietary components.  See the licensing section
;	of http://www.FreeRTOS.org for full details.
;
;
;	***************************************************************************
;	*                                                                         *
;	* Get the FreeRTOS eBook!  See http://www.FreeRTOS.org/Documentation      *
;	*                                                                         *
;	* This is a concise, step by step, 'hands on' guide that describes both   *
;	* general multitasking concepts and FreeRTOS specifics. It presents and   *
;	* explains numerous examples that are written using the FreeRTOS API.     *
;	* Full source code for all the examples is provided in an accompanying    *
;	* .zip file.                                                              *
;	*                                                                         *
;	***************************************************************************
;
;	1 tab == 4 spaces!
;
;	Please ensure to read the configuration and relevant port sections of the
;	online documentation.
;
;	http://www.FreeRTOS.org - Documentation, latest information, license and
;	contact details.
;
;	http://www.SafeRTOS.com - A version that is certified for use in safety
;	critical systems.
;
;	http://www.OpenRTOS.com - Commercial support, development, porting,
;	licensing and training services.
;*/
; Note: Select the correct include files for the device used by the application.
#include "FreeRTOSConfig.h"
;------------------------------------------------------------------------------

; Functions used by scheduler
;------------------------------------------------------------------------------
    EXTERN    vTaskSwitchContext
    EXTERN    vTaskIncrementTick

; Variables used by scheduler
;------------------------------------------------------------------------------
    EXTERN    pxCurrentTCB
    EXTERN    usCriticalNesting

; Functions implemented in this file
;------------------------------------------------------------------------------
    PUBLIC    vPortYield
    PUBLIC    vPortStart

; Security ID definition
;------------------------------------------------------------------------------
#define	CG_SECURITY0	0FFH
#define	CG_SECURITY1	0FFH
#define	CG_SECURITY2	0FFH
#define	CG_SECURITY3	0FFH
#define	CG_SECURITY4	0FFH
#define	CG_SECURITY5	0FFH
#define	CG_SECURITY6	0FFH
#define	CG_SECURITY7	0FFH
#define	CG_SECURITY8	0FFH
#define	CG_SECURITY9	0FFH

; Option Byte definitions
;------------------------------------------------------------------------------
#define	CG_OPTION7A	0x00
#define	CG_OPTION7B	0x04
#define	OPT7C		0x00
#define	OPT7D		0x00
#define	OPT7E		0x00
#define	OPT7F		0x00

; Tick ISR Prototype
;------------------------------------------------------------------------------
        PUBWEAK `??MD_INTTM0EQ0??INTVEC 608`
        PUBLIC MD_INTTM0EQ0

MD_INTTM0EQ0        SYMBOL "MD_INTTM0EQ0"
`??MD_INTTM0EQ0??INTVEC 608` SYMBOL "??INTVEC 608", MD_INTTM0EQ0

;------------------------------------------------------------------------------
;   portSAVE_CONTEXT MACRO
;   Saves the context of the remaining general purpose registers
;   and the usCriticalNesting Value of the active Task onto the task stack
;   saves stack pointer to the TCB
;------------------------------------------------------------------------------
portSAVE_CONTEXT MACRO
#if configDATA_MODE == 1                                        ; Using the Tiny data model
    prepare {r20,r21,r22,r23,r24,r25,r26,r27,r28,r29,r30},76,sp ; save general purpose registers
    sst.w   r19,72[ep]
    sst.w   r18,68[ep]
    sst.w   r17,64[ep]
    sst.w   r16,60[ep]
    sst.w   r15,56[ep]
    sst.w   r14,52[ep]
    sst.w   r13,48[ep]
    sst.w   r12,44[ep]
    sst.w   r11,40[ep]
    sst.w   r10,36[ep]
    sst.w   r9,32[ep]
    sst.w   r8,28[ep]
    sst.w   r7,24[ep]
    sst.w   r6,20[ep]
    sst.w   r5,16[ep]
    sst.w   r4,12[ep]
#else                                                           ; Using the Small/Large data model
    prepare {r20,r21,r22,r23,r24,r26,r27,r28,r29,r30},72,sp     ; save general purpose registers
    sst.w   r19,68[ep]
    sst.w   r18,64[ep]
    sst.w   r17,60[ep]
    sst.w   r16,56[ep]
    sst.w   r15,52[ep]
    sst.w   r14,48[ep]
    sst.w   r13,44[ep]
    sst.w   r12,40[ep]
    sst.w   r11,36[ep]
    sst.w   r10,32[ep]
    sst.w   r9,28[ep]
    sst.w   r8,24[ep]
    sst.w   r7,20[ep]
    sst.w   r6,16[ep]
    sst.w   r5,12[ep]
#endif /* configDATA_MODE */
    sst.w   r2,8[ep]
    sst.w   r1,4[ep]
    MOVHI   hi1(usCriticalNesting),r0,r1                        ; save usCriticalNesting value to stack
    ld.w    lw1(usCriticalNesting)[r1],r2
    sst.w   r2,0[ep]
    MOVHI   hi1(pxCurrentTCB),r0,r1                             ; save SP to top of current TCB
    ld.w    lw1(pxCurrentTCB)[r1],r2
    st.w    sp,0[r2]
    ENDM
;------------------------------------------------------------------------------

;------------------------------------------------------------------------------
;   portRESTORE_CONTEXT MACRO
;   Gets stack pointer from the current TCB
;   Restores the context of the usCriticalNesting value and general purpose
;   registers of the selected task from the task stack
;------------------------------------------------------------------------------
portRESTORE_CONTEXT MACRO
    MOVHI   hi1(pxCurrentTCB),r0,r1         ; get Stackpointer address
    ld.w    lw1(pxCurrentTCB)[r1],sp
    MOV     sp,r1
    ld.w    0[r1],sp                        ; load stackpointer
    MOV     sp,ep                           ; set stack pointer to element pointer
    sld.w   0[ep],r1                        ; load usCriticalNesting value from stack
    MOVHI   hi1(usCriticalNesting),r0,r2
    st.w    r1,lw1(usCriticalNesting)[r2]
    sld.w   4[ep],r1                        ; restore general purpose registers
    sld.w   8[ep],r2
#if configDATA_MODE == 1                    ; Using Tiny data model
    sld.w   12[ep],r4
    sld.w   16[ep],r5
    sld.w   20[ep],r6
    sld.w   24[ep],r7
    sld.w   28[ep],r8
    sld.w   32[ep],r9
    sld.w   36[ep],r10
    sld.w   40[ep],r11
    sld.w   44[ep],r12
    sld.w   48[ep],r13
    sld.w   52[ep],r14
    sld.w   56[ep],r15
    sld.w   60[ep],r16
    sld.w   64[ep],r17
    sld.w   68[ep],r18
    sld.w   72[ep],r19
    dispose 76,{r20,r21,r22,r23,r24,r25,r26,r27,r28,r29,r30}
#else                                       ; Using Small/Large data model
    sld.w   12[ep],r5
    sld.w   16[ep],r6
    sld.w   20[ep],r7
    sld.w   24[ep],r8
    sld.w   28[ep],r9
    sld.w   32[ep],r10
    sld.w   36[ep],r11
    sld.w   40[ep],r12
    sld.w   44[ep],r13
    sld.w   48[ep],r14
    sld.w   52[ep],r15
    sld.w   56[ep],r16
    sld.w   60[ep],r17
    sld.w   64[ep],r18
    sld.w   68[ep],r19
    dispose 72,{r20,r21,r22,r23,r24,r26,r27,r28,r29,r30}
#endif /* configDATA_MODE */
    ENDM
;------------------------------------------------------------------------------

;------------------------------------------------------------------------------
;   Restore the context of the first task that is going to run.
;
;   Input:  NONE
;
;   Call:   CALL    vPortStart
;
;   Output: NONE
;------------------------------------------------------------------------------	
    RSEG CODE:CODE
vPortStart:
    portRESTORE_CONTEXT	                    ; Restore the context of whichever task the ...
    ld.w    0[sp],lp
    ldsr    lp,5                            ; restore PSW
    DI
    ld.w    4[sp],lp                        ; restore LP
    ld.w    8[sp],lp                        ; restore LP
    ADD     0x0C,sp                         ; set SP to right position
    EI
    jmp     [lp]
;------------------------------------------------------------------------------

;------------------------------------------------------------------------------
;   Port Yield function to check for a Task switch in the cooperative and
;   preemptive mode
;
;   Input:  NONE
;
;   Call:   CALL    vPortYield
;
;   Output: NONE
;------------------------------------------------------------------------------

	RSEG CODE:CODE
vPortYield:

    add     -0x0C,sp                          ; prepare stack to save necessary values
    st.w    lp,8[sp]                        ; store LP to stack
    stsr    0,r31
    st.w    lp,4[sp]                        ; store EIPC to stack
    stsr    1,lp
    st.w    lp,0[sp]                        ; store EIPSW to stack
    portSAVE_CONTEXT		            ; Save the context of the current task.
    jarl    vTaskSwitchContext,lp           ; Call the scheduler.
    portRESTORE_CONTEXT		            ; Restore the context of whichever task the ...
                		            ; ... scheduler decided should run.
	ld.w    0[sp],lp                        ; restore EIPSW from stack
    ldsr    lp,1
    ld.w    4[sp],lp                        ; restore EIPC from stack
    ldsr    lp,0
    ld.w    8[sp],lp                        ; restore LP from stack
    add     0x0C,sp                         ; set SP to right position

    RETI

;------------------------------------------------------------------------------

;------------------------------------------------------------------------------
;   Perform the necessary steps of the Tick Count Increment and Task Switch
;   depending on the chosen kernel configuration
;
;   Input:  NONE
;
;   Call:   ISR
;
;   Output: NONE
;------------------------------------------------------------------------------	
#if configUSE_PREEMPTION == 1               ; use preemptive kernel mode

MD_INTTM0EQ0:

    add     -0x0C,sp                          ; prepare stack to save necessary values
    st.w    lp,8[sp]                        ; store LP to stack
    stsr    0,r31
    st.w    lp,4[sp]                        ; store EIPC to stack
    stsr    1,lp
    st.w    lp,0[sp]                        ; store EIPSW to stack
    portSAVE_CONTEXT		            ; Save the context of the current task.
    jarl    vTaskIncrementTick,lp           ; Call the timer tick function.
    jarl    vTaskSwitchContext,lp           ; Call the scheduler.
    portRESTORE_CONTEXT		            ; Restore the context of whichever task the ...
                		            ; ... scheduler decided should run.
    ld.w    0[sp],lp                        ; restore EIPSW from stack
    ldsr    lp,1
    ld.w    4[sp],lp                        ; restore EIPC from stack
    ldsr    lp,0
    ld.w    8[sp],lp                        ; restore LP from stack
    add     0x0C,sp                         ; set SP to right position

    RETI
;------------------------------------------------------------------------------
#else                                       ; use cooperative kernel mode

MD_INTTM0EQ0:
    prepare {lp,ep},8,sp
    sst.w   r1,4[ep]
    sst.w   r5,0[ep]
    jarl    vTaskIncrementTick,lp           ; Call the timer tick function.
    sld.w   0[ep],r5
    sld.w   4[ep],r1
    dispose 8,{lp,ep}
    RETI
#endif /* configUSE_PREEMPTION */

;------------------------------------------------------------------------------
        COMMON INTVEC:CODE:ROOT(2)
        ORG 608
`??MD_INTTM0EQ0??INTVEC 608`:
        JR MD_INTTM0EQ0

        RSEG NEAR_ID:CONST:SORT:NOROOT(2)
`?<Initializer for usCriticalNesting>`:
        DW 10

      COMMON INTVEC:CODE:ROOT(2)
      ORG 40H
`??vPortYield??INTVEC 40`:
        JR vPortYield

;------------------------------------------------------------------------------
; set microcontroller security ID

      COMMON INTVEC:CODE:ROOT(2)
      ORG 70H
`SECUID`:
      DB CG_SECURITY0
      DB CG_SECURITY1
      DB CG_SECURITY2
      DB CG_SECURITY3
      DB CG_SECURITY4
      DB CG_SECURITY5
      DB CG_SECURITY6
      DB CG_SECURITY7
      DB CG_SECURITY8
      DB CG_SECURITY9

;------------------------------------------------------------------------------
; set microcontroller option bytes

      COMMON INTVEC:CODE:ROOT(2)
      ORG 7AH
`OPTBYTES`:
      DB CG_OPTION7A
      DB CG_OPTION7B
      DB OPT7C
      DB OPT7D
      DB OPT7E
      DB OPT7F

      END

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩在线一区二区| 欧美影视一区在线| 91啪亚洲精品| 91精品国产综合久久婷婷香蕉 | 国产91丝袜在线播放| 日本乱人伦一区| 久久久一区二区三区捆绑**| 国产美女久久久久| 欧美精品第1页| 成人欧美一区二区三区1314| 免费成人深夜小野草| 91毛片在线观看| 国产人成亚洲第一网站在线播放| 天天综合色天天| 色94色欧美sute亚洲线路一ni| 久久久蜜桃精品| 蜜桃久久精品一区二区| 在线观看网站黄不卡| 国产精品久久久99| 处破女av一区二区| 精品精品国产高清a毛片牛牛| 亚洲国产精品一区二区久久恐怖片 | 国产人成亚洲第一网站在线播放| 日韩av一区二区三区四区| 91首页免费视频| 亚洲gay无套男同| 91在线精品一区二区| 国产色产综合色产在线视频| 久久精品噜噜噜成人88aⅴ| 精品视频在线免费观看| 夜色激情一区二区| 91免费版pro下载短视频| 国产精品免费久久久久| 国产aⅴ精品一区二区三区色成熟| 日韩一区二区三区四区| 日本欧美在线观看| 欧美一区二区三区在线看| 午夜不卡在线视频| 3atv一区二区三区| 免费观看久久久4p| 精品美女一区二区三区| 国产一区视频网站| 欧美国产精品一区二区| 成人avav在线| 亚洲免费观看高清完整版在线观看熊| eeuss鲁一区二区三区| 日韩一区在线播放| 在线视频综合导航| 天堂va蜜桃一区二区三区| 欧美嫩在线观看| 人禽交欧美网站| 久久色中文字幕| 成人福利在线看| 亚洲乱码国产乱码精品精可以看| 91成人国产精品| 欧美a级一区二区| 久久精品视频免费| 91色在线porny| 亚洲成在人线在线播放| 日韩欧美中文字幕精品| 国产伦精品一区二区三区免费迷| 欧美国产精品中文字幕| 91黄色免费版| 免费高清成人在线| 欧美国产国产综合| 欧洲人成人精品| 极品少妇一区二区三区精品视频| 国产精品乱人伦中文| 欧美在线色视频| 久久66热偷产精品| 亚洲免费在线看| 日韩美女视频在线| 99国产精品久久久久久久久久 | 欧美激情自拍偷拍| 欧美亚洲综合在线| 国产在线精品一区二区夜色| 亚洲男人电影天堂| 欧美精品一区二区蜜臀亚洲| 91性感美女视频| 久久国产麻豆精品| 亚洲乱码国产乱码精品精可以看| 亚洲精品一区二区三区在线观看| 97久久超碰精品国产| 美女网站一区二区| 伊人夜夜躁av伊人久久| 久久蜜桃av一区精品变态类天堂| 一本大道久久精品懂色aⅴ| 久久99在线观看| 亚洲国产一区二区三区 | 高清不卡在线观看| 丝袜诱惑制服诱惑色一区在线观看 | 懂色一区二区三区免费观看| 午夜激情综合网| 亚洲色图色小说| 久久毛片高清国产| 欧美一区二区高清| 欧美日韩夫妻久久| 色偷偷88欧美精品久久久| 国内精品伊人久久久久av一坑| 亚洲成人综合在线| 亚洲精品免费在线观看| 欧美国产日韩亚洲一区| 精品国产一区二区三区四区四| 欧美日韩精品一区二区三区四区| 成人动漫视频在线| 国产乱国产乱300精品| 免费观看日韩电影| 日韩精品一级二级| 午夜精品一区二区三区免费视频| 综合网在线视频| 中文字幕不卡在线观看| 国产婷婷一区二区| 久久这里只有精品视频网| 日韩一区二区在线播放| 69堂精品视频| 7777精品伊人久久久大香线蕉最新版| 欧美亚洲国产bt| 欧美午夜精品电影| 欧美性猛片xxxx免费看久爱| 色国产综合视频| 日本高清免费不卡视频| 国产欧美一区二区三区网站| 久久婷婷综合激情| 久久蜜臀精品av| 国产精品区一区二区三区| 日本一区二区三区视频视频| 国产精品久久久久久久久动漫| 欧美激情一区三区| 中文字幕亚洲一区二区av在线| 国产精品久久夜| 一区二区三区在线观看视频| 亚洲韩国一区二区三区| 日日夜夜精品视频天天综合网| 免费观看成人鲁鲁鲁鲁鲁视频| 久热成人在线视频| 国产福利91精品一区二区三区| 国产99精品国产| 一本大道综合伊人精品热热| 精品视频在线免费看| 日韩欧美在线网站| 欧美国产日产图区| 一区二区三区欧美视频| 婷婷夜色潮精品综合在线| 免费人成黄页网站在线一区二区 | 成人a区在线观看| 91麻豆成人久久精品二区三区| 欧美色图激情小说| 久久综合狠狠综合久久激情| 欧美国产激情一区二区三区蜜月| 一区二区三区丝袜| 久久av中文字幕片| 暴力调教一区二区三区| 欧美日韩高清影院| 国产欧美一区二区精品性| 亚洲综合久久av| 国产一区91精品张津瑜| 一本大道av一区二区在线播放| 777色狠狠一区二区三区| 国产精品免费视频网站| 亚洲超丰满肉感bbw| 丁香另类激情小说| 欧美精品一级二级三级| 国产精品―色哟哟| 日本中文一区二区三区| 99精品1区2区| 亚洲精品一区二区精华| 亚洲国产综合人成综合网站| 国产一区二区精品在线观看| 欧美日韩免费一区二区三区 | 国产成人鲁色资源国产91色综| 欧美在线视频日韩| 国产欧美日本一区视频| 日韩在线一二三区| 97精品国产露脸对白| 日韩欧美在线观看一区二区三区| 中文字幕一区二区三区精华液| 免费在线观看一区二区三区| 欧美中文字幕一区二区三区亚洲| 国产日本欧美一区二区| 视频一区在线播放| 欧美国产精品一区| 麻豆91精品91久久久的内涵| 欧美亚洲综合一区| 最新国产精品久久精品| 高清视频一区二区| 26uuu国产一区二区三区| 婷婷夜色潮精品综合在线| 在线视频国内一区二区| 欧美国产视频在线| 粉嫩一区二区三区在线看| 精品少妇一区二区三区在线视频 | 一区二区三区日韩| heyzo一本久久综合| 欧美激情一区二区| 国产成人鲁色资源国产91色综| 久久久久高清精品| 国产不卡视频在线观看| 久久综合九色综合97婷婷 | 久久精品人人做人人综合| 六月丁香婷婷色狠狠久久|