some questions and bugs about the super core:

doclzs doclzs at 163.com
Mon Feb 23 04:15:12 UTC 2004


Hi, here are some questions i have not understood
well:

(1)address.inl

RTEMS_INLINE_ROUTINE unsigned32 _Addresses_Subtract (
  void *left,
  void *right
)
{
  return ((char *) left - (char *) right);
}

RTEMS_INLINE_ROUTINE boolean _Addresses_Is_in_range (
  void *address,
  void *base,
  void *limit
)
{
  return ( address >= base && address <= limit );
}

question: 
in function "_Addresses_Subtract",the address
is converted into type (char*) but in function
"_Addresses_Is_in_range" not. why?

(2)bitfield.h

#define _Bitfield_Find_first_bit( _value, _bit_number ) \
  { \
    register unsigned32 __value = (unsigned32) (_value); \
    register const unsigned char *__p = __log2table; \
    \
    if ( __value < 0x100 ) \
      (_bit_number) = __p[ __value ] + 8; \
    else \
      (_bit_number) = __p[ __value >> 8 ]; \
  }

bug: 
register unsigned32 __value = (unsigned32) (_value); \
i think should be
register unsigned16 __value = (unsigned16) (_value); 

(3)coremsg.h

typedef struct {
    unsigned32  size;
    unsigned32  buffer[1];
} CORE_message_queue_Buffer;

question:
typedef struct {
    unsigned32  size;
    unsigned32  *buffer;
} CORE_message_queue_Buffer;
is it right?

(4)heapallocate.c

...
if ( size >= (-1 - HEAP_BLOCK_USED_OVERHEAD) )
    return( NULL );
excess   = size % the_heap->page_size;
the_size = size + the_heap->page_size + HEAP_BLOCK_USED_OVERHEAD;
...

bug:
"size >= (-1 - HEAP_BLOCK_USED_OVERHEAD)",it is sure,right?
"the_size = size + the_heap->page_size + HEAP_BLOCK_USED_OVERHEAD",
i think it should be
"the_size = size + HEAP_BLOCK_USED_OVERHEAD"

(5)heapfree.c  line 55

next_block = _Heap_Block_at( the_block, the_size );

bug:
it should be

next_block = _Heap_Next_block( the_block );

(6)priority.h  line 61

SCORE_EXTERN Priority_Bit_map_control 
               _Priority_Bit_map[16] CPU_STRUCTURE_ALIGNMENT;

bug:
it should be

SCORE_EXTERN Priority_Bit_map_control _Priority_Bit_map[16];

(7)

the control block used to manage each watchdog timer
as follows:

typedef struct {
  Chain_Node                      Node;
  Watchdog_States                 state;
  Watchdog_Interval               initial;
  Watchdog_Interval               delta_interval;
  Watchdog_Interval               start_time;
  Watchdog_Interval               stop_time;
  Watchdog_Service_routine_entry  routine;
  Objects_Id                      id;
  void                           *user_data;
}   Watchdog_Control;

question:
what is meaning of the variable "initial",
"delta_interval", "start_time" and "stop_time"?
what is the relation between
a watchdog's position on the chain and
the variable "delta_interval"?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
网易VIP收费邮箱两周年超值优惠! 满1赠6!!           http://vip.163.com

中国最大的免费邮箱在等你 25兆空间4兆附件!      http://mail.163.com

点击网易泡泡惊喜无限 全免费手机短信任你发!      http://popo.163.com


More information about the users mailing list