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

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

?? portmacro.h

?? FreeRTOSV3.2.0 經(jīng)典嵌入式操作系統(tǒng)
?? H
字號:
/*
	FreeRTOS V3.2.0 - Copyright (C) 2003 - 2005 Richard Barry.

	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

/*-----------------------------------------------------------
 * Port specific definitions.  
 *
 * The settings in this file configure FreeRTOS correctly for the
 * given hardware and compiler.
 *
 * These settings should not be altered.
 *-----------------------------------------------------------
 */

/* Type definitions. */
#define portCHAR		char
#define portFLOAT		float
#define portDOUBLE		double
#define portLONG		long
#define portSHORT		short
#define portSTACK_TYPE	unsigned portLONG
#define portBASE_TYPE	long

#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
/*-----------------------------------------------------------*/	

/* Hardware specifics. */
#define portSTACK_GROWTH			( -1 )
#define portTICK_RATE_MS			( ( portTickType ) 1000 / configTICK_RATE_HZ )		
#define portBYTE_ALIGNMENT			4
#define portYIELD()					asm volatile ( "SWI" );	

/*
 * These define the timer to use for generating the tick interrupt.
 * They are put in this file so they can be shared between "port.c"
 * and "portisr.c".
 */
#define portTIMER_REG_BASE_PTR		AT91C_BASE_TC0
#define portTIMER_CLK_ENABLE_BIT	AT91C_PS_TC0
#define portTIMER_AIC_CHANNEL		( ( unsigned portLONG ) 4 )
/*-----------------------------------------------------------*/	

/* Task utilities. */

/*
 * 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()											\
{																		\
extern volatile void * volatile pxCurrentTCB;							\
extern volatile unsigned portLONG ulCriticalNesting;					\
																		\
	/* 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" );								\
	( void ) ulCriticalNesting;											\
}
/*-----------------------------------------------------------*/

#define portSAVE_CONTEXT()												\
{																		\
extern volatile void * volatile pxCurrentTCB;							\
extern volatile unsigned portLONG ulCriticalNesting;					\
																		\
	/* 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]" );								\
	( void ) ulCriticalNesting;											\
}

/*-----------------------------------------------------------
 * 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 ( "MOV		R11, LR" );									\
	{

#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();										\
		}																\
	}																	\
	/* Restore the context of which ever task is now the highest */		\
	/* priority that is ready to run. */								\
	portRESTORE_CONTEXT();
/*-----------------------------------------------------------*/	

/* Critical section handling. */

/*
 * The interrupt management utilities can only be called from ARM mode.  When
 * THUMB_INTERWORK is defined the utilities are defined as functions in 
 * portISR.c to ensure a switch to ARM mode.  When THUMB_INTERWORK is not 
 * defined then the utilities are defined as macros here - as per other ports.
 */

#ifdef THUMB_INTERWORK

	extern void vPortDisableInterruptsFromThumb( void ) __attribute__ ((naked));
	extern void vPortEnableInterruptsFromThumb( void ) __attribute__ ((naked));

	#define portDISABLE_INTERRUPTS()	vPortDisableInterruptsFromThumb()
	#define portENABLE_INTERRUPTS()		vPortEnableInterruptsFromThumb()
	
#else

	#define 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.									*/
			
	#define portENABLE_INTERRUPTS()																	\
		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. */

#endif /* THUMB_INTERWORK */

extern void vPortEnterCritical( void );
extern void vPortExitCritical( void );

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

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

/* Task function macros as described on the FreeRTOS.org WEB site. */
#define portTASK_FUNCTION_PROTO( vFunction, pvParameters ) void vFunction( void *pvParameters )
#define portTASK_FUNCTION( vFunction, pvParameters ) void vFunction( void *pvParameters )

#endif /* PORTMACRO_H */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品国产三级国产aⅴ原创 | 欧美三级三级三级爽爽爽| 欧美日韩第一区日日骚| 国产亚洲一区二区三区四区| 亚洲国产精品尤物yw在线观看| 激情成人综合网| 欧美视频中文字幕| 综合电影一区二区三区| 国产专区综合网| 欧美一区午夜视频在线观看 | 精品99一区二区三区| 一区二区三区精密机械公司| 国产高清无密码一区二区三区| 在线不卡的av| 一卡二卡欧美日韩| 91首页免费视频| 国产日韩影视精品| 国产尤物一区二区| 日韩欧美一级在线播放| 亚洲国产va精品久久久不卡综合| 不卡一二三区首页| 国产午夜精品久久久久久免费视 | 国产精品三级av在线播放| 美国十次了思思久久精品导航| 欧美性大战久久久久久久蜜臀 | 成人亚洲精品久久久久软件| xvideos.蜜桃一区二区| 美女尤物国产一区| 日韩美女在线视频| 奇米影视一区二区三区小说| 欧美日韩在线三级| 午夜精品福利一区二区三区蜜桃| 欧美色国产精品| 亚洲一区av在线| 欧美三级在线看| 午夜精品久久久久| 日韩色在线观看| 久久99精品一区二区三区| 欧美成人r级一区二区三区| 蜜桃在线一区二区三区| 337p日本欧洲亚洲大胆精品| 国产精品乡下勾搭老头1| 国产日韩欧美综合在线| 99久久综合狠狠综合久久| 亚洲精品国产a| 欧美日韩视频第一区| 免费一级欧美片在线观看| 精品va天堂亚洲国产| 菠萝蜜视频在线观看一区| 亚洲男女一区二区三区| 欧美男同性恋视频网站| 蜜臀av性久久久久蜜臀aⅴ流畅 | 国产精品99久久久久| 欧美国产日韩亚洲一区| 色噜噜狠狠成人网p站| 日韩综合小视频| 久久影院电视剧免费观看| 波多野结衣精品在线| 亚洲国产中文字幕在线视频综合| 日韩午夜小视频| 国产99久久久久久免费看农村| 亚洲欧美一区二区三区国产精品| 欧美日韩免费高清一区色橹橹| 久久99精品国产麻豆不卡| 国产精品沙发午睡系列990531| 欧美色电影在线| 国产精品99久久久久久久女警| 亚洲精品国产精品乱码不99| 日韩午夜激情视频| 色婷婷精品久久二区二区蜜臀av| 蜜臀av一区二区在线免费观看| 中文字幕亚洲精品在线观看| 欧美一区二区视频免费观看| 91久久免费观看| 美女任你摸久久| 一区二区三区四区激情| 久久免费精品国产久精品久久久久| 一本到一区二区三区| 狠狠狠色丁香婷婷综合久久五月| 亚洲精选免费视频| 国产亚洲婷婷免费| 欧美一三区三区四区免费在线看 | 国产女人水真多18毛片18精品视频 | 久久综合九色综合欧美亚洲| 在线一区二区三区| 成人午夜电影网站| 麻豆高清免费国产一区| 亚洲一二三专区| 国产精品福利一区| 久久奇米777| 日韩欧美中文一区| 欧美日韩一区小说| 91毛片在线观看| 国产精品亚洲人在线观看| 久久草av在线| 水野朝阳av一区二区三区| 亚洲精品老司机| 国产精品大尺度| 久久久精品黄色| 久久网站热最新地址| 日韩一区二区在线看片| 欧美日韩一区高清| 在线看一区二区| 一本到高清视频免费精品| 99精品热视频| 91一区二区三区在线播放| caoporn国产一区二区| 成年人午夜久久久| 成人高清免费在线播放| 成人小视频在线| 成人av电影在线观看| 成人一区二区三区在线观看| 成人免费看片app下载| 风间由美中文字幕在线看视频国产欧美| 国内精品在线播放| 国产美女av一区二区三区| 国产精品一二三四五| 成人午夜免费视频| 91色婷婷久久久久合中文| 色综合天天综合网天天看片| 日本高清不卡视频| 欧美日韩在线一区二区| 7777精品久久久大香线蕉| 欧美一级日韩不卡播放免费| 欧美v亚洲v综合ⅴ国产v| 亚洲精品在线三区| 中文字幕精品综合| 亚洲欧洲av色图| 亚洲午夜激情网页| 免费观看久久久4p| 国产成人精品在线看| 91麻豆福利精品推荐| 欧美日韩国产中文| 日韩三级视频中文字幕| 亚洲人成伊人成综合网小说| 亚洲综合小说图片| 久久国产精品免费| 成a人片国产精品| 欧美日韩国产一二三| 精品国产电影一区二区| 中文字幕一区二区不卡| 亚洲国产一二三| 久草热8精品视频在线观看| 成人免费高清在线| 欧美日韩视频专区在线播放| 精品国产自在久精品国产| 亚洲三级在线看| 日本成人在线电影网| 国产精品一区二区在线看| 色香色香欲天天天影视综合网| 制服丝袜激情欧洲亚洲| 国产亚洲精久久久久久| 亚洲成人在线免费| 国产jizzjizz一区二区| 欧美日韩国产经典色站一区二区三区 | 亚洲一卡二卡三卡四卡无卡久久 | 亚洲精品欧美综合四区| 日本成人在线电影网| 成人h动漫精品| 日韩免费视频线观看| 亚洲天堂久久久久久久| 美女一区二区久久| 色婷婷精品久久二区二区蜜臀av | 国产精品一区三区| 欧美日韩在线播| 亚洲欧洲日韩在线| 国产露脸91国语对白| 欧美精品18+| 亚洲精品成人悠悠色影视| 国产精品一区二区久激情瑜伽| 欧美日韩国产天堂| 综合久久给合久久狠狠狠97色| 久久99精品久久久久久动态图 | 亚洲二区视频在线| 成人av网站在线| 国产亚洲精品免费| 狂野欧美性猛交blacked| 欧美三区在线观看| 亚洲色图欧美激情| 成人国产在线观看| 欧美激情在线一区二区| 成人小视频免费观看| 久久奇米777| 国产一区二区在线看| 日韩一级片在线观看| 视频一区视频二区在线观看| 在线观看不卡视频| 亚洲欧美日韩久久精品| 99国产麻豆精品| 国产精品超碰97尤物18| 国产suv精品一区二区三区| 久久免费看少妇高潮| 激情欧美一区二区三区在线观看| 69堂亚洲精品首页| 日韩精品欧美成人高清一区二区| 欧美日韩中文字幕一区| 亚洲国产乱码最新视频 | www..com久久爱| 综合亚洲深深色噜噜狠狠网站| 成人午夜短视频|