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

📄 priority.inl

📁 开放源码的嵌入式开发环境
💻 INL
字号:
/**  *  @file  rtems/score/priority.inl * *  This file contains the static inline implementation of all inlined *  routines in the Priority Handler. *//* *  COPYRIGHT (c) 1989-2004. *  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: priority.inl,v 1.18 2005/02/21 07:53:52 ralf Exp $ */#ifndef _RTEMS_SCORE_PRIORITY_INL#define _RTEMS_SCORE_PRIORITY_INL/** *  @addtogroup ScorePriority  *  @{ */#include <rtems/score/bitfield.h>/** *  This routine performs the initialization necessary for this handler. */RTEMS_INLINE_ROUTINE void _Priority_Handler_initialization( void ){  uint32_t   index;  _Priority_Major_bit_map = 0;  for ( index=0 ; index <16 ; index++ )     _Priority_Bit_map[ index ] = 0;}/** *  This function returns TRUE if the_priority if valid for a *  user task, and FALSE otherwise. */RTEMS_INLINE_ROUTINE boolean _Priority_Is_valid (  Priority_Control the_priority){  /*    *  Since PRIORITY_MINIMUM is 0 and priorities are stored unsigned,   *  then checking for less than 0 is unnecessary.   */  return ( the_priority <= PRIORITY_MAXIMUM );}/** *  This function returns the major portion of the_priority. */RTEMS_INLINE_ROUTINE uint32_t   _Priority_Major (  Priority_Control the_priority){  return ( the_priority / 16 );}/** *  This function returns the minor portion of the_priority. */RTEMS_INLINE_ROUTINE uint32_t   _Priority_Minor (  Priority_Control the_priority){  return ( the_priority % 16 );}#if ( CPU_USE_GENERIC_BITFIELD_CODE == TRUE ) /** *  This function returns the mask associated with the major or minor *  number passed to it. */ RTEMS_INLINE_ROUTINE uint32_t   _Priority_Mask (  uint32_t   bit_number){  return (0x8000 >> bit_number);}  /** *  This function translates the bit numbers returned by the bit scan *  of a priority bit field into something suitable for use as *  a major or minor component of a priority. */ RTEMS_INLINE_ROUTINE uint32_t   _Priority_Bits_index (  uint32_t   bit_number){  return bit_number;}#endif/** *  This routine uses the_priority_map to update the priority *  bit maps to indicate that a thread has been readied. */RTEMS_INLINE_ROUTINE void _Priority_Add_to_bit_map (  Priority_Information *the_priority_map){  *the_priority_map->minor |= the_priority_map->ready_minor;  _Priority_Major_bit_map  |= the_priority_map->ready_major;}/** *  This routine uses the_priority_map to update the priority *  bit maps to indicate that a thread has been removed from the *  ready state. */RTEMS_INLINE_ROUTINE void _Priority_Remove_from_bit_map (  Priority_Information *the_priority_map){  *the_priority_map->minor &= the_priority_map->block_minor;  if ( *the_priority_map->minor == 0 )    _Priority_Major_bit_map &= the_priority_map->block_major;}/** *  This function returns the priority of the highest priority *  ready thread. */RTEMS_INLINE_ROUTINE Priority_Control _Priority_Get_highest( void ){  Priority_Bit_map_control minor;  Priority_Bit_map_control major;  _Bitfield_Find_first_bit( _Priority_Major_bit_map, major );  _Bitfield_Find_first_bit( _Priority_Bit_map[major], minor );  return (_Priority_Bits_index( major ) << 4) +          _Priority_Bits_index( minor );}/** *  This routine initializes the_priority_map so that it *  contains the information necessary to manage a thread *  at new_priority. */RTEMS_INLINE_ROUTINE void _Priority_Initialize_information(  Priority_Information *the_priority_map,  Priority_Control      new_priority){  Priority_Bit_map_control major;  Priority_Bit_map_control minor;  Priority_Bit_map_control mask;  major = _Priority_Major( new_priority );  minor = _Priority_Minor( new_priority );  the_priority_map->minor =    &_Priority_Bit_map[ _Priority_Bits_index(major) ];  mask = _Priority_Mask( major );  the_priority_map->ready_major = mask;  the_priority_map->block_major = ~mask;  mask = _Priority_Mask( minor );  the_priority_map->ready_minor = mask;  the_priority_map->block_minor = ~mask;}/** *  This function returns TRUE if the priority GROUP is empty, and *  FALSE otherwise. */RTEMS_INLINE_ROUTINE boolean _Priority_Is_group_empty (  Priority_Control      the_priority){  return the_priority == 0;}/**@}*/#endif/* end of include file */

⌨️ 快捷键说明

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