Subject:
|
Re: anyone know how to check free space on RCX?
|
Newsgroups:
|
lugnet.robotics.rcx.legos
|
Date:
|
Thu, 11 Jul 2002 19:34:00 GMT
|
Viewed:
|
2332 times
|
| |
| |
That is very interesting Jason. It is interesting that mm_free_mem()
returns a 16bit value using a 32bit return code. Both int and long are
32bit value on most computers/compilers these days; short would be a 16bit
value; and char would be an 8bit value. Maybe mm_free_mem() should return
an unsigned short instead.
I have used lcd_int and cputw to display 32bit values (although I am not
sure if lcd_int displays the value in hex or dec. I may be wrong about it
displaying hex). So lcd_int is looking only at the first word, whereas
cputw is looking at the second word.
Thank you for pointing this out! I guess the next step is to check the
instruction timing for using 16bit values vs 32bit values. If the
instruction timing is roughly the same, it may be worth updating some of the
code to use unsigned short instead of int or unsigned int. On the other
hand, if a new RCX is released with more memory, we could run into problems.
// Joe
"Jason Clark" <yankeejason@comcast.net> wrote in message
news:Gz3GIL.C9q@lugnet.com...
> While the declaration for mm_free_mem is
> int mm_free_mem(void)
> The fact is that the RCX has only 32K of memory available. 32K in hex is
> 0x8000... there's never a need for more than 4 digits in hex. Looking at
> key_handler() in kernel/program.c (the system key handler), the code for
> displaying free memory is (kernel v0.2.6, no patches):
>
> /*
> * pressing the "view" button cycles through a display of the
> * amount of the amount of free memory (in decimal and
> * hexadecimal) and battery power. If a button other than "view"
> * is pressed while cycling through, we handle that button
> * ("goto gotkey").
> */
> cputs("free");
> if ((c = getchar()) != KEY_VIEW) goto gotkey;
> lcd_int(mm_free_mem());
> if ((c = getchar()) != KEY_VIEW) goto gotkey;
> cputw(mm_free_mem());
> if ((c = getchar()) != KEY_VIEW) goto gotkey;
>
>
> The first call to mm_free_mem() is displayed as an integer via lcd_int(),
> the second call is displayed as a hexword via cputw(). The two values are
> the same... mm_free_mem() is just being called twice.
>
> -Jason
>
>
>
> In lugnet.robotics.rcx.legos, Joseph Woolley writes:
> > Albert Huang,
> >
> > Sorry for the confusion. "most significant" = upper 16 bits and "least
> > significant" = lower 16 bits (the free memory is a 32 bit value).
> >
> > If you write the values out, you will get the 32 bit value (both values are
> > hex) ... for example:
> >
> > 999C + 54A0 = 999C54A0
> >
> > // Joe
> >
> > "Albert Huang" wrote
> > > Joseph,
> > >
> > > what do you mean by most significant / least significant? I'm under the
> > > impression that those two calls just display the same value, in decimal
> > > first and then in hex.
> > >
> > > Cheers,
> > > Albert
> > >
> > >
|
|
Message has 2 Replies:
Message is in Reply To:
13 Messages in This Thread:
- Entire Thread on One Page:
- Nested:
All | Brief | Compact | Dots
Linear:
All | Brief | Compact
This Message and its Replies on One Page:
- Nested:
All | Brief | Compact | Dots
Linear:
All | Brief | Compact
|
|
|
|