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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? portisr.c

?? Modbus協(xié)議的源代碼 Modbus協(xié)議的源代碼、 Modbus協(xié)議的源代碼 Modbus協(xié)議的源代碼
?? C
字號(hào):
/*
    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.
    ***************************************************************************
*/

/* ----------------------- FreeRTOS includes --------------------------------*/
#include "FreeRTOS.h"
#include "task.h"

/* ----------------------- System includes ----------------------------------*/
#include "eic.h"
#include "wdg.h"

/* ----------------------- Defines ------------------------------------------*/
#define portNO_CRITICAL_NESTING     \
  ( ( unsigned portLONG ) 0 )

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

/* ISR to handle manual context switches (from a call to taskYIELD()). */
void            vPortYieldProcessor( void ) __attribute__ ( ( interrupt( "SWI" ), naked ) );

/* The scheduler can only be started from ARM mode, hence the inclusion of this
 * function here.
 */
void            vPortISRStartFirstTask( void );

/* ----------------------- Global variables ---------------------------------*/
extern const portSHORT portTimerOCRDeltaValue;
volatile unsigned portLONG ulCriticalNesting = 9999UL;

/* ----------------------- Start implementation -----------------------------*/

void
vPortISRStartFirstTask( void )
{
    /* Simply start the scheduler.  This is included here as it can only be
     * called from ARM mode. 
     */
    portRESTORE_CONTEXT(  );
}

/*
 * Called by portYIELD() or taskYIELD() to manually force a context switch.
 *
 * When a context switch is performed from the task level the saved task 
 * context is made to look as if it occurred from within the tick ISR.  This
 * way the same restore context function can be used when restoring the context
 * saved from the ISR or that saved from a call to vPortYieldProcessor.
 */
void
vPortYieldProcessor( void )
{
    /* Within an IRQ ISR the link register has an offset from the true return 
       address, but an SWI ISR does not.  Add the offset manually so the same 
       ISR return code can be used in both cases. */
    asm volatile    ( "ADD     LR, LR, #4" );

    /* Perform the context switch.  First save the context of the current task. */
    portSAVE_CONTEXT(  );

    /* Find the highest priority task that is ready to run. */
    vTaskSwitchContext(  );

    /* Restore the context of the new task. */
    portRESTORE_CONTEXT(  );
}

/* 
 * The ISR used for the scheduler tick depends on whether the cooperative or
 * the preemptive scheduler is being used.
 */
#if configUSE_PREEMPTION == 0

/* The cooperative scheduler requires a normal IRQ service routine to 
 * simply increment the system tick.
 */
void            vPortNonPreemptiveTick( void ) __attribute__ ( ( interrupt( "IRQ" ) ) );
void
vPortNonPreemptiveTick( void )
{
    vTaskIncrementTick(  );

    /* Clear the interrupt in the watchdog and EIC. */
    WDG->SR = 0x0000;
    /* clear current interrupt pending flag for interupt source. */
    EIC->IPR |= 1 << EIC_CurrentIRQChannelValue(  );
}

#else

/* The preemptive scheduler is defined as "naked" as the full context is
 * saved on entry as part of the context switch.
 */
void            vPortPreemptiveTick( void ) __attribute__ ( ( naked ) );
void
vPortPreemptiveTick( void )
{
    /* Save the context of the interrupted task. */
    portSAVE_CONTEXT(  );

    /* Increment the RTOS tick count, then look for the highest priority 
     * task that is ready to run. 
     */
    vTaskIncrementTick(  );
    vTaskSwitchContext(  );

    /* Clear the interrupt in the watchdog and EIC. */
    WDG->SR = 0x0000;
    /* clear current interrupt pending flag for interupt source. */
    EIC->IPR |= 1 << EIC_CurrentIRQChannelValue(  );

    /* Restore the context of the new task. */
    portRESTORE_CONTEXT(  );
}

#endif


void
vPortDisableInterrupts( void )
{
    asm volatile    ( "STMDB   SP!, {R0}" );    /* Push R0. */
    asm volatile    ( "MRS     R0, CPSR" );     /* Get CPSR.  */
    asm volatile    ( "ORR     R0, R0, #0xC0" );        /* Disable IRQ, FIQ. */
    asm volatile    ( "MSR     CPSR, R0" );     /* Write back modified value. */
    asm volatile    ( "LDMIA   SP!, {R0}" );    /* Pop R0. */
    asm volatile    ( "BX      R14" );          /* Return back to thumb. */
}

void
vPortEnableInterrupts( void )
{
    asm volatile    ( "STMDB   SP!, {R0}" );    /* Push R0. */
    asm volatile    ( "MRS     R0, CPSR" );     /* Get CPSR. */
    asm volatile    ( "BIC     R0, R0, #0xC0" );        /* Enable IRQ, FIQ. */
    asm volatile    ( "MSR     CPSR, R0" );     /* Write back modified value. */
    asm volatile    ( "LDMIA   SP!, {R0}" );    /* Pop R0. */
    asm volatile    ( "BX      R14" );          /* Return back to thumb. */
}

/* The code generated by the GCC compiler uses the stack in different ways at
 * different optimisation levels.  The interrupt flags can therefore not always
 * be saved to the stack.  Instead the critical section nesting level is stored
 * in a variable, which is then saved as part of the stack context. 
 */
void
vPortEnterCritical( void )
{
    /* Disable interrupts as per portDISABLE_INTERRUPTS();                              */
    asm volatile    ( "STMDB   SP!, {R0}" );    /* Push R0. */
    asm volatile    ( "MRS     R0, CPSR" );     /* Get CPSR. */
    asm volatile    ( "ORR     R0, R0, #0xC0" );        /* Disable IRQ, FIQ. */
    asm volatile    ( "MSR     CPSR, R0" );     /* Write back modified value. */
    asm volatile    ( "LDMIA   SP!, {R0}" );    /* Pop R0. */

    /* Now interrupts are disabled ulCriticalNesting can be accessed 
     * directly.  Increment ulCriticalNesting to keep a count of how many times
     * portENTER_CRITICAL() has been called. 
     */
    ulCriticalNesting++;
}

void
vPortExitCritical( void )
{
    if( ulCriticalNesting > portNO_CRITICAL_NESTING )
    {
        /* Decrement the nesting count as we are leaving a critical section. */
        ulCriticalNesting--;

        /* If the nesting level has reached zero then interrupts should be
         * re-enabled. 
         */
        if( ulCriticalNesting == portNO_CRITICAL_NESTING )
        {
            /* Enable interrupts as per portEXIT_CRITICAL(). */
            asm volatile    ( "STMDB   SP!, {R0}" );    /* Push R0. */
            asm volatile    ( "MRS     R0, CPSR" );     /* Get CPSR. */
            asm volatile    ( "BIC     R0, R0, #0xC0" );        /* Enable IRQ, FIQ. */
            asm volatile    ( "MSR     CPSR, R0" );     /* Write back modified value. */
            asm volatile    ( "LDMIA   SP!, {R0}" );    /* Pop R0. */
        }
    }
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品免费观看| 99久久综合精品| 欧美一区二区三区日韩视频| 亚洲伦理在线精品| 欧美日韩久久一区二区| 亚洲国产综合91精品麻豆| 欧美三级中文字| 免费成人在线观看视频| 精品国产乱码久久久久久闺蜜| 国内精品国产三级国产a久久| 国产亚洲精品aa| 91在线porny国产在线看| 亚洲精品菠萝久久久久久久| 欧美日韩夫妻久久| 精品一区二区三区视频在线观看| 久久亚洲二区三区| 91麻豆123| 麻豆精品蜜桃视频网站| 久久精品欧美一区二区三区不卡| 97久久精品人人做人人爽| 亚洲中国最大av网站| 91精品国产一区二区三区香蕉| 精品一区二区三区免费观看| 国产精品国产三级国产普通话蜜臀| 欧洲视频一区二区| 美女高潮久久久| 亚洲欧洲精品天堂一级| 欧美精品丝袜久久久中文字幕| 久久综合综合久久综合| 中文字幕国产一区| 欧美日韩精品一区二区| 国产精品538一区二区在线| 亚洲日本欧美天堂| 日韩一区二区不卡| 色婷婷综合激情| 久久成人免费网| 亚洲午夜三级在线| 国产婷婷色一区二区三区在线| 91欧美一区二区| 国产精品白丝jk黑袜喷水| 亚洲一线二线三线视频| 久久久久久久久久看片| 欧美视频一区二区三区| 成人丝袜视频网| 久久99久久精品| 香蕉成人啪国产精品视频综合网 | 欧美激情资源网| 欧美人与性动xxxx| 91色|porny| 国产成人午夜精品影院观看视频| 亚洲国产成人av网| 成人欧美一区二区三区1314| 精品国产乱码久久久久久蜜臀| 欧美图区在线视频| 色综合一区二区| 成人妖精视频yjsp地址| 国内精品写真在线观看| 免费观看日韩电影| 亚洲影视资源网| 亚洲人午夜精品天堂一二香蕉| 久久精品人人做| 精品国产免费人成电影在线观看四季| 欧美日韩国产在线观看| 91福利国产成人精品照片| 9色porny自拍视频一区二区| 国产精品夜夜爽| 国产在线播放一区二区三区| 蜜桃久久久久久久| 日韩在线a电影| 午夜精品aaa| 婷婷综合五月天| 无码av免费一区二区三区试看| 一区二区三区视频在线看| 中文字幕一区二区三区在线播放 | 国产日韩欧美不卡| 精品日产卡一卡二卡麻豆| 日韩欧美在线观看一区二区三区| 欧美写真视频网站| 欧美午夜片在线看| 欧美亚洲国产怡红院影院| 91黄视频在线| 欧美探花视频资源| 欧美亚洲高清一区| 欧美日韩国产片| 欧美一区中文字幕| 日韩欧美一区二区不卡| 欧美变态凌虐bdsm| 国产女主播一区| 中文字幕一区二区三| 亚洲色图在线看| 洋洋av久久久久久久一区| 亚洲午夜激情网页| 天堂av在线一区| 蜜臀av性久久久久av蜜臀妖精| 免费人成网站在线观看欧美高清| 日本va欧美va精品| 国内精品自线一区二区三区视频| 国产一区不卡视频| 99久久国产综合精品麻豆| 91老师片黄在线观看| 欧美日韩午夜在线| 日韩精品中文字幕在线一区| xnxx国产精品| 国产精品的网站| 午夜伊人狠狠久久| 久久99国产精品免费| 国产成人av电影在线播放| 一本在线高清不卡dvd| 欧美一区二区三区在线观看视频| 精品国产1区二区| 国产精品久久久久7777按摩| 亚洲精选视频在线| 蜜桃视频在线观看一区二区| 国产美女视频91| 色婷婷香蕉在线一区二区| 欧美一区日韩一区| 国产日产精品一区| 亚洲国产cao| 国产麻豆9l精品三级站| 在线精品视频一区二区| 欧美不卡一区二区三区| 亚洲少妇屁股交4| 久久av中文字幕片| 北岛玲一区二区三区四区| 欧美日本视频在线| 国产精品视频一二三区| 亚洲国产日韩精品| 福利一区在线观看| 91精品视频网| 亚洲精品国久久99热| 国产永久精品大片wwwapp| 在线观看亚洲一区| 久久久久久久一区| 日韩精品电影在线| 成人黄色电影在线| 精品欧美一区二区久久| 亚洲五码中文字幕| 国产不卡视频在线观看| 91精品国产欧美一区二区| 亚洲精品成人a在线观看| 国产精品一区久久久久| 91精品麻豆日日躁夜夜躁| 日韩美女视频19| 国产成人在线电影| 欧美电影免费观看高清完整版在线观看 | 蜜桃av噜噜一区| 欧美性淫爽ww久久久久无| 国产清纯在线一区二区www| 日韩黄色一级片| 欧美影院一区二区| 国产精品免费av| 精品一区二区三区视频在线观看| 欧美日韩视频在线第一区| 亚洲欧美综合色| 粉嫩aⅴ一区二区三区四区五区| 日韩视频免费直播| 日韩av成人高清| 欧美日韩大陆一区二区| 一区二区三区不卡视频在线观看| 福利电影一区二区| 国产欧美日韩精品一区| 精品在线视频一区| 欧美tickle裸体挠脚心vk| 奇米精品一区二区三区四区| 欧美日韩一级视频| 五月天激情综合网| 欧美久久久一区| 婷婷丁香激情综合| 在线播放一区二区三区| 亚洲大片一区二区三区| 欧美日韩久久一区| 日韩高清不卡一区| 欧美日韩国产成人在线免费| 亚洲一区二区综合| 欧美日韩在线不卡| 天天操天天色综合| 欧美一区二区福利在线| 久久精品免费观看| 26uuu精品一区二区| 国产精品一卡二| 中文字幕第一区二区| 波波电影院一区二区三区| 亚洲欧美日韩国产另类专区| 91色九色蝌蚪| 午夜精品一区二区三区电影天堂| 欧美丰满少妇xxxbbb| 蜜桃在线一区二区三区| 精品国产凹凸成av人导航| 国产精品综合二区| 亚洲私人影院在线观看| 精品视频在线看| 久久福利视频一区二区| 国产人妖乱国产精品人妖| av电影在线观看一区| 亚洲午夜电影网| 久久综合色鬼综合色| a级精品国产片在线观看| 亚洲国产精品久久艾草纯爱| 欧美一卡二卡在线观看| 国产激情视频一区二区三区欧美 |