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

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

?? portmacro.h

?? Este é um rtos free para a familia arm7
?? H
字號:
/*
	FreeRTOS V4.0.0 - Copyright (C) 2003-2006 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.
	***************************************************************************
*/

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

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
美国欧美日韩国产在线播放| 亚洲国产精品二十页| 91网站最新地址| 福利91精品一区二区三区| 激情综合网天天干| 国产成人精品免费| 懂色av中文字幕一区二区三区| 国产曰批免费观看久久久| 黄色日韩三级电影| 国产91综合一区在线观看| 国产黄色成人av| 成人激情文学综合网| 色哟哟在线观看一区二区三区| 91麻豆国产香蕉久久精品| 91国模大尺度私拍在线视频| 欧美午夜片在线观看| 7799精品视频| 欧美xxx久久| 中文字幕一区av| 亚洲一区二区三区免费视频| 亚洲成人av一区二区| 蜜桃视频在线一区| 成人国产电影网| 欧美午夜精品免费| 精品国产伦一区二区三区观看体验| 欧美不卡一区二区三区| 国产欧美日韩另类视频免费观看 | 午夜成人在线视频| 欧美aaaaa成人免费观看视频| 精品午夜久久福利影院| av一本久道久久综合久久鬼色| 在线免费观看日本欧美| www亚洲一区| 亚洲乱码日产精品bd| 日本亚洲一区二区| 国产成人免费视频网站| 欧美色老头old∨ideo| 久久婷婷久久一区二区三区| 亚洲人123区| 九色综合狠狠综合久久| 日本乱码高清不卡字幕| 欧美精品一区二区三区在线| 一区二区三区精品在线| 国产成人丝袜美腿| 欧美一区二区三区播放老司机| 国产精品久久久久一区| 三级在线观看一区二区| av色综合久久天堂av综合| 日韩三级高清在线| 一二三区精品视频| 国产成人av在线影院| 欧美在线观看一区| 国产精品视频免费看| 乱中年女人伦av一区二区| 91浏览器入口在线观看| 久久久久久久久97黄色工厂| 天天av天天翘天天综合网色鬼国产| 成人丝袜视频网| 久久综合九色综合欧美亚洲| 三级亚洲高清视频| 欧美色图天堂网| 一区二区三区在线视频免费观看| 国产精华液一区二区三区| 欧美v亚洲v综合ⅴ国产v| 亚洲成a人片在线观看中文| 色呦呦一区二区三区| 国产精品久久久久影视| 国产91丝袜在线播放九色| 精品国产91乱码一区二区三区| 水蜜桃久久夜色精品一区的特点| 91久久免费观看| 一区二区三区日韩| 91久久久免费一区二区| 亚洲柠檬福利资源导航| 91原创在线视频| 最新久久zyz资源站| 91在线观看高清| 一区二区在线看| 欧美优质美女网站| 亚洲一区二区高清| 欧美视频一区二区三区在线观看| 一区二区三区在线视频观看| 色哟哟一区二区| 丝袜亚洲另类丝袜在线| 精品欧美久久久| 国产精品18久久久久久久久| 国产日韩精品一区二区三区在线| 岛国av在线一区| 亚洲柠檬福利资源导航| 欧美无人高清视频在线观看| 日韩国产欧美视频| 精品国产伦一区二区三区免费| 国产福利不卡视频| 日韩久久一区二区| 欧美猛男男办公室激情| 美女看a上一区| 国产欧美一区二区精品性| 波多野结衣中文字幕一区二区三区| 国产精品久久久久久户外露出| 99久久精品免费| 五月天激情综合| 久久久久久亚洲综合影院红桃| 成人aa视频在线观看| 亚洲愉拍自拍另类高清精品| 日韩女优视频免费观看| 成人av电影在线播放| 日本 国产 欧美色综合| 亚洲国产精品高清| 91精品午夜视频| 成人午夜精品在线| 天天综合色天天综合| 久久久国际精品| 欧美猛男男办公室激情| 成人综合在线观看| 日精品一区二区三区| 日本一二三四高清不卡| 欧美精品第一页| zzijzzij亚洲日本少妇熟睡| 视频在线观看一区| 日韩理论电影院| 久久综合久久综合九色| 欧美精品在线一区二区| 99久久精品费精品国产一区二区| 免费观看日韩av| 一区二区三区 在线观看视频| 精品国产乱码久久久久久蜜臀 | 亚洲色图视频免费播放| 欧美三区免费完整视频在线观看| 韩国精品久久久| 亚洲国产日韩精品| 国产精品色噜噜| 久久久久久久久久电影| 91精品国产全国免费观看 | 日韩欧美二区三区| 色婷婷香蕉在线一区二区| 国产v日产∨综合v精品视频| 热久久免费视频| 五月天精品一区二区三区| 亚洲男人都懂的| 日韩一区在线看| 亚洲国产精品av| 久久久亚洲欧洲日产国码αv| 91精品在线麻豆| 欧美日韩国产一级片| 91麻豆免费看片| 不卡一区二区在线| 国产福利精品一区二区| 国产一区在线精品| 国产在线视频精品一区| 免费日本视频一区| 日韩成人免费在线| 日韩精品电影一区亚洲| 偷偷要91色婷婷| 亚洲高清免费观看| 性久久久久久久| 日韩激情中文字幕| 青草国产精品久久久久久| 日本伊人午夜精品| 久久99精品国产91久久来源| 蜜臀av一区二区在线观看 | 中文天堂在线一区| 欧美国产精品一区二区三区| 国产亚洲一本大道中文在线| 久久久五月婷婷| 中文字幕av一区二区三区| 日本一区二区免费在线 | 天天免费综合色| 麻豆视频一区二区| 国产麻豆视频一区| 丰满白嫩尤物一区二区| 欧美专区亚洲专区| 欧美性极品少妇| 538在线一区二区精品国产| 欧美草草影院在线视频| 中文字幕成人av| 亚洲一区二区三区国产| 免费成人小视频| 懂色av一区二区三区免费看| 色香蕉成人二区免费| 精品久久久影院| 国产精品国产精品国产专区不蜜 | 久久爱www久久做| 高清成人免费视频| 91福利国产成人精品照片| 欧美精品久久久久久久多人混战 | 欧美在线free| 26uuu亚洲| 亚洲与欧洲av电影| 韩日精品视频一区| 一本大道久久a久久综合| 精品国产区一区| 亚洲精品午夜久久久| 蜜臀av在线播放一区二区三区| 成人91在线观看| 这里只有精品99re| 自拍偷拍亚洲综合| 青青草97国产精品免费观看无弹窗版 | 欧美一区二区三区视频在线观看| 久久久精品欧美丰满| 香蕉加勒比综合久久|