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

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

?? portmacro.h

?? 一個開源的Modbus協(xié)議棧
?? H
字號:
/*
    FreeRTOS V4.1.1 - Copyright (C) 2003-2005 Richard Barry.
    Modification for STR71X/GCC -  Copyright (C) 2006 Christian Walter.

    This file is part of the FreeRTOS distribution.

    FreeRTOS is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    FreeRTOS 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; 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 can be applied should you wish to distribute
    a combined work that includes FreeRTOS, without being obliged to provide
    the source code for any proprietary components.  See the licensing section 
    of http://www.FreeRTOS.org for full details of how and when the exception
    can be applied.

    ***************************************************************************
    See http://www.FreeRTOS.org for documentation, latest information, license 
    and contact details.  Please ensure to read the configuration and relevant 
    port sections of the online documentation.
    ***************************************************************************
*/

#ifndef PORTMACRO_H
#define PORTMACRO_H

/* ----------------------- Defines ------------------------------------------*/
#define portCHAR        char
#define portFLOAT       float
#define portDOUBLE      double
#define portLONG        long
#define portSHORT       short
#define portSTACK_TYPE  unsigned portLONG
#define portBASE_TYPE   portLONG

#if( configUSE_16_BIT_TICKS == 1 )
typedef unsigned portSHORT portTickType;

#define portMAX_DELAY ( portTickType ) 0xffff
#else
typedef unsigned portLONG portTickType;

#define portMAX_DELAY ( portTickType ) 0xffffffff
#endif

/* ----------------------- Defines (Architecture) ---------------------------*/

#define portSTACK_GROWTH        ( -1 )
#define portTICK_RATE_MS        ( ( portTickType ) 1000 / configTICK_RATE_HZ )
#define portBYTE_ALIGNMENT      4

/* ----------------------- Global variables ---------------------------------*/
extern volatile unsigned portLONG ulCriticalNesting;

/*------------------------ Defines (Scheduler) ------------------------------*/
/*
 * portRESTORE_CONTEXT, portRESTORE_CONTEXT, portENTER_SWITCHING_ISR
 * and portEXIT_SWITCHING_ISR can only be called from ARM mode, but
 * are included here for efficiency.  An attempt to call one from
 * THUMB mode code will result in a compile time error.
 */

#define portRESTORE_CONTEXT()                                           \
do {                                                                    \
    extern void * volatile pxCurrentTCB;                                \
    /* Set the LR to the task stack. */                                 \
    asm volatile ( "LDR     R0, %0" : : "m" (pxCurrentTCB) );           \
    asm volatile ( "LDR     LR, [R0]" );                                \
                                                                        \
    /* The critical nesting depth is the first item on the stack. */    \
    /* Load it into the ulCriticalNesting variable. */                  \
    asm volatile ( "LDR     R0, =ulCriticalNesting" );                  \
    asm volatile ( "LDMFD   LR!, {R1}" );                               \
    asm volatile ( "STR     R1, [R0]" );                                \
                                                                        \
    /* Get the SPSR from the stack. */                                  \
    asm volatile ( "LDMFD   LR!, {R0}" );                               \
    asm volatile ( "MSR     SPSR, R0" );                                \
                                                                        \
    /* Restore all system mode registers for the task. */               \
    asm volatile ( "LDMFD   LR, {R0-R14}^" );                           \
    asm volatile ( "NOP" );                                             \
                                                                        \
    /* Restore the return address. */                                   \
    asm volatile ( "LDR     LR, [LR, #+60]" );                          \
                                                                        \
    /* And return - correcting the offset in the LR to obtain the */    \
    /* correct address. */                                              \
    asm volatile ( "SUBS    PC, LR, #4" );                              \
} while( 0 );

/*-----------------------------------------------------------*/

#define portSAVE_CONTEXT()                                              \
do {                                                                    \
    extern void * volatile pxCurrentTCB;                                \
    /* Push R0 as we are going to use the register. */                  \
    asm volatile ( "STMDB   SP!, {R0}" );                               \
                                                                        \
    /* Set R0 to point to the task stack pointer. */                    \
    asm volatile ( "STMDB   SP,{SP}^" );                                \
    asm volatile ( "SUB     SP, SP, #4" );                              \
    asm volatile ( "LDMIA   SP!,{R0}" );                                \
                                                                        \
    /* Push the return address onto the stack. */                       \
    asm volatile ( "STMDB   R0!, {LR}" );                               \
                                                                        \
    /* Now we have saved LR we can use it instead of R0. */             \
    asm volatile ( "MOV     LR, R0" );                                  \
                                                                        \
    /* Pop R0 so we can save it onto the system mode stack. */          \
    asm volatile ( "LDMIA   SP!, {R0}" );                               \
                                                                        \
    /* Push all the system mode registers onto the task stack. */       \
    asm volatile ( "STMDB   LR,{R0-LR}^");                              \
    asm volatile ( "SUB     LR, LR, #60" );                             \
                                                                        \
    /* Push the SPSR onto the task stack. */                            \
    asm volatile ( "MRS     R0, SPSR" );                                \
    asm volatile ( "STMDB   LR!, {R0}" );                               \
                                                                        \
    asm volatile ( "LDR     R0, =ulCriticalNesting " );                 \
    asm volatile ( "LDR     R0, [R0]" );                                \
    asm volatile ( "STMDB   LR!, {R0}" );                               \
                                                                        \
    /* Store the new top of stack for the task. */                      \
    asm volatile ( "LDR     R0, %0" : : "m" (pxCurrentTCB) );           \
    asm volatile ( "STR     LR, [R0]" );                                \
} while( 0 );


/*-----------------------------------------------------------
 * ISR entry and exit macros.  These are only required if a task switch
 * is required from the ISR.
 *----------------------------------------------------------*/


#define portENTER_SWITCHING_ISR()                                       \
    /* Save the context of the interrupted task. */                     \
    portSAVE_CONTEXT();                                                 \
                                                                        \
    /* We don't know the stack requirements for the ISR, so the frame */\
    /* pointer will be set to the top of the task stack, and the stack*/\
    /* pointer left where it is.  The IRQ stack will get used for any */\
    /* functions calls made by this ISR. */                             \
    asm volatile ( "SUB     R11, LR, #4" );                             \
    do {

#define portEXIT_SWITCHING_ISR( SwitchRequired )                        \
        /* If a switch is required then we just need to call */         \
        /* vTaskSwitchContext() as the context has already been */      \
        /* saved. */                                                    \
        if( SwitchRequired )                                            \
        {                                                               \
            vTaskSwitchContext();                                       \
        }                                                               \
    } while( 0 );                                                       \
    /* Restore the context of which ever task is now the highest */     \
    /* priority that is ready to run. */                                \
    portRESTORE_CONTEXT();

#define portYIELD()                 asm volatile ( "SWI" );

/* ----------------------- Prototypes ---------------------------------------*/

#define portDISABLE_INTERRUPTS( ) vPortDisableInterrupts()
#define portENABLE_INTERRUPTS( ) vPortEnableInterrupts()

extern void     vPortDisableInterrupts( void ) __attribute__ ( ( naked ) );
extern void     vPortEnableInterrupts( void ) __attribute__ ( ( naked ) );
extern void     vPortEnterCritical( void );
extern void     vPortExitCritical( void );

#define portENTER_CRITICAL()    vPortEnterCritical();
#define portEXIT_CRITICAL()     vPortExitCritical();

#define portTASK_FUNCTION_PROTO( vFunction, pvParameters ) \
    void vFunction( void *pvParameters )
#define portTASK_FUNCTION( vFunction, pvParameters ) \
    void vFunction( void *pvParameters )

#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久99国产精品麻豆| 日本视频一区二区三区| 久久综合九色欧美综合狠狠| 欧美第一区第二区| 亚洲欧美aⅴ...| 亚洲影视资源网| 亚洲电影一级黄| 欧美日韩三级视频| 国产在线精品免费| 国内精品免费**视频| 日本午夜精品视频在线观看| 91视频精品在这里| 国产精品1区2区| 99re这里只有精品视频首页| 91国产丝袜在线播放| 欧美一级在线免费| 精品国产一二三区| 亚洲最新在线观看| 久久精品国产亚洲高清剧情介绍| 国产成人综合在线观看| 91精品1区2区| 精品国产第一区二区三区观看体验 | 国产日产欧美一区二区三区| 国产精品久久久久久久久晋中 | 成人午夜视频在线观看| 91久久香蕉国产日韩欧美9色| 亚洲精品在线观看网站| 亚洲成人精品在线观看| 成人免费观看av| 精品欧美乱码久久久久久1区2区| 国产精品福利一区| 国产91综合网| 久久亚洲精华国产精华液| 日韩av电影一区| 欧美军同video69gay| 亚洲激情六月丁香| 91视频在线观看免费| 国产精品久久久久久福利一牛影视 | 久久99国产精品麻豆| 91麻豆精品国产91久久久久久久久 | 国产精品一二三区在线| 精品精品国产高清一毛片一天堂| 免费高清在线一区| 日韩美女在线视频| 久久成人av少妇免费| 717成人午夜免费福利电影| 亚洲在线视频一区| 欧美一级一区二区| 久久精品国产色蜜蜜麻豆| 精品国产乱子伦一区| 国产1区2区3区精品美女| 中文字幕不卡在线观看| 91免费在线播放| 亚洲国产精品一区二区www| 欧美色偷偷大香| 激情成人综合网| 亚洲欧洲精品天堂一级| 欧美视频你懂的| 麻豆传媒一区二区三区| 中文欧美字幕免费| 欧美精品九九99久久| 九九精品视频在线看| 一区二区中文字幕在线| 91精品一区二区三区在线观看| 激情欧美一区二区| 亚洲午夜免费福利视频| 2024国产精品| 7777精品伊人久久久大香线蕉最新版| 精品一区二区日韩| 亚洲成人7777| 亚洲精品自拍动漫在线| 国产精品国产a| 欧美一区二区三区爱爱| 蜜臂av日日欢夜夜爽一区| 91精品国产综合久久香蕉麻豆| 国产精品日日摸夜夜摸av| 91在线精品一区二区| 亚洲欧洲日韩在线| 欧美一区二区成人| 从欧美一区二区三区| 亚洲人成精品久久久久久| 欧美一区二区久久久| 欧美在线一二三| 91美女在线视频| 91丨porny丨中文| 成人免费视频一区| 国产成人精品影院| 国产美女av一区二区三区| 激情综合五月天| 国产麻豆欧美日韩一区| 国产一区二区在线观看视频| 精品一区二区三区影院在线午夜 | 日韩激情av在线| 狂野欧美性猛交blacked| 久久精工是国产品牌吗| 国产乱码精品一区二区三区忘忧草| 强制捆绑调教一区二区| 婷婷久久综合九色综合伊人色| 亚洲成人在线免费| 激情综合网天天干| 成人在线一区二区三区| 99久久久精品免费观看国产蜜| 色偷偷88欧美精品久久久| 欧美三级在线播放| 精品久久久久久久久久久久久久久 | 久久综合色之久久综合| 亚洲欧洲色图综合| 久久国产人妖系列| 91在线高清观看| 欧美大片在线观看| 一区二区视频在线| 久久99精品国产麻豆婷婷| 99久久久精品| 久久久久久麻豆| 午夜精品一区二区三区三上悠亚| 国产一区二区三区不卡在线观看| 91在线视频官网| 国产午夜亚洲精品理论片色戒| 一区二区在线免费| 99久精品国产| 国产欧美一区二区精品仙草咪 | 欧美日韩免费观看一区三区| 国产精品国产三级国产有无不卡 | 91精品婷婷国产综合久久竹菊| 欧美精品乱码久久久久久按摩 | 18成人在线视频| 丁香五精品蜜臀久久久久99网站| 视频一区免费在线观看| 性做久久久久久免费观看欧美| 亚洲精品福利视频网站| 午夜视频在线观看一区二区 | 丁香婷婷深情五月亚洲| 国产成人精品免费网站| 色婷婷综合激情| 日韩精品最新网址| 亚洲欧美激情小说另类| 经典三级视频一区| 91色porny蝌蚪| 久久综合精品国产一区二区三区| 久久精品夜色噜噜亚洲a∨| 亚洲综合成人网| 国产尤物一区二区在线| 欧美做爰猛烈大尺度电影无法无天| 欧美三区在线视频| 国产精品久久久久久久岛一牛影视 | av成人老司机| 精品999久久久| 日日摸夜夜添夜夜添精品视频 | 国产宾馆实践打屁股91| 欧美一区二区三区四区视频| 亚洲愉拍自拍另类高清精品| 国产91精品一区二区| 国产欧美日韩一区二区三区在线观看| 天堂精品中文字幕在线| 欧美日韩日日摸| 视频在线观看91| 欧美一级久久久久久久大片| 午夜私人影院久久久久| 精品视频1区2区| 亚洲国产sm捆绑调教视频| 欧美视频三区在线播放| 日日摸夜夜添夜夜添国产精品| 欧美日韩在线播放三区四区| 性做久久久久久| 日韩一二三区视频| 免费成人在线观看| 欧美一区二区视频在线观看| 亚洲一级在线观看| 色94色欧美sute亚洲线路一久| 亚洲国产aⅴ成人精品无吗| 91麻豆精品国产91久久久使用方法| 亚洲国产欧美另类丝袜| 欧美成人一级视频| 91论坛在线播放| 日本欧美在线看| 亚洲日本中文字幕区| 日韩欧美成人激情| 精品一区二区av| 午夜精品福利久久久| 久久女同互慰一区二区三区| 在线视频一区二区三区| 国产乱码精品一品二品| 亚洲午夜久久久久久久久久久| 国产网站一区二区三区| 欧美日韩性生活| 91麻豆精东视频| 丰满岳乱妇一区二区三区| 免费精品视频最新在线| 亚洲男人的天堂在线aⅴ视频| 久久综合九色综合97婷婷女人| 在线观看日韩国产| 色婷婷激情综合| 97久久久精品综合88久久| 国产成人精品www牛牛影视| 婷婷中文字幕综合| 亚洲成人av免费| 夜夜嗨av一区二区三区四季av| 国产精品国产三级国产普通话99| 26uuu国产日韩综合| 国产午夜精品福利|