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

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

?? port.c

?? MCS-51的一個(gè)Free小型操作系統(tǒng),在KeilC中下編譯工作
?? C
字號(hào):
/*
	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.
	***************************************************************************
*/


/*
 * Milos Prokic
 * 
 * File adopted from the MSP430 GCC port
 * Interrupt handling, xPortStartScheduler, vPortYield, portSAVE_CONTEXT(), portRESTORE_CONTEXT() 
/* Standard includes. */

#include <stdlib.h>

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

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

/* Constants required for hardware setup.  The tick ISR runs off the ACLK, 
not the MCLK. */
#define portACLK_FREQUENCY_HZ			( ( portTickType ) 32768 )
#define portINITIAL_CRITICAL_NESTING	( ( unsigned portSHORT ) 10 )
#define portFLAGS_INT_ENABLED			( ( portSTACK_TYPE ) 0x08 )

/* We require the address of the pxCurrentTCB variable, but don't want to know
any details of its type. */
typedef void tskTCB;
extern volatile tskTCB * volatile pxCurrentTCB;

unsigned portCHAR ucReschedule;

/* Each task maintains a count of the critical section nesting depth.  Each 
time a critical section is entered the count is incremented.  Each time a 
critical section is exited the count is decremented - with interrupts only 
being re-enabled if the count is zero.

usCriticalNesting will get set to zero when the scheduler starts, but must
not be initialised to zero as this will cause problems during the startup
sequence. */
volatile unsigned portSHORT usCriticalNesting = portINITIAL_CRITICAL_NESTING;
/*-----------------------------------------------------------*/

/*
 * Sets up the periodic ISR used for the RTOS tick.  This uses timer 0, but
 * could have alternatively used the watchdog timer or timer 1.
 */
void prvSetupTimerInterrupt( void );
/*-----------------------------------------------------------*/

/* 
 * Initialise the stack of a task to look exactly as if a call to 
 * portSAVE_CONTEXT had been called.
 * 
 * See the header file portable.h.
 */
portSTACK_TYPE *pxPortInitialiseStack( portSTACK_TYPE *pxTopOfStack, pdTASK_CODE pxCode, void *pvParameters )
{
	/* 
		Place a few bytes of known values on the bottom of the stack. 
		This is just useful for debugging and can be included if required.

		*pxTopOfStack = ( portSTACK_TYPE ) 0x1111;
		pxTopOfStack--;
		*pxTopOfStack = ( portSTACK_TYPE ) 0x2222;
		pxTopOfStack--;
		*pxTopOfStack = ( portSTACK_TYPE ) 0x3333;
		pxTopOfStack--; 
	*/

	/* The msp430 automatically pushes the PC then SR onto the stack before 
	executing an ISR.  We want the stack to look just as if this has happened
	so place a pointer to the start of the task on the stack first - followed
	by the flags we want the task to use when it starts up. */
	*pxTopOfStack = ( portSTACK_TYPE ) pxCode;
	pxTopOfStack--;
	*pxTopOfStack = portFLAGS_INT_ENABLED;
	pxTopOfStack--;

	/* Next the general purpose registers. */
	*pxTopOfStack = ( portSTACK_TYPE ) 0x4444;
	pxTopOfStack--;
	*pxTopOfStack = ( portSTACK_TYPE ) 0x5555;
	pxTopOfStack--;
	*pxTopOfStack = ( portSTACK_TYPE ) 0x6666;
	pxTopOfStack--;
	*pxTopOfStack = ( portSTACK_TYPE ) 0x7777;
	pxTopOfStack--;
	*pxTopOfStack = ( portSTACK_TYPE ) 0x8888;
	pxTopOfStack--;
	*pxTopOfStack = ( portSTACK_TYPE ) 0x9999;
	pxTopOfStack--;
	*pxTopOfStack = ( portSTACK_TYPE ) 0xaaaa;
	pxTopOfStack--;
	*pxTopOfStack = ( portSTACK_TYPE ) 0xbbbb;
	pxTopOfStack--;
	*pxTopOfStack = ( portSTACK_TYPE ) 0xcccc;
	pxTopOfStack--;
	*pxTopOfStack = ( portSTACK_TYPE ) 0xdddd;
	pxTopOfStack--;
	*pxTopOfStack = ( portSTACK_TYPE ) 0xeeee;
	pxTopOfStack--;

	/* When the task starts is will expect to find the function parameter in
	R15. */
	*pxTopOfStack = ( portSTACK_TYPE ) pvParameters;
	pxTopOfStack--;

	/* A variable is used to keep track of the critical section nesting.  
	This variable has to be stored as part of the task context and is 
	initially set to zero. */
	*pxTopOfStack = ( portSTACK_TYPE ) portNO_CRITICAL_SECTION_NESTING;	

	/* Return a pointer to the top of the stack we have generated so this can
	be stored in the task control block for the task. */
	return pxTopOfStack;
}
/*-----------------------------------------------------------*/

void vPortEndScheduler( void )
{
	/* It is unlikely that the MSP430 port will get stopped.  If required simply
	disable the tick interrupt here. */
}
/*-----------------------------------------------------------*/

/*
 * Hardware initialisation to generate the RTOS tick.  This uses timer 0
 * but could alternatively use the watchdog timer or timer 1. 
 */
void prvSetupTimerInterrupt( void )
{
	/* Ensure the timer is stopped. */
	TACTL = 0;

	/* Run the timer of the ACLK. */
	TACTL = TASSEL_1;

	/* Clear everything to start with. */
	TACTL |= TACLR;

	/* Set the compare match value according to the tick rate we want. */
	TACCR0 = portACLK_FREQUENCY_HZ / configTICK_RATE_HZ;

	/* Enable the interrupts. */
	TACCTL0 = CCIE;

	/* Start up clean. */
	TACTL |= TACLR;

	/* Up mode. */
	TACTL |= MC_1;
}
/*-----------------------------------------------------------*/

/* 
 * The interrupt service routine used depends on whether the pre-emptive
 * scheduler is being used or not.
 */

#if configUSE_PREEMPTION == 1

	/*
	 * Tick ISR for preemptive scheduler.  We can use a naked attribute as
	 * the context is saved at the start of vPortYieldFromTick().  The tick
	 * count is incremented after the context is saved.
	 */
	void ISROsTick( void )
	{
		/* Increment the tick count then switch to the highest priority task
		that is ready to run. */
		vTaskIncrementTick();
		vTaskSwitchContext();
	}

#else

	/*
	 * Tick ISR for the cooperative scheduler.  All this does is increment the
	 * tick count.  We don't need to switch context, this can only be done by
	 * manual calls to taskYIELD();
	 */
	void ISROsTick( void )
	{
		vTaskIncrementTick();
	}
#endif


	

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人性生交大片免费看中文网站| 波多野结衣中文字幕一区二区三区| 国产原创一区二区| 色猫猫国产区一区二在线视频| 日韩欧美成人一区| 亚洲特级片在线| 国产成人免费av在线| 欧美大尺度电影在线| 一区二区在线观看免费视频播放| 精品写真视频在线观看| 欧美老肥妇做.爰bbww| 亚洲国产毛片aaaaa无费看 | 久久久精品国产免大香伊| 蜜臀久久99精品久久久久宅男 | 黄网站免费久久| 欧美日韩视频在线第一区| 一区二区三区在线观看国产| av激情综合网| 国产精品久久久久桃色tv| 99久久er热在这里只有精品66| 国产日韩欧美制服另类| 成人午夜激情视频| 亚洲欧美一区二区三区国产精品 | 欧美日韩一区二区三区四区| 天天av天天翘天天综合网 | 亚洲国产精品久久久男人的天堂| 欧美在线999| 国产一区二区精品在线观看| 久久精品亚洲乱码伦伦中文| 国产福利精品导航| 亚洲欧美另类图片小说| 国产精品88888| 国产欧美一区二区三区在线看蜜臀| 成人性生交大片免费看在线播放| 亚洲欧美日韩久久精品| 在线免费观看日韩欧美| 精品一区免费av| 国产精品欧美一区二区三区| 91一区二区在线观看| 日韩成人午夜电影| 国产欧美日韩激情| 欧美性高清videossexo| 成人av在线网| 久久aⅴ国产欧美74aaa| 亚洲欧洲日韩av| 精品国产精品一区二区夜夜嗨| caoporm超碰国产精品| 韩国av一区二区三区| 成人欧美一区二区三区小说| 538在线一区二区精品国产| 99久久精品久久久久久清纯| 精品一区二区三区视频在线观看| 亚洲成精国产精品女| 亚洲成人av资源| 亚洲成人免费av| 亚洲美女视频一区| 亚洲专区一二三| 亚洲永久精品国产| 一区二区三区成人| 亚洲美女淫视频| 日韩一区在线播放| 一区二区三区资源| 亚洲欧美日韩国产一区二区三区| 久久久久久免费网| 日韩欧美一级在线播放| 欧美中文字幕一区二区三区亚洲| 色婷婷精品久久二区二区蜜臂av| 波多野结衣精品在线| 狠狠色狠狠色综合日日91app| 久久99久久精品| 精品一区二区在线视频| 国内国产精品久久| 成人永久免费视频| 成人avav影音| 欧美日韩一区在线观看| 欧美一区二区三级| 久久久国产午夜精品| 一区二区久久久久| 天天av天天翘天天综合网色鬼国产| 麻豆精品一区二区三区| 国产一区二区三区在线观看免费视频| 国产成人午夜高潮毛片| 欧美日本视频在线| 久久九九国产精品| 亚洲一区二区三区在线播放| 视频一区视频二区中文| 国产精品77777竹菊影视小说| 51久久夜色精品国产麻豆| 国产精品网站导航| 免费观看成人av| 色乱码一区二区三区88| 欧美成人a视频| 性久久久久久久久久久久| 精品一区二区免费在线观看| 9i看片成人免费高清| 日韩欧美不卡一区| 亚洲精品国产精品乱码不99| 国产成人三级在线观看| www久久精品| 蜜桃视频第一区免费观看| 色狠狠一区二区三区香蕉| 欧美激情一区二区在线| 国产一区不卡在线| 欧美精品在线一区二区三区| 一区二区中文视频| 成人免费视频一区| 中文一区二区在线观看| 国产成人在线色| 欧美成人福利视频| 国产一区二区久久| 精品处破学生在线二十三| 精品亚洲国产成人av制服丝袜| 欧美一区二区三区免费大片| 午夜欧美大尺度福利影院在线看| 97久久精品人人做人人爽| 亚洲欧美韩国综合色| 色嗨嗨av一区二区三区| 亚洲国产人成综合网站| 欧美日本视频在线| 久久99国产精品久久99果冻传媒| 日韩精品一区二区三区中文精品| 国产精品一区三区| 亚洲精品日产精品乱码不卡| 91视频一区二区三区| 亚洲成人自拍网| 欧美mv日韩mv| 91蜜桃网址入口| 国产麻豆成人传媒免费观看| 国产亚洲va综合人人澡精品| 91视频免费观看| 全部av―极品视觉盛宴亚洲| 国产亚洲综合性久久久影院| 91浏览器在线视频| 日韩精彩视频在线观看| 久久精品免视看| 欧美一区二区福利视频| 福利电影一区二区三区| 香蕉影视欧美成人| 国产精品成人在线观看 | 欧美国产精品v| 欧美日韩视频第一区| 美国十次了思思久久精品导航| 国产精品福利一区二区三区| 日韩美女一区二区三区四区| 99久久综合国产精品| 国产一区在线观看麻豆| 青青草成人在线观看| 天天射综合影视| 日韩影院免费视频| 日韩经典一区二区| 精品夜夜嗨av一区二区三区| 日韩av电影一区| 国产一区二区在线电影| 成人午夜视频在线观看| 国产成人精品免费在线| 国产伦精一区二区三区| 国产一区二区三区免费看| 免费高清在线视频一区·| 青青草97国产精品免费观看 | 欧美不卡激情三级在线观看| 日韩一级视频免费观看在线| 久久免费午夜影院| 亚洲欧美视频一区| 亚洲成人在线免费| 国产在线视视频有精品| 久88久久88久久久| 国产69精品久久99不卡| 97久久超碰国产精品| 欧美综合亚洲图片综合区| 日韩视频一区在线观看| 亚洲精品一区二区三区香蕉| 日本一区二区三级电影在线观看 | 日本中文字幕一区二区视频| 狠狠色丁香九九婷婷综合五月| 国产1区2区3区精品美女| 91成人在线观看喷潮| 精品国产欧美一区二区| 亚洲精品videosex极品| 国产不卡视频一区二区三区| 日韩一区二区在线播放| 亚洲欧美激情小说另类| 成人黄色小视频| 国产三级欧美三级| 国产精品99久久久| 欧美不卡123| 久久精品国产澳门| 欧美高清视频不卡网| 亚洲成人激情av| 精品视频资源站| 亚洲一区影音先锋| 欧美日韩中文一区| 亚洲国产精品久久久男人的天堂| 99精品久久免费看蜜臀剧情介绍| 久久久精品影视| 国产成人av一区| 国产精品白丝在线| 在线观看亚洲成人| 天天影视涩香欲综合网 | 色激情天天射综合网| 亚洲在线视频免费观看|