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

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

?? port.c

?? FreeRTOS V4.2.1,增加了AVR32 UC3 和 LPC2368 的支持
?? C
字號:
/*
	FreeRTOS.org V4.2.1 - Copyright (C) 2003-2007 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.

	Also see http://www.SafeRTOS.com for an IEC 61508 compliant version along
	with commercial development and support options.
	***************************************************************************
*/

/*
	Changes between V4.0.0 and V4.0.1

	+ Reduced the code used to setup the initial stack frame.
	+ The kernel no longer has to install or handle the fault interrupt.
*/

/*-----------------------------------------------------------
 * Implementation of functions defined in portable.h for the ARM CM3 port.
 *----------------------------------------------------------*/

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

/* Constants required to manipulate the NVIC. */
#define portNVIC_SYSTICK_CTRL		( ( volatile unsigned portLONG *) 0xe000e010 )
#define portNVIC_SYSTICK_LOAD		( ( volatile unsigned portLONG *) 0xe000e014 )
#define portNVIC_INT_CTRL			( ( volatile unsigned portLONG *) 0xe000ed04 )
#define portNVIC_SYSPRI2			( ( volatile unsigned portLONG *) 0xe000ed20 )
#define portNVIC_SYSPRI1			( ( volatile unsigned portLONG *) 0xe000ed1c )
#define portNVIC_HARD_FAULT_STATUS	0xe000ed2c
#define portNVIC_FORCED_FAULT_BIT	0x40000000
#define portNVIC_SYSTICK_CLK		0x00000004
#define portNVIC_SYSTICK_INT		0x00000002
#define portNVIC_SYSTICK_ENABLE		0x00000001
#define portNVIC_PENDSVSET			0x10000000
#define portNVIC_PENDSV_PRI			0x00ff0000
#define portNVIC_SVCALL_PRI			0xff000000
#define portNVIC_SYSTICK_PRI		0xff000000

/* Constants required to set up the initial stack. */
#define portINITIAL_XPSR			( 0x01000000 )

/* Each task maintains its own interrupt status in the critical nesting
variable. */
unsigned portBASE_TYPE uxCriticalNesting = 0xaaaaaaaa;

/* Constant hardware definitions to assist asm code. */
const unsigned long ulHardFaultStatus = portNVIC_HARD_FAULT_STATUS;
const unsigned long ulNVICIntCtrl = ( unsigned long ) 0xe000ed04;
const unsigned long ulForceFaultBit = portNVIC_FORCED_FAULT_BIT;
const unsigned long ulPendSVBit = portNVIC_PENDSVSET;

/* 
 * Setup the timer to generate the tick interrupts.
 */
static void prvSetupTimerInterrupt( void );

/*
 * Set the MSP/PSP to a known value.
 */
void prvSetMSP( unsigned long ulValue );
void prvSetPSP( unsigned long ulValue );

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

/* 
 * See header file for description. 
 */
portSTACK_TYPE *pxPortInitialiseStack( portSTACK_TYPE *pxTopOfStack, pdTASK_CODE pxCode, void *pvParameters )
{
	/* Simulate the stack frame as it would be created by a context switch
	interrupt. */
	*pxTopOfStack = portINITIAL_XPSR;	/* xPSR */
	pxTopOfStack--;
	*pxTopOfStack = ( portSTACK_TYPE ) pxCode;	/* PC */
	pxTopOfStack--;
	*pxTopOfStack = 0xfffffffd;	/* LR */
	pxTopOfStack -= 5;	/* R12, R3, R2 and R1. */
	*pxTopOfStack = ( portSTACK_TYPE ) pvParameters;	/* R0 */
	pxTopOfStack -= 9;	/* R11, R10, R9, R8, R7, R6, R5 and R4. */
	*pxTopOfStack = 0x00000000; /* uxCriticalNesting. */

	return pxTopOfStack;
}
/*-----------------------------------------------------------*/

__asm void prvSetPSP( unsigned long ulValue )
{
	PRESERVE8
	msr psp, r0
	bx lr;
}
/*-----------------------------------------------------------*/

__asm void prvSetMSP( unsigned long ulValue )
{
	PRESERVE8
	msr msp, r0
	bx lr;
}
/*-----------------------------------------------------------*/

/* 
 * See header file for description. 
 */
portBASE_TYPE xPortStartScheduler( void )
{
	/* Start the timer that generates the tick ISR.  Interrupts are disabled
	here already. */
	prvSetupTimerInterrupt();

	/* Make PendSV, CallSV and SysTick the lowest priority interrupts. */
	*(portNVIC_SYSPRI2) |= portNVIC_PENDSV_PRI;
	*(portNVIC_SYSPRI2) |= portNVIC_SYSTICK_PRI;
	*(portNVIC_SYSPRI1) |= portNVIC_SVCALL_PRI;

	/* Start the first task. */
	prvSetPSP( 0 );
	prvSetMSP( *((unsigned portLONG *) 0 ) );
	*(portNVIC_INT_CTRL) |= portNVIC_PENDSVSET;

	/* Enable interrupts */
	portENABLE_INTERRUPTS();

	/* Should not get here! */
	return 0;
}
/*-----------------------------------------------------------*/

void vPortEndScheduler( void )
{
	/* It is unlikely that the CM3 port will require this function as there
	is nothing to return to.  */
}
/*-----------------------------------------------------------*/

void vPortYieldFromISR( void )
{
	/* Set a PendSV to request a context switch. */
	*(portNVIC_INT_CTRL) |= portNVIC_PENDSVSET;	
	portENABLE_INTERRUPTS();
}
/*-----------------------------------------------------------*/

__asm void vPortDisableInterrupts( void )
{
	PRESERVE8
	cpsid i;
	bx lr;
}
/*-----------------------------------------------------------*/

__asm void vPortEnableInterrupts( void )
{
	PRESERVE8
	cpsie i;
	bx lr;
}
/*-----------------------------------------------------------*/

void vPortEnterCritical( void )
{
	vPortDisableInterrupts();
	uxCriticalNesting++;
}
/*-----------------------------------------------------------*/

void vPortExitCritical( void )
{
	uxCriticalNesting--;
	if( uxCriticalNesting == 0 )
	{
		vPortEnableInterrupts();
	}
}
/*-----------------------------------------------------------*/

__asm void xPortPendSVHandler( void )
{
	extern uxCriticalNesting;
	extern pxCurrentTCB;
	extern vTaskSwitchContext;

	PRESERVE8

	/* Start first task if the stack has not yet been setup. */
	mrs r0, psp
	cbz r0, no_save

	/* Save the context into the TCB. */
	sub r0, #0x20
	stm r0, {r4-r11}
	sub r0, #0x04
	ldr r1, =uxCriticalNesting
	ldr r1, [r1]
	stm r0, {r1}
	ldr r1, =pxCurrentTCB
	ldr r1, [r1]
	str r0, [r1]

no_save;
	
	/* Find the task to execute. */
	ldr r0, =vTaskSwitchContext
	push {r14}
	cpsid i
	blx r0
	cpsie i
	pop {r14}	

	/* Restore the context. */
	ldr r1, =pxCurrentTCB
	ldr r1, [r1];
	ldr r0, [r1];
	ldm r0, {r1, r4-r11}
	ldr r2, =uxCriticalNesting
	str r1, [r2]
	ldr r2, [r2]
	add r0, #0x24
	msr psp, r0
	orr r14, #0xd

	/* Exit with interrupts in the state required by the task. */
	cbnz r2, sv_disable_interrupts
	
	bx r14

sv_disable_interrupts;
	cpsid i
	bx r14
}
/*-----------------------------------------------------------*/

__asm void xPortSysTickHandler( void )
{
	extern vTaskIncrementTick
	PRESERVE8

	/* Call the scheduler tick function. */
	ldr r0, =vTaskIncrementTick
	push {r14}
	cpsid i
	blx r0
	cpsie i
	pop {r14}	

	/* If using preemption, also force a context switch. */
	#if configUSE_PREEMPTION == 1
	extern vPortYieldFromISR
		push {r14}
		ldr r0, =vPortYieldFromISR
		blx r0
		pop {r14}
	#endif

	/* Exit with interrupts in the correct state. */
	ldr r2, =uxCriticalNesting
	ldr r2, [r2]
	cbnz r2, tick_disable_interrupts

	bx r14

tick_disable_interrupts;
	cpsid i
	bx r14
}
/*-----------------------------------------------------------*/

/*
 * Setup the systick timer to generate the tick interrupts at the required
 * frequency.
 */
void prvSetupTimerInterrupt( void )
{
	/* Configure SysTick to interrupt at the requested rate. */
	*(portNVIC_SYSTICK_LOAD) = configCPU_CLOCK_HZ / configTICK_RATE_HZ;
	*(portNVIC_SYSTICK_CTRL) = portNVIC_SYSTICK_CLK | portNVIC_SYSTICK_INT | portNVIC_SYSTICK_ENABLE;
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区免费在线| 日韩限制级电影在线观看| 日韩电影一二三区| 亚洲午夜激情网站| 亚洲五码中文字幕| 日av在线不卡| 蜜臀精品久久久久久蜜臀| 麻豆视频观看网址久久| 久久99精品久久久| 国产精品一区三区| 国产69精品久久99不卡| av不卡免费在线观看| 成人a免费在线看| 在线精品观看国产| 欧美一区二区高清| 26uuu色噜噜精品一区二区| 久久久蜜桃精品| 国产精品欧美经典| 一区二区三区在线免费| 婷婷综合另类小说色区| 久99久精品视频免费观看| 国产一区二区三区免费看| 成人网页在线观看| 91国产免费看| 日韩欧美一卡二卡| 国产精品久久久爽爽爽麻豆色哟哟 | 亚洲精品日韩一| 丝袜亚洲另类欧美| 国产高清不卡二三区| 91视视频在线观看入口直接观看www| 欧美影院一区二区三区| 欧美成人精品1314www| 国产精品黄色在线观看| 一二三区精品福利视频| 狠狠狠色丁香婷婷综合激情| 91丨九色丨尤物| 26uuuu精品一区二区| 一区二区三区小说| 国产在线精品一区二区夜色 | 91精品国产综合久久久久| 久久亚洲二区三区| 亚洲国产视频网站| 丁香激情综合五月| 91精品一区二区三区在线观看| 国产午夜精品一区二区三区视频 | 中文字幕一区二区三区在线播放 | 欧美日韩黄色一区二区| 中文在线免费一区三区高中清不卡| 一区二区三区小说| 成人视屏免费看| 日韩亚洲欧美中文三级| 一区二区三区在线视频播放| 国产成人激情av| 欧美精品一区二区三区一线天视频 | 国产精品一区二区久激情瑜伽| 欧美在线观看视频一区二区 | 日本欧美一区二区| 欧美午夜精品一区二区三区| 中文字幕高清一区| 国产精品一区二区在线观看不卡 | 91蜜桃免费观看视频| 久久久久国产精品厨房| 久久99精品国产麻豆婷婷洗澡| 欧美日韩激情一区二区三区| 亚洲一区视频在线| 91网址在线看| 亚洲精品成人a在线观看| 92国产精品观看| 中文字幕中文字幕一区| 成人在线综合网| 中日韩免费视频中文字幕| 国产精品一区二区三区99| 26uuu另类欧美亚洲曰本| 久久成人免费网| 日韩精品最新网址| 国模无码大尺度一区二区三区| 日韩视频一区二区在线观看| 美女免费视频一区二区| 日韩三级在线观看| 激情国产一区二区| 国产欧美视频在线观看| 成人高清伦理免费影院在线观看| 国产精品免费视频一区| 成人不卡免费av| 一区二区三区欧美视频| 欧美特级限制片免费在线观看| 亚洲va欧美va人人爽午夜| 91精品国产丝袜白色高跟鞋| 精品亚洲国产成人av制服丝袜| 欧美精品一区二区蜜臀亚洲| 风流少妇一区二区| 中文字幕欧美一| 日本国产一区二区| 香蕉久久夜色精品国产使用方法| 欧美一区二区三区免费在线看| 经典三级视频一区| 亚洲图片另类小说| 欧美日韩成人综合在线一区二区 | 一区二区三区免费网站| 欧美高清精品3d| 久久av中文字幕片| 国产精品麻豆欧美日韩ww| 欧美亚洲尤物久久| 国产伦精品一区二区三区在线观看| 国产精品美日韩| 欧美乱妇23p| 国产98色在线|日韩| 一区二区三区四区不卡视频| 欧美r级在线观看| 在线精品视频小说1| 国产一区二区三区在线观看精品 | 欧美高清你懂得| 国产成人自拍网| 亚洲午夜影视影院在线观看| 欧美精品一区二区在线观看| 精品视频在线免费观看| 国内成+人亚洲+欧美+综合在线| 一区二区三区中文在线| 国产日韩欧美精品综合| 欧美人体做爰大胆视频| av成人免费在线| 久草中文综合在线| 亚洲一区二区在线视频| 亚洲国产精品成人综合色在线婷婷| 欧美久久久久免费| 色伊人久久综合中文字幕| 国产激情一区二区三区桃花岛亚洲| 天天综合天天做天天综合| 国产精品乱人伦| 久久伊人中文字幕| 日韩一级片在线观看| 欧美午夜电影网| 日本伦理一区二区| 成人爱爱电影网址| 国产成人亚洲精品狼色在线| 蜜臀久久99精品久久久久久9| 亚洲综合在线免费观看| 中文字幕在线不卡国产视频| 久久一区二区三区四区| 精品国产91亚洲一区二区三区婷婷| 欧美在线观看18| 色综合亚洲欧洲| 97久久人人超碰| k8久久久一区二区三区| 国产成人精品三级| 国产成人av自拍| 国产九色sp调教91| 国产一区二区精品久久99| 精品一区二区三区av| 久久国产乱子精品免费女| 麻豆国产精品一区二区三区| 蜜臂av日日欢夜夜爽一区| 毛片基地黄久久久久久天堂| 秋霞午夜av一区二区三区| 日本特黄久久久高潮| 蜜桃一区二区三区四区| 麻豆精品一二三| 国产最新精品精品你懂的| 国产精品亚洲午夜一区二区三区| 国产一区二区精品久久| 成人av在线影院| 色悠悠亚洲一区二区| 在线看国产一区| 欧美一区二区三区视频在线观看| 日韩视频在线你懂得| 久久欧美中文字幕| 国产精品久久久久久久久免费丝袜 | 亚洲成人资源在线| 久久99热这里只有精品| 国产九色sp调教91| 色系网站成人免费| 91麻豆精品国产综合久久久久久| 欧美精品一卡两卡| 久久综合网色—综合色88| 国产精品久久久久四虎| 一区二区三区日韩精品| 蜜臀av亚洲一区中文字幕| 成人精品鲁一区一区二区| 欧美日韩亚洲丝袜制服| 欧美电影免费观看高清完整版在| 日本一区二区免费在线| 一区二区三区在线影院| 久久国产免费看| 在线观看免费一区| 欧美成人a在线| 国产精品乱码人人做人人爱 | 日本韩国一区二区三区| 777欧美精品| 日本一区二区久久| 五月天激情小说综合| 国产成人综合在线| 在线不卡中文字幕播放| 中文av一区特黄| 蜜臀va亚洲va欧美va天堂| 色噜噜狠狠成人网p站| 精品动漫一区二区三区在线观看| 亚洲欧美一区二区不卡| 精品一区二区综合| 欧美久久一二区| 亚洲人吸女人奶水|