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

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

?? list.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.
	***************************************************************************
*/

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


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

struct xMINI_LIST_ITEM
{
	portTickType xItemValue;
	volatile struct xLIST_ITEM *pxNext;
	volatile struct xLIST_ITEM *pxPrevious;
};
typedef struct xMINI_LIST_ITEM xMiniListItem;

/*
 * Definition of the type of queue used by the scheduler.
 */
typedef struct xLIST
{
	volatile unsigned portBASE_TYPE uxNumberOfItems;
	volatile xListItem * pxIndex;			/*< Used to walk through the list.  Points to the last item returned by a call to pvListGetOwnerOfNextEntry (). */
	volatile xMiniListItem 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
 */
#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
 */
#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
 */
#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
 */
#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
 */
#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 == ( xListItem * ) &( ( pxList )->xListEnd ) )				\
	{																					\
		( pxList )->pxIndex = ( pxList )->pxIndex->pxNext;								\
	}																					\
	pxTCB = ( 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
 */
#define listGET_OWNER_OF_HEAD_ENTRY( pxList )  ( ( pxList->uxNumberOfItems != ( unsigned portBASE_TYPE ) 0 ) ? ( (&( pxList->xListEnd ))->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
 */
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
 */
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
 */
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
 */
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
 */
void vListRemove( xListItem *pxItemToRemove );



#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区三区视频在线| 99re热这里只有精品免费视频| 国产欧美一区二区精品秋霞影院| 欧美日韩三级在线| 色噜噜狠狠成人网p站| 一本大道久久a久久精品综合| 国产jizzjizz一区二区| 成人综合婷婷国产精品久久蜜臀 | 免费看欧美女人艹b| 亚洲女同女同女同女同女同69| 国产精品入口麻豆九色| 国产精品国产馆在线真实露脸| 国产精品久久夜| 一区二区三区四区激情| 性欧美大战久久久久久久久| 午夜精品久久久久久| 蜜桃av一区二区三区| 激情文学综合插| 粉嫩一区二区三区在线看| 不卡的av中国片| 欧美亚洲综合久久| 日韩欧美123| 久久精品免费在线观看| 国产精品三级av在线播放| 亚洲永久免费视频| 国内精品免费**视频| yourporn久久国产精品| 欧美视频一区二区| 精品88久久久久88久久久| 国产精品日韩成人| 日韩精品成人一区二区在线| 国产高清在线观看免费不卡| 色哦色哦哦色天天综合| 日韩午夜在线观看视频| 国产精品国产a级| 日韩精品一卡二卡三卡四卡无卡 | 久久美女艺术照精彩视频福利播放| 国产日韩精品一区二区浪潮av| 一区二区久久久| 激情丁香综合五月| 欧美中文字幕一区二区三区亚洲| 欧美一级久久久久久久大片| 日韩一区在线看| 九九久久精品视频| 欧美色区777第一页| 欧美激情综合在线| 五月天一区二区三区| 不卡欧美aaaaa| 日韩午夜激情av| 亚洲中国最大av网站| 成人免费看片app下载| 777午夜精品视频在线播放| 亚洲欧洲日本在线| 精品无码三级在线观看视频| 欧美人妇做爰xxxⅹ性高电影| 国产精品欧美一区喷水| 国产资源在线一区| 欧美一区二区视频在线观看| 亚洲男人的天堂在线aⅴ视频| 狠狠狠色丁香婷婷综合激情| 91精品婷婷国产综合久久性色| 中文字幕一区二区三区av| 国产盗摄精品一区二区三区在线| 欧美片在线播放| 亚洲一区二区三区爽爽爽爽爽| 成人美女视频在线观看18| 久久久噜噜噜久久中文字幕色伊伊| 亚洲成av人**亚洲成av**| 99视频在线观看一区三区| 国产欧美一区二区精品性色| 久久精品国产在热久久| 欧美一卡二卡三卡四卡| 香蕉av福利精品导航 | 日日骚欧美日韩| 欧美亚日韩国产aⅴ精品中极品| 中文字幕av一区二区三区免费看| 国产一区二区三区不卡在线观看 | 国产日韩亚洲欧美综合| 日韩国产欧美在线观看| 欧美色倩网站大全免费| 亚洲成人一区在线| 欧美日韩国产成人在线免费| 亚洲成人资源在线| 91精品国产福利在线观看| 免费久久精品视频| 日韩免费视频一区| 国产在线播精品第三| 久久久精品人体av艺术| 成人av网站在线观看| 最新热久久免费视频| 在线精品视频免费播放| 一区二区在线免费观看| 欧美电影在线免费观看| 蜜臀av一区二区三区| 精品av综合导航| 成人国产精品免费网站| 亚洲免费视频中文字幕| 欧美在线不卡视频| 麻豆一区二区三区| 欧美韩国日本综合| 在线精品视频一区二区三四 | 7777精品久久久大香线蕉| 日本在线不卡一区| 26uuu精品一区二区三区四区在线| 国产毛片精品国产一区二区三区| 中文字幕第一区| 欧美视频一区二区三区四区 | 久久久久国产精品厨房| a亚洲天堂av| 亚洲成人免费av| 国产调教视频一区| 欧美性xxxxxx少妇| 国产精品中文字幕欧美| 一区二区三区毛片| 久久一区二区三区国产精品| 97精品国产露脸对白| 日本大胆欧美人术艺术动态| 亚洲国产电影在线观看| 欧美日韩一区三区| 成人精品视频一区二区三区 | 国产毛片一区二区| 亚洲福利一二三区| 亚洲国产精品99久久久久久久久| 欧美在线不卡一区| 高清国产一区二区三区| 老汉av免费一区二区三区| 亚洲欧洲日韩av| 国产色91在线| 精品国产91亚洲一区二区三区婷婷| 成人av片在线观看| 国产精品99久久久久久似苏梦涵| 亚洲成人免费观看| 亚洲综合清纯丝袜自拍| 国产三级欧美三级| 91精品国产高清一区二区三区| 色综合天天综合网天天看片| 国产高清亚洲一区| 精品一区二区三区不卡| 日日夜夜精品免费视频| 有坂深雪av一区二区精品| 欧美激情一区在线| 国产日韩欧美高清在线| 精品欧美一区二区三区精品久久| 9191久久久久久久久久久| 色哟哟一区二区| 91一区二区在线观看| 成人av集中营| 波多野结衣在线一区| 国产69精品久久久久777| 国产在线精品一区二区| 蜜桃久久久久久| 免费成人在线视频观看| 蜜臀久久99精品久久久久久9| 亚洲专区一二三| 亚洲成在人线免费| 青草av.久久免费一区| 蜜臀av性久久久久蜜臀aⅴ流畅| 亚洲成人精品一区二区| 午夜精品久久久久久久久| 天使萌一区二区三区免费观看| 午夜影院在线观看欧美| 免费在线观看成人| 久久成人免费网站| 国产999精品久久| 91在线观看美女| 欧美性大战久久久久久久蜜臀 | 激情久久五月天| 国产精品白丝jk黑袜喷水| 国产夫妻精品视频| 成人免费电影视频| 欧美午夜寂寞影院| 日韩欧美专区在线| 中文字幕va一区二区三区| 亚洲精品伦理在线| 亚洲风情在线资源站| 免费成人在线网站| 国产盗摄精品一区二区三区在线| 91在线播放网址| 日韩欧美在线不卡| 中文字幕一区二区三区四区不卡 | 有坂深雪av一区二区精品| 日韩中文字幕不卡| 国产一区视频导航| 色综合天天综合狠狠| 欧美高清视频一二三区 | 亚洲丝袜精品丝袜在线| 亚洲成va人在线观看| 国产米奇在线777精品观看| 95精品视频在线| 欧美成人综合网站| 亚洲黄色性网站| 国产黄色91视频| 在线成人免费观看| 成人免费在线观看入口| 日韩国产高清影视| av在线播放一区二区三区| 欧美精品亚洲一区二区在线播放| 久久日韩精品一区二区五区| 一区二区三区产品免费精品久久75| 免费成人深夜小野草|