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

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

?? portmacro.h

?? 最新版FreeRTOS, 包擴多種開發平臺的移植
?? H
字號:
/*
	FreeRTOS.org V4.1.1 - Copyright (C) 2003-2006 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 as published by
	the Free Software Foundation; either version 2 of the License, or
	(at your option) any later version.

	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 can be applied should you wish 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 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.
	***************************************************************************
*/

/*
	Changes from V3.2.3
	
	+ Modified portENTER_SWITCHING_ISR() to allow use with GCC V4.0.1.

	Changes from V3.2.4

	+ Removed the use of the %0 parameter within the assembler macros and 
	  replaced them with hard coded registers.  This will ensure the
	  assembler does not select the link register as the temp register as
	  was occasionally happening previously.

	+ The assembler statements are now included in a single asm block rather
	  than each line having its own asm block.
*/

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

/* Architecture specifics. */
#define portSTACK_GROWTH			( -1 )
#define portTICK_RATE_MS			( ( portTickType ) 1000 / configTICK_RATE_HZ )		
#define portBYTE_ALIGNMENT			4
#define portNOP()					asm volatile ( "NOP" );
/*-----------------------------------------------------------*/	


/* Scheduler 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, =pxCurrentTCB								\n\t"	\
	"LDR		R0, [R0]										\n\t"	\
	"LDR		LR, [R0]										\n\t"	\
																		\
	/* The critical nesting depth is the first item on the stack. */	\
	/* Load it into the ulCriticalNesting variable. */					\
	"LDR		R0, =ulCriticalNesting							\n\t"	\
	"LDMFD	LR!, {R1}											\n\t"	\
	"STR		R1, [R0]										\n\t"	\
																		\
	/* Get the SPSR from the stack. */									\
	"LDMFD	LR!, {R0}											\n\t"	\
	"MSR		SPSR, R0										\n\t"	\
																		\
	/* Restore all system mode registers for the task. */				\
	"LDMFD	LR, {R0-R14}^										\n\t"	\
	"NOP														\n\t"	\
																		\
	/* Restore the return address. */									\
	"LDR		LR, [LR, #+60]									\n\t"	\
																		\
	/* And return - correcting the offset in the LR to obtain the */	\
	/* correct address. */												\
	"SUBS	PC, LR, #4											\n\t"	\
	);																	\
	( void ) ulCriticalNesting;											\
	( void ) pxCurrentTCB;												\
}
/*-----------------------------------------------------------*/

#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}											\n\t"	\
																		\
	/* Set R0 to point to the task stack pointer. */					\
	"STMDB	SP,{SP}^											\n\t"	\
	"NOP														\n\t"	\
	"SUB	SP, SP, #4											\n\t"	\
	"LDMIA	SP!,{R0}											\n\t"	\
																		\
	/* Push the return address onto the stack. */						\
	"STMDB	R0!, {LR}											\n\t"	\
																		\
	/* Now we have saved LR we can use it instead of R0. */				\
	"MOV	LR, R0												\n\t"	\
																		\
	/* Pop R0 so we can save it onto the system mode stack. */			\
	"LDMIA	SP!, {R0}											\n\t"	\
																		\
	/* Push all the system mode registers onto the task stack. */		\
	"STMDB	LR,{R0-LR}^											\n\t"	\
	"NOP														\n\t"	\
	"SUB	LR, LR, #60											\n\t"	\
																		\
	/* Push the SPSR onto the task stack. */							\
	"MRS	R0, SPSR											\n\t"	\
	"STMDB	LR!, {R0}											\n\t"	\
																		\
	"LDR	R0, =ulCriticalNesting								\n\t"	\
	"LDR	R0, [R0]											\n\t"	\
	"STMDB	LR!, {R0}											\n\t"	\
																		\
	/* Store the new top of stack for the task. */						\
	"LDR	R0, =pxCurrentTCB									\n\t"	\
	"LDR	R0, [R0]											\n\t"	\
	"STR	LR, [R0]											\n\t"	\
	);																	\
	( void ) ulCriticalNesting;											\
	( void ) pxCurrentTCB;												\
}


/*-----------------------------------------------------------
 * 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" );							\
	{

#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();

#define portYIELD()					asm volatile ( "SWI" );	
/*-----------------------------------------------------------*/


/* Critical section management. */

/*
 * 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}		\n\t"	/* Push R0.						*/	\
			"MRS	R0, CPSR		\n\t"	/* Get CPSR.					*/	\
			"ORR	R0, R0, #0xC0	\n\t"	/* Disable IRQ, FIQ.			*/	\
			"MSR	CPSR, R0		\n\t"	/* Write back modified value.	*/	\
			"LDMIA	SP!, {R0}			" )	/* Pop R0.						*/
			
	#define portENABLE_INTERRUPTS()												\
		asm volatile (															\
			"STMDB	SP!, {R0}		\n\t"	/* Push R0.						*/	\
			"MRS	R0, CPSR		\n\t"	/* Get CPSR.					*/	\
			"BIC	R0, R0, #0xC0	\n\t"	/* Enable IRQ, FIQ.				*/	\
			"MSR	CPSR, R0		\n\t"	/* Write back modified value.	*/	\
			"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 */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美成人激情| 成人小视频在线观看| 亚洲九九爱视频| 中文字幕一区三区| 中文字幕乱码一区二区免费| 26uuuu精品一区二区| 欧美成人精品福利| 欧美日韩久久不卡| 欧美丰满一区二区免费视频| 在线观看亚洲专区| 色菇凉天天综合网| 欧美日韩不卡一区| 日韩三区在线观看| 久久青草国产手机看片福利盒子| 亚洲精品在线网站| 欧美经典三级视频一区二区三区| 国产精品激情偷乱一区二区∴| 国产精品国产三级国产a | 天天色综合天天| 麻豆专区一区二区三区四区五区| 免费观看日韩电影| 国产91精品免费| 色噜噜久久综合| 欧美一区二区三区在线看| 日韩精品一区二区三区蜜臀| 欧美国产精品中文字幕| 亚洲视频一二三| 蜜桃一区二区三区在线| 成人精品视频一区二区三区尤物| 99久久久无码国产精品| 欧美性猛交xxxx乱大交退制版| 91精品国产色综合久久不卡蜜臀| 精品日韩av一区二区| 国产精品高清亚洲| 奇米精品一区二区三区在线观看 | 色婷婷亚洲综合| 欧美变态凌虐bdsm| 亚洲麻豆国产自偷在线| 捆绑紧缚一区二区三区视频| 成人av电影在线| 日韩三级高清在线| 亚洲激情自拍偷拍| 国产成a人无v码亚洲福利| 91福利视频网站| 精品久久久久久久久久久院品网| 亚洲免费视频成人| 国产一区二区剧情av在线| 欧美综合色免费| 欧美国产欧美亚州国产日韩mv天天看完整| 亚洲国产日韩av| 99精品国产视频| 精品国产凹凸成av人导航| 亚洲欧美偷拍卡通变态| 亚洲美女屁股眼交| 极品美女销魂一区二区三区免费| 91在线观看污| 日韩亚洲欧美中文三级| 国产精品激情偷乱一区二区∴| 午夜一区二区三区在线观看| 国内精品久久久久影院薰衣草| 91在线观看成人| 欧美电视剧免费全集观看| 午夜免费久久看| 99久久国产综合精品色伊| 欧美videos中文字幕| 亚洲一区二区三区视频在线 | 色综合天天综合网国产成人综合天 | 久久精品网站免费观看| 亚洲午夜精品一区二区三区他趣| 韩国女主播一区| 欧美电影一区二区| 国产精品蜜臀av| 极品销魂美女一区二区三区| 色哦色哦哦色天天综合| 欧美国产精品久久| 久久99久久99精品免视看婷婷 | 26uuu色噜噜精品一区| 亚洲影院理伦片| 色哟哟一区二区| 欧美一级生活片| 午夜欧美电影在线观看| 成年人网站91| 欧美激情一区二区三区四区| 久久精品国产色蜜蜜麻豆| 欧美色图12p| 国产精品福利电影一区二区三区四区 | 5858s免费视频成人| 一区二区三区不卡视频| 高清成人在线观看| 国产日韩精品一区二区三区| 国产自产视频一区二区三区| 欧美成人在线直播| 久久激情五月婷婷| 26uuu国产一区二区三区| 精品亚洲成a人| 久久免费精品国产久精品久久久久| 人人狠狠综合久久亚洲| 欧美亚洲日本一区| 日本网站在线观看一区二区三区| 欧美日韩视频在线观看一区二区三区| 亚洲二区在线观看| 欧美日本在线看| 麻豆91免费看| 久久伊人中文字幕| 国产成人精品一区二区三区网站观看| 日本一区二区三区dvd视频在线| 国产在线视视频有精品| 欧美国产成人在线| 成人av电影在线播放| 日韩精品五月天| 欧美电影精品一区二区| 高清国产午夜精品久久久久久| 亚洲欧洲精品一区二区三区| 欧美性大战久久久久久久| 爽好久久久欧美精品| 精品欧美一区二区在线观看| 国产成人综合网站| 亚洲一区视频在线观看视频| 在线一区二区三区四区五区 | 国产在线国偷精品产拍免费yy| 久久精品视频一区二区三区| 不卡的电影网站| 亚洲一区二区美女| 日韩亚洲欧美中文三级| 国产成人在线视频播放| 亚洲欧美日韩一区二区三区在线观看| 欧美色涩在线第一页| 国产精品18久久久久久vr| 亚洲免费观看高清在线观看| 欧美一区二区三区免费视频| 国产 欧美在线| 日本三级亚洲精品| 欧美国产一区二区| 日韩一区二区三区精品视频| 激情综合色播五月| 亚洲不卡av一区二区三区| 国产欧美综合色| 欧美日韩大陆在线| 91丝袜美腿高跟国产极品老师 | 日欧美一区二区| 中日韩免费视频中文字幕| 91精品一区二区三区在线观看| 丁香五精品蜜臀久久久久99网站| 午夜av电影一区| ●精品国产综合乱码久久久久| 日韩欧美的一区二区| 91久久精品一区二区二区| 国产一区二区三区免费观看| 国产精品色在线观看| 精品黑人一区二区三区久久| 欧美午夜精品一区二区蜜桃| 97久久精品人人做人人爽| 蜜臀av一区二区在线免费观看 | 色偷偷88欧美精品久久久| 国产一区二区三区免费看| 人人狠狠综合久久亚洲| 亚洲国产成人高清精品| 综合精品久久久| 成人免费在线视频观看| 国产亚洲一区二区三区在线观看 | 欧美日韩精品一区视频| 91一区二区三区在线播放| av一本久道久久综合久久鬼色| 激情文学综合网| 国产麻豆成人精品| 精品午夜一区二区三区在线观看 | 在线观看一区不卡| 一本到三区不卡视频| 99精品视频在线免费观看| 成人精品电影在线观看| 粉嫩在线一区二区三区视频| 国产91在线观看丝袜| 福利一区福利二区| 99久久国产综合精品色伊| 91污片在线观看| 成人动漫中文字幕| 91麻豆精品视频| 欧美专区在线观看一区| 欧美色图免费看| 欧美丰满美乳xxx高潮www| 这里只有精品电影| 日韩三级高清在线| 久久新电视剧免费观看| 久久久久久久久久久电影| 国产精品久久一级| 亚洲九九爱视频| 天天免费综合色| 国内精品在线播放| 成人免费视频视频| 欧美亚洲日本一区| 2017欧美狠狠色| 国产精品久久久久久久久免费桃花| 亚洲午夜激情网站| 韩国一区二区在线观看| av爱爱亚洲一区| 91精品蜜臀在线一区尤物| 精品卡一卡二卡三卡四在线| 国产精品久久久久影院色老大 | 一区二区三区欧美激情| 日日摸夜夜添夜夜添精品视频 |