⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chain.h

📁 开放源码的嵌入式开发环境
💻 H
字号:
/** *  @file  rtems/score/chain.h * *  This include file contains all the constants and structures associated *  with the Doubly-Linked Chain Handler. *//* *  COPYRIGHT (c) 1989-2006. *  On-Line Applications Research Corporation (OAR). * *  The license and distribution terms for this file may be *  found in the file LICENSE in this distribution or at *  http://www.rtems.com/license/LICENSE. * *  $Id: chain.h,v 1.20 2006/01/16 15:13:58 joel Exp $ */#ifndef _RTEMS_SCORE_CHAIN_H#define _RTEMS_SCORE_CHAIN_H/** *  @defgroup ScoreChain Chain Handler * *  The Chain Handler is used to manage sets of entities.  This handler *  provides two data structures.  The Chain Node data structure is included *  as the first part of every data structure that will be placed on *  a chain.  The second data structure is Chain Control which is used *  to manage a set of Chain Nodes. *//**@{*/#ifdef __cplusplusextern "C" {#endif#include <rtems/score/address.h>/** *  @typedef Chain_Node * *  This type definition promotes the name for the Chain Node used by *  all RTEMS code.  It is a separate type definition because a forward *  reference is required to define it.  See @ref Chain_Node_struct for *  detailed information. */typedef struct Chain_Node_struct Chain_Node;/** *  @struct Chain_Node_struct * *  This is used to manage each element (node) which is placed *  on a chain. * *  @note Typically, a more complicated structure will use the *        chain package.  The more complicated structure will *        include a chain node as the first element in its *        control structure.  It will then call the chain package *        with a pointer to that node element.  The node pointer *        and the higher level structure start at the same address *        so the user can cast the pointers back and forth. * */struct Chain_Node_struct {  /** This points to the node after to this one on this chain. */  Chain_Node *next;  /** This points to the node immediate prior to this one on this chain. */  Chain_Node *previous;};/** *  @struct Chain_Control * * This is used to manage a chain.  A chain consists of a doubly * linked list of zero or more nodes. * * @note This implementation does not require special checks for *   manipulating the first and last elements on the chain. *   To accomplish this the @a Chain_Control structure is *   treated as two overlapping @ref Chain_Node structures. *   The permanent head of the chain overlays a node structure on the *   @a first and @a permanent_null fields.  The permanent tail *   of the chain overlays a node structure on the *   @a permanent_null and @a last elements of the structure. * */typedef struct {  /** This points to the first node on this chain. */  Chain_Node *first;  /** This field is always 0. */  Chain_Node *permanent_null;  /** This points to the last node on this chain. */  Chain_Node *last;} Chain_Control;/** *  @brief Initialize a Chain Header * *  This routine initializes @a the_chain structure to manage the *  contiguous array of @a number_nodes nodes which starts at *  @a starting_address.  Each node is of @a node_size bytes. * *  @param[in] the_chain specifies the chain to initialize *  @param[in] starting_address is the starting address of the array *         of elements *  @param[in] number_nodes is the numebr of nodes that will be in the chain *  @param[in] node_size is the size of each node */void _Chain_Initialize(  Chain_Control *the_chain,  void          *starting_address,  uint32_t       number_nodes,  uint32_t       node_size);#ifndef RTEMS_INLINES/** *  @brief Get the first node (do not disable interrupts) * *  This method attempts to obtain the first node from @a the_chain. * *  @param[in] the_chain points to the chain to operate upon *  @return If successful, a chain node is returned.  Otherwise, NULL *  is returned. */Chain_Node *_Chain_Get_first_unprotected(  Chain_Control *the_chain);#endif/** *  @brief Extract the specified node from a chain * *  This routine extracts @a the_node from the chain on which it resides. *  It disables interrupts to ensure the atomicity of the *  extract operation. * *  @arg the_node specifies the node to extract */void _Chain_Extract(  Chain_Node *the_node);/** *  @brief Obtain the first node on a chain * *  This function removes the first node from @a the_chain and returns *  a pointer to that node.  If @a the_chain is empty, then NULL is returned. * *  @return This method returns a pointer a node.  If a node was removed, *          then a pointer to that node is returned.  If @a the_chain was *          empty, then NULL is returned. * *  @note It disables interrupts to ensure the atomicity of the get operation. */Chain_Node *_Chain_Get(  Chain_Control *the_chain);/** *  @brief Insert a node on a chain * *  This routine inserts @a the_node on a chain immediately following *  @a after_node.   * *  @note It disables interrupts to ensure the atomicity *  of the extract operation. */void _Chain_Insert(  Chain_Node *after_node,  Chain_Node *the_node);/** *  @brief Append a node on the end of a chain * *  This routine appends @a the_node onto the end of @a the_chain. * *  @note It disables interrupts to ensure the atomicity of the *  append operation. */void _Chain_Append(  Chain_Control *the_chain,  Chain_Node    *the_node);#ifndef __RTEMS_APPLICATION__#include <rtems/score/chain.inl>#endif#ifdef __cplusplus}#endif/**@}*/#endif/* end of include file */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -