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

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

?? port.c

?? MCS-51的一個Free小型操作系統,在KeilC中下編譯工作
?? C
字號:
/*
	FreeRTOS.org V4.1.3 - 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.
	***************************************************************************
*/


/*-----------------------------------------------------------
 * Implementation of functions defined in portable.h for the Tern EE 186
 * port.
 *----------------------------------------------------------*/

/* Library includes. */
#include <embedded.h>
#include <ae.h>

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

/* The timer increments every four clocks, hence the divide by 4. */
#define portTIMER_COMPARE ( unsigned portSHORT ) ( ( configCPU_CLOCK_HZ / configTICK_RATE_HZ ) / ( unsigned portLONG ) 4 )

/* From the RDC data sheet. */
#define portENABLE_TIMER_AND_INTERRUPT ( unsigned portSHORT ) 0xe001

/* Interrupt control. */
#define portEIO_REGISTER 0xff22
#define portCLEAR_INTERRUPT 0x0008

/* Setup the hardware to generate the required tick frequency. */
static void prvSetupTimerInterrupt( void );

/* The ISR used depends on whether the preemptive or cooperative scheduler
is being used. */
#if( configUSE_PREEMPTION == 1 )
	/* Tick service routine used by the scheduler when preemptive scheduling is
	being used. */
	static void __interrupt __far prvPreemptiveTick( void );
#else
	/* Tick service routine used by the scheduler when cooperative scheduling is
	being used. */
	static void __interrupt __far prvNonPreemptiveTick( void );
#endif

/* Trap routine used by taskYIELD() to manually cause a context switch. */
static void __interrupt __far prvYieldProcessor( void );

/*-----------------------------------------------------------*/
/* See header file for description. */
portSTACK_TYPE *pxPortInitialiseStack( portSTACK_TYPE *pxTopOfStack, pdTASK_CODE pxCode, void *pvParameters )
{
portSTACK_TYPE DS_Reg = 0;

	/* Place a few bytes of known values on the bottom of the stack.
	This is just useful for debugging. */

	*pxTopOfStack = 0x1111;
	pxTopOfStack--;
	*pxTopOfStack = 0x2222;
	pxTopOfStack--;
	*pxTopOfStack = 0x3333;
	pxTopOfStack--;

	/* We are going to start the scheduler using a return from interrupt
	instruction to load the program counter, so first there would be the
	function call with parameters preamble. */
	
	*pxTopOfStack = FP_SEG( pvParameters );
	pxTopOfStack--;
	*pxTopOfStack = FP_OFF( pvParameters );
	pxTopOfStack--;
	*pxTopOfStack = FP_SEG( pxCode );
	pxTopOfStack--;
	*pxTopOfStack = FP_OFF( pxCode );
	pxTopOfStack--;

	/* Next the status register and interrupt return address. */
	*pxTopOfStack = portINITIAL_SW;
	pxTopOfStack--;
	*pxTopOfStack = FP_SEG( pxCode );
	pxTopOfStack--;
	*pxTopOfStack = FP_OFF( pxCode );
	pxTopOfStack--;

	/* The remaining registers would be pushed on the stack by our context
	switch function.  These are loaded with values simply to make debugging
	easier. */
	*pxTopOfStack = ( portSTACK_TYPE ) 0xAAAA;	/* AX */
	pxTopOfStack--;
	*pxTopOfStack = ( portSTACK_TYPE ) 0xBBBB;	/* BX */
	pxTopOfStack--;
	*pxTopOfStack = ( portSTACK_TYPE ) 0xCCCC;	/* CX */
	pxTopOfStack--;
	*pxTopOfStack = ( portSTACK_TYPE ) 0xDDDD;	/* DX */
	pxTopOfStack--;
	*pxTopOfStack = ( portSTACK_TYPE ) 0xEEEE;	/* ES */
	pxTopOfStack--;

	/* We need the true data segment. */
	__asm{	MOV DS_Reg, DS };

	*pxTopOfStack = DS_Reg;						/* DS */
	pxTopOfStack--;
	*pxTopOfStack = ( portSTACK_TYPE ) 0x0123;	/* SI */
	pxTopOfStack--;
	*pxTopOfStack = ( portSTACK_TYPE ) 0xDDDD;	/* DI */
	pxTopOfStack--;
	*pxTopOfStack = ( portSTACK_TYPE ) 0xBBBB;	/* BP */

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

portBASE_TYPE xPortStartScheduler( void )
{
	/* This is called with interrupts already disabled. */

	/* Put our manual switch (yield) function on a known
	vector. */
	setvect( portSWITCH_INT_NUMBER, prvYieldProcessor );

	/* Setup the tick interrupt. */
	prvSetupTimerInterrupt();

	/* Kick off the scheduler by setting up the context of the first task. */
	portFIRST_CONTEXT();

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

/* The ISR used depends on whether the preemptive or cooperative scheduler
is being used. */
#if( configUSE_PREEMPTION == 1 )
	static void __interrupt __far prvPreemptiveTick( void )
	{
		/* Get the scheduler to update the task states following the tick. */
		vTaskIncrementTick();

		/* Switch in the context of the next task to be run. */
		portSWITCH_CONTEXT();

		/* Reset interrupt. */
		outport( portEIO_REGISTER, portCLEAR_INTERRUPT );
	}
#else
	static void __interrupt __far prvNonPreemptiveTick( void )
	{
		/* Same as preemptive tick, but the cooperative scheduler is being used
		so we don't have to switch in the context of the next task. */
		vTaskIncrementTick();
		/* Reset interrupt. */
		outport( portEIO_REGISTER, portCLEAR_INTERRUPT );
	}
#endif
/*-----------------------------------------------------------*/

static void __interrupt __far prvYieldProcessor( void )
{
	/* Switch in the context of the next task to be run. */
	portSWITCH_CONTEXT();
}
/*-----------------------------------------------------------*/

void vPortEndScheduler( void )
{
	/* Not implemented. */
}
/*-----------------------------------------------------------*/

static void prvSetupTimerInterrupt( void )
{
const unsigned portSHORT usTimerACompare = portTIMER_COMPARE, usTimerAMode = portENABLE_TIMER_AND_INTERRUPT;

	#if( configUSE_PREEMPTION == 1 )
		/* Tick service routine used by the scheduler when preemptive scheduling is
		being used. */
		t2_init( usTimerAMode, usTimerACompare, prvPreemptiveTick );
	#else
		/* Tick service routine used by the scheduler when cooperative scheduling is
		being used. */
		t2_init( usTimerAMode, usTimerACompare, prvNonPreemptiveTick );
	#endif
}







?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人国产精品免费网站| 欧洲一区在线电影| 亚洲一区二区影院| 欧美国产精品专区| 欧美一级精品在线| 欧美在线短视频| www.欧美.com| 国产米奇在线777精品观看| 亚洲成人综合在线| 尤物在线观看一区| 国产精品乱码一区二区三区软件 | 最新不卡av在线| 日韩精品一区二区三区视频| 在线免费不卡视频| 国产.欧美.日韩| 国产一区二区三区在线观看免费| 亚洲综合清纯丝袜自拍| 中文字幕av在线一区二区三区| 日韩亚洲欧美中文三级| 欧美在线看片a免费观看| 99久久精品免费看| 成人黄页在线观看| 国产专区欧美精品| 韩国欧美国产一区| 免费在线看一区| 亚洲国产日韩一级| 一区二区三区四区国产精品| 中文字幕av免费专区久久| 久久色中文字幕| 精品久久久久久无| 欧美成人精品1314www| 91精品国产综合久久福利| 欧美午夜精品一区二区三区| 欧美怡红院视频| 91精品1区2区| 91成人国产精品| 91精品福利在线| 91福利在线导航| 欧美日韩午夜精品| 欧美久久一二三四区| 欧美午夜精品久久久久久超碰| 91毛片在线观看| 欧美伊人久久久久久午夜久久久久| 色爱区综合激月婷婷| 色综合久久久久网| 欧美性猛交xxxx乱大交退制版| 欧美自拍偷拍午夜视频| 欧美日韩一级大片网址| 欧美高清性hdvideosex| 91精品国产综合久久久久久久 | 日韩视频永久免费| 久久综合一区二区| 中文一区二区完整视频在线观看 | 一区二区视频在线看| 亚洲欧美日韩一区| 一区二区三区国产精品| 亚洲国产精品精华液网站| 日韩经典中文字幕一区| 麻豆国产一区二区| 国产精品一二三四五| 成人免费毛片片v| 色综合夜色一区| 欧美系列一区二区| 日韩精品中文字幕一区| 欧美国产禁国产网站cc| 亚洲综合久久av| 日韩av高清在线观看| 国产精品一区二区在线观看网站| 波多野结衣在线aⅴ中文字幕不卡| 99re成人精品视频| 91精品欧美久久久久久动漫| 久久天天做天天爱综合色| 日韩美女视频19| 另类综合日韩欧美亚洲| 成人av电影在线网| 欧美日韩国产高清一区二区| 久久久久久麻豆| 亚洲黄色免费电影| 韩国视频一区二区| 91国产丝袜在线播放| 欧美成人精品3d动漫h| 国产精品福利一区二区| 日本成人中文字幕在线视频| 成人性视频网站| 6080yy午夜一二三区久久| 国产日韩欧美综合一区| 亚洲成人免费视| 国产91富婆露脸刺激对白| 欧美系列一区二区| 中文一区一区三区高中清不卡| 亚洲国产一二三| 国产91在线观看| 欧美老年两性高潮| 国产精品每日更新在线播放网址| 日本免费新一区视频| 99免费精品在线| 久久综合色婷婷| 亚洲第一精品在线| 成熟亚洲日本毛茸茸凸凹| 欧美丰满美乳xxx高潮www| 中文字幕一区二区三区不卡在线| 日韩精品一级中文字幕精品视频免费观看| 国产成人综合在线| 欧美一区二区不卡视频| 亚洲久本草在线中文字幕| 国产精品一区二区不卡| 欧美欧美欧美欧美| 亚洲精品成a人| 丁香另类激情小说| 精品成a人在线观看| 无吗不卡中文字幕| 91久久精品网| 日韩一区欧美小说| 成人黄页毛片网站| 久久综合999| 日本不卡一二三区黄网| 欧美三级电影一区| 日韩一区中文字幕| 成人精品视频一区二区三区尤物| 日韩三级av在线播放| 国内精品不卡在线| 91精品国产色综合久久不卡蜜臀| 最新中文字幕一区二区三区| 国产高清久久久久| 精品国产露脸精彩对白| 日本午夜精品一区二区三区电影 | 在线观看一区日韩| 亚洲女同ⅹxx女同tv| 99vv1com这只有精品| 国产精品伦一区二区三级视频| 国产精品一区久久久久| 国产亚洲一区二区三区在线观看| 青青草97国产精品免费观看无弹窗版| 欧美午夜精品久久久| 亚洲一区在线播放| 在线观看国产91| 亚洲第一精品在线| 欧美日本国产视频| 日韩精品久久理论片| 日韩一卡二卡三卡| 看电视剧不卡顿的网站| 日韩精品一区在线| 激情av综合网| 久久噜噜亚洲综合| 国产91露脸合集magnet| 中文字幕一区三区| 色激情天天射综合网| 亚洲国产成人高清精品| 欧美福利视频导航| 狠狠色狠狠色综合| 久久久亚洲精品一区二区三区| 国产一区激情在线| 日本一区二区三区视频视频| aaa欧美大片| 亚洲一区二区三区四区在线观看 | 亚洲男同1069视频| 91福利视频在线| 日本一区中文字幕| 久久这里都是精品| 9人人澡人人爽人人精品| 亚洲一区在线观看免费| 欧美一区二区三区视频在线| 激情综合网av| 国产精品人成在线观看免费| 99精品偷自拍| 丝袜亚洲另类丝袜在线| 精品久久人人做人人爽| 国产成人精品免费看| 一区二区三区中文免费| 综合欧美一区二区三区| 欧美色倩网站大全免费| 国产一区欧美日韩| 亚洲精品第1页| 日韩欧美区一区二| 99久久国产综合精品色伊| 视频一区二区中文字幕| 久久视频一区二区| 在线精品视频一区二区三四| 精品在线亚洲视频| 亚洲欧洲精品成人久久奇米网| 884aa四虎影成人精品一区| 九九九久久久精品| 亚洲伦理在线免费看| 日韩欧美第一区| 91在线视频18| 久久99蜜桃精品| 亚洲综合丝袜美腿| 久久综合久久综合久久综合| 欧美色视频在线观看| 国产剧情一区二区| 天使萌一区二区三区免费观看| 亚洲国产高清aⅴ视频| 欧美精品久久天天躁| 成人性视频免费网站| 蜜臀av一区二区| 亚洲综合清纯丝袜自拍| 中文一区二区在线观看| 日韩欧美专区在线| 欧美性生活影院| 99久久综合色|