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

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

?? list.h

?? mc9s08gb在ucos移植源碼.太難找了
?? H
字號:
/*
	FreeRTOS V3.2.0 - Copyright (C) 2003 - 2005 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.
	***************************************************************************
*/

/*
 * This is the list implementation used by the scheduler.  While it is tailored
 * heavily for the schedulers needs, it is also available for use by 
 * application code.  
 *
 * xLists can only store pointers to xListItems.  Each xListItem contains a
 * numeric value (xItemValue).  Most of the time the lists are sorted in 
 * descending item value order.
 * 
 * Lists are created already containing one list item.  The value of this
 * item is the maximum possible that can be stored, it is therefore always at
 * the end of the list and acts as a marker.  The list member pxHead always
 * points to this marker - even though it is at the tail of the list.  This
 * is because the tail contains a wrap back pointer to the true head of
 * the list.
 *
 * In addition to it's value, each list item contains a pointer to the next
 * item in the list (pxNext), a pointer to the list it is in (pxContainer)
 * and a pointer to back to the object that contains it.  These later two
 * pointers are included for efficiency of list manipulation.  There is 
 * effectively a two way link between the object containing the list item and 
 * the list item itself.
 *  
 *  
 * \page ListIntroduction List Implementation
 * \ingroup FreeRTOSIntro
 * <HR>
 */


#ifndef LIST_H
#define LIST_H

/*
 * Definition of the only type of object that a list can contain.
 */
struct xLIST_ITEM
{
	portTickType xItemValue;				/*< The value being listed.  In most cases this is used to sort the list in descending order. */
	volatile struct xLIST_ITEM * pxNext;	/*< Pointer to the next xListItem in the list. */
	volatile struct xLIST_ITEM * pxPrevious;/*< Pointer to the previous xListItem in the list. */
	void * pvOwner;							/*< Pointer to the object (normally a TCB) that contains the list item.  There is therefore a two way link between the object containing the list item and the list item itself. */
	void * pvContainer;						/*< Pointer to the list in which this list item is placed (if any). */
};
typedef struct xLIST_ITEM xListItem;		/* For some reason lint wants this as two separate definitions. */

/*
 * Definition of the type of queue used by the scheduler.
 */
typedef struct xLIST
{
	unsigned portBASE_TYPE uxNumberOfItems;
	volatile xListItem * pxHead;			/*< Pointer to the xListEnd item.  xListEnd contains a wrap back pointer to true list head. */
	volatile xListItem * pxIndex;			/*< Used to walk through the list.  Points to the last item returned by a call to pvListGetOwnerOfNextEntry(). */
	volatile xListItem xListEnd;			/*< List item that contains the maximum possible item value meaning it is always at the end of the list and is therefore used as a marker. */
} xList;

/*
 * Access macro to set the owner of a list item.  The owner of a list item
 * is the object (usually a TCB) that contains the list item.
 *
 * \page listSET_LIST_ITEM_OWNER listSET_LIST_ITEM_OWNER
 * \ingroup LinkedList
 * <HR>
 */
#define listSET_LIST_ITEM_OWNER( pxListItem, pxOwner )		{ ( pxListItem )->pvOwner = ( void * ) pxOwner; }

/*
 * Access macro to set the value of the list item.  In most cases the value is
 * used to sort the list in descending order.
 *
 * \page listSET_LIST_ITEM_VALUE listSET_LIST_ITEM_VALUE
 * \ingroup LinkedList
 * <HR>
 */
#define listSET_LIST_ITEM_VALUE( pxListItem, xValue )		{ ( pxListItem )->xItemValue = xValue; }

/*
 * Access macro the retrieve the value of the list item.  The value can 
 * represent anything - for example a the priority of a task, or the time at
 * which a task should be unblocked.
 *
 * \page listGET_LIST_ITEM_VALUE listGET_LIST_ITEM_VALUE
 * \ingroup LinkedList
 * <HR>
 */
#define listGET_LIST_ITEM_VALUE( pxListItem )				( ( pxListItem )->xItemValue )

/*
 * Access macro to determine if a list contains any items.  The macro will
 * only have the value true if the list is empty.
 *
 * \page listLIST_IS_EMPTY listLIST_IS_EMPTY
 * \ingroup LinkedList
 * <HR>
 */
#define listLIST_IS_EMPTY( pxList )				( ( pxList )->uxNumberOfItems == ( unsigned portBASE_TYPE ) 0 )

/*
 * Access macro to return the number of items in the list.
 */
#define listCURRENT_LIST_LENGTH( pxList )		( ( pxList )->uxNumberOfItems )

/*
 * Access function to obtain the owner of the next entry in a list.
 *
 * The list member pxIndex is used to walk through a list.  Calling 
 * listGET_OWNER_OF_NEXT_ENTRY increments pxIndex to the next item in the list
 * and returns that entries pxOwner parameter.  Using multiple calls to this
 * function it is therefore possible to move through every item contained in
 * a list.
 *
 * The pxOwner parameter of a list item is a pointer to the object that owns
 * the list item.  In the scheduler this is normally a task control block.
 * The pxOwner parameter effectively creates a two way link between the list 
 * item and its owner.
 *
 * @param pxList The list from which the next item owner is to be returned.
 *
 * \page listGET_OWNER_OF_NEXT_ENTRY listGET_OWNER_OF_NEXT_ENTRY
 * \ingroup LinkedList
 * <HR>
 */
#define listGET_OWNER_OF_NEXT_ENTRY( pxTCB, pxList )									\
{																						\
	/* Increment the index to the next item and return the item, ensuring */			\
	/* we don't return the marker used at the end of the list.  */						\
																						\
	( pxList )->pxIndex = ( pxList )->pxIndex->pxNext;									\
	if( ( pxList )->pxIndex == ( pxList )->pxHead )										\
	{																					\
		( pxList )->pxIndex = ( pxList )->pxIndex->pxNext;								\
	}																					\
	pxTCB = ( volatile tskTCB * ) ( pxList )->pxIndex->pvOwner;							\
}

/*
 * Access function to obtain the owner of the first entry in a list.  Lists
 * are normally sorted in ascending item value order.
 *
 * This function returns the pxOwner member of the first item in the list.
 * The pxOwner parameter of a list item is a pointer to the object that owns
 * the list item.  In the scheduler this is normally a task control block.
 * The pxOwner parameter effectively creates a two way link between the list
 * item and its owner.
 *
 * @param pxList The list from which the owner of the head item is to be
 * returned.
 *
 * \page listGET_OWNER_OF_HEAD_ENTRY listGET_OWNER_OF_HEAD_ENTRY
 * \ingroup LinkedList
 * <HR>
 */
#define listGET_OWNER_OF_HEAD_ENTRY( pxList )  ( ( pxList->uxNumberOfItems != ( unsigned portBASE_TYPE ) 0 ) ? ( pxList->pxHead->pxNext->pvOwner ) : ( NULL ) )

/*
 * Check to see if a list item is within a list.  The list item maintains a
 * "container" pointer that points to the list it is in.  All this macro does
 * is check to see if the container and the list match.
 *
 * @param pxList The list we want to know if the list item is within.
 * @param pxListItem The list item we want to know if is in the list.
 * @return pdTRUE is the list item is in the list, otherwise pdFALSE.
 * pointer against
 */
#define listIS_CONTAINED_WITHIN( pxList, pxListItem ) ( ( pxListItem )->pvContainer == ( void * ) pxList )

/*
 * Must be called before a list is used!  This initialises all the members
 * of the list structure and inserts the xListEnd item into the list as a
 * marker to the back of the list.
 *
 * @param pxList Pointer to the list being initialised.
 *
 * \page vListInitialise vListInitialise
 * \ingroup LinkedList
 * <HR>
 */
void vListInitialise( xList *pxList );

/*
 * Must be called before a list item is used.  This sets the list container to
 * null so the item does not think that it is already contained in a list.
 *
 * @param pxItem Pointer to the list item being initialised.
 *
 * \page vListInitialiseItem vListInitialiseItem
 * \ingroup LinkedList
 * <HR>
 */
void vListInitialiseItem( xListItem *pxItem );

/*
 * Insert a list item into a list.  The item will be inserted into the list in
 * a position determined by its item value (descending item value order).
 *
 * @param pxList The list into which the item is to be inserted.
 *
 * @param pxNewListItem The item to that is to be placed in the list.
 *
 * \page vListInsert vListInsert
 * \ingroup LinkedList
 * <HR>
 */
void vListInsert( xList *pxList, xListItem *pxNewListItem );

/*
 * Insert a list item into a list.  The item will be inserted in a position
 * such that it will be the last item within the list returned by multiple
 * calls to listGET_OWNER_OF_NEXT_ENTRY.
 *
 * The list member pvIndex is used to walk through a list.  Calling 
 * listGET_OWNER_OF_NEXT_ENTRY increments pvIndex to the next item in the list.
 * Placing an item in a list using vListInsertEnd effectively places the item
 * in the list position pointed to by pvIndex.  This means that every other
 * item within the list will be returned by listGET_OWNER_OF_NEXT_ENTRY before
 * the pvIndex parameter again points to the item being inserted.
 *
 * @param pxList The list into which the item is to be inserted.
 *
 * @param pxNewListItem The list item to be inserted into the list.
 *
 * \page vListInsertEnd vListInsertEnd
 * \ingroup LinkedList
 * <HR>
 */
void vListInsertEnd( xList *pxList, xListItem *pxNewListItem );

/*
 * Remove an item from a list.  The list item has a pointer to the list that
 * it is in, so only the list item need be passed into the function.
 *
 * @param vListRemove The item to be removed.  The item will remove itself from
 * the list pointed to by it's pxContainer parameter.
 *
 * \page vListRemove vListRemove
 * \ingroup LinkedList
 * <HR>
 */
void vListRemove( xListItem *pxItemToRemove );



#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产激情av| 欧美日本乱大交xxxxx| 精品国产伦一区二区三区观看体验| 亚洲高清视频的网址| 精品视频一区二区三区免费| 性欧美大战久久久久久久久| 欧美日韩aaa| 极品销魂美女一区二区三区| 国产欧美一区二区三区网站| 91网站在线观看视频| 亚洲一线二线三线久久久| 欧美日韩在线精品一区二区三区激情| 亚洲超碰97人人做人人爱| 欧美tickling挠脚心丨vk| 国产福利精品一区二区| 国产精品久久久久三级| 精品视频在线免费观看| 久久97超碰国产精品超碰| 国产精品入口麻豆原神| 欧美日韩在线播放三区| 国产在线精品一区二区不卡了 | 色先锋资源久久综合| 亚洲综合偷拍欧美一区色| 欧美日产在线观看| 国产成人精品一区二区三区网站观看| 亚洲码国产岛国毛片在线| 欧美欧美午夜aⅴ在线观看| 国产乱子伦一区二区三区国色天香 | 亚洲午夜在线电影| 久久这里只有精品6| 91首页免费视频| 午夜激情久久久| 国产三级精品视频| 欧美日韩国产天堂| 国产69精品久久久久毛片| 亚洲福利视频导航| 中文在线一区二区| 91精品国产乱| 91蜜桃网址入口| 激情五月婷婷综合| 亚洲午夜激情网页| 国产精品国模大尺度视频| 91精品免费观看| 97aⅴ精品视频一二三区| 久久激情综合网| 亚洲成人自拍偷拍| 中文字幕一区二区三| 精品国产乱码久久久久久闺蜜| 色偷偷一区二区三区| 国产成+人+日韩+欧美+亚洲| 日韩精品视频网站| 亚洲欧美日韩精品久久久久| 久久―日本道色综合久久| 欧美高清dvd| 91福利在线免费观看| 成熟亚洲日本毛茸茸凸凹| 青青草91视频| 丝袜亚洲精品中文字幕一区| 亚洲乱码精品一二三四区日韩在线| 久久综合九色综合97婷婷| 欧美一区二区三区在线观看视频| 91最新地址在线播放| 盗摄精品av一区二区三区| 精品一区二区在线免费观看| 日本欧美一区二区三区乱码| 五月婷婷激情综合| 亚洲国产乱码最新视频| 亚洲一区二区在线观看视频| 日韩理论片网站| 日韩理论电影院| 国产精品一区三区| 久久成人av少妇免费| 蜜臀99久久精品久久久久久软件| 偷拍亚洲欧洲综合| 色欧美88888久久久久久影院| 国产三级一区二区| 欧美三区免费完整视频在线观看| 麻豆久久久久久| 欧美经典一区二区| 欧美精品在线观看播放| 国产乱子轮精品视频| 国产精品一卡二卡| 韩国一区二区三区| 一区二区视频在线| 一区二区三区蜜桃网| 一区二区三区四区av| 亚洲一区在线免费观看| 天天操天天干天天综合网| 香蕉久久一区二区不卡无毒影院 | 在线欧美日韩精品| 欧美在线观看一区| 欧美美女激情18p| 欧美一区在线视频| 欧美变态凌虐bdsm| 国产日韩成人精品| 亚洲三级在线观看| 午夜亚洲福利老司机| 蜜桃视频一区二区三区在线观看| 国产一区二区三区av电影| 国产高清在线观看免费不卡| av一区二区三区黑人| 精品视频1区2区| 日韩视频免费观看高清在线视频| 夜夜揉揉日日人人青青一国产精品| 一区二区三区四区精品在线视频| 午夜av一区二区| 国产美女精品一区二区三区| 99久久精品国产一区二区三区 | 丝袜脚交一区二区| 国产毛片精品一区| 91福利在线看| 欧美精品一区二区三区蜜桃视频| 国产精品三级久久久久三级| 婷婷中文字幕一区三区| 国产一区二区三区四区五区入口| av电影一区二区| 欧美一区二区三区啪啪| 中文字幕高清不卡| 亚洲大尺度视频在线观看| 国产美女一区二区三区| 91福利视频久久久久| 精品国产乱码久久久久久闺蜜| 亚洲精品你懂的| 国产一区二区三区久久久| 色999日韩国产欧美一区二区| 欧美va亚洲va| 亚洲一区二区欧美| 粉嫩一区二区三区性色av| 欧美人狂配大交3d怪物一区| 国产精品网曝门| 奇米色一区二区三区四区| 92国产精品观看| 久久精品夜夜夜夜久久| 午夜久久福利影院| 色网站国产精品| 国产欧美日韩三级| 久久国产乱子精品免费女| 欧美在线免费播放| 亚洲欧洲日产国码二区| 经典三级在线一区| 在线综合+亚洲+欧美中文字幕| 亚洲免费色视频| 高清不卡一区二区在线| 日韩欧美成人激情| 亚洲成a人在线观看| 91美女视频网站| 国产精品欧美综合在线| 国产一区二区三区黄视频 | 国产精品美女一区二区三区 | 国产精品77777| 精品国产91乱码一区二区三区 | 亚洲视频在线观看一区| 韩国视频一区二区| 67194成人在线观看| 亚洲一区二区三区中文字幕在线| 成人18精品视频| 国产亚洲一区二区三区| 激情丁香综合五月| 日韩欧美色综合网站| 日本不卡一区二区三区高清视频| 欧美性生活影院| 一级女性全黄久久生活片免费| 91麻豆文化传媒在线观看| 国产精品对白交换视频 | 国产在线一区二区| 欧美mv日韩mv亚洲| 久久99国产精品久久99果冻传媒| 日韩欧美国产成人一区二区| 日本中文在线一区| 日韩一级高清毛片| 老司机精品视频导航| 久久影音资源网| 欧美成人国产一区二区| 美女视频第一区二区三区免费观看网站| 欧美人成免费网站| 免费看欧美女人艹b| 日韩女优av电影在线观看| 狠狠色狠狠色综合系列| 久久毛片高清国产| 成人爱爱电影网址| 亚洲欧美偷拍三级| 欧美色综合网站| 日本欧美加勒比视频| 精品国产三级a在线观看| 国产福利一区二区三区| 亚洲欧洲精品天堂一级| 欧美日韩亚洲高清一区二区| 日韩成人午夜电影| 久久综合久久综合亚洲| 波多野结衣中文字幕一区二区三区| 中文字幕中文字幕一区| 欧美体内she精高潮| 蜜桃久久精品一区二区| 国产色爱av资源综合区| 色域天天综合网| 七七婷婷婷婷精品国产| 国产视频在线观看一区二区三区| 91丨porny丨户外露出| 日韩精品国产精品| 国产三级精品三级在线专区|