Thanks for the suggestion. I downloaded the NXJ code and had it
compiling with my code in a couple minutes - a testament to the
modularity of the code you folks have written :)

Unfortunately I'm having the same error, but with slightly different
symptoms. Here is the same chunk of code, but with slightly better
descriptive printfs. (1), (2), etc have been added in this e-mail to aid
in description.

(1)  printf( "StackFrameArray: %ld IsArray: %d StackArray: %ld IsArray:
%d\n", 
                thread->stackFrameArray,
is_array(word2obj(thread->stackFrameArray)), 
                thread->stackArray,
is_array(word2obj(thread->stackArray) ) );
  
  // Allocate space for stack frames.
  thread->stackFrameArray = ptr2word (new_primitive_array (T_STACKFRAME,
INITIAL_STACK_FRAMES));
  if (thread->stackFrameArray == JNULL)
    return false;
(2)  printf( "StackFrameArray: %ld IsArray: %d StackArray: %ld IsArray:
%d\n", 
                thread->stackFrameArray,
is_array(word2obj(thread->stackFrameArray)), 
                thread->stackArray,
is_array(word2obj(thread->stackArray) ) );
                    
  // Allocate actual stack storage (INITIAL_STACK_SIZE * 4 bytes)
  thread->stackArray = ptr2word (new_primitive_array (T_INT,
INITIAL_STACK_SIZE));
(3)  printf( "StackFrameArray: %ld IsArray: %d StackArray: %ld IsArray:
%d\n", 
                thread->stackFrameArray,
is_array(word2obj(thread->stackFrameArray)), 
                thread->stackArray,
is_array(word2obj(thread->stackArray) ) );
                
(4)     printf( "StackFrameArray: %ld IsArray: %d StackArray: %ld
IsArray: %d\n", 
                thread->stackFrameArray,
is_array(word2obj(thread->stackFrameArray)), 
                thread->stackArray,
is_array(word2obj(thread->stackArray) ) );
                
  if (thread->stackArray == JNULL)
  {
    free_array (ref2obj(thread->stackFrameArray));
    thread->stackFrameArray = JNULL;
    return false;    
  }
  
  gThreadCounter++;
  
  #ifdef VERIFY
(5)  assert (is_array (word2obj (thread->stackFrameArray)), THREADS0);
  assert (is_array (word2obj (thread->stackArray)), THREADS1);
  #endif 

(1) Displays "StackFrameArray: 0 IsArray: 0 StackArray: 0 IsArray: 0" as
you would expect.
(2) Displays "StackFrameArray: 33650490 IsArray: 1 StackArray: 0
IsArray: 0", again, looks good.
(3) Displays "StackFrameArray: 2000290305 IsArray: 0 StackArray:
33650446 IsArray: 1". Here is where problems start. StackFrameArray has
changed without being touched at all. StackArray looks good however.
(4) Displays "StackFrameArray: 2000290305 IsArray: 0 StackArray:
1997406721 IsArray: 0". Just one line later StackArray has gone awry.
StackFrameArray displays the same number it did at the start.
(5) Execution dies here with assertion violation 20 as it should.

How it differs from the RCX code is that at (4), StackArray would
display correctly, and would have IsArray=1. Now the pointers are
changing consistently at least :).

Any advice would be appreciated. In my normal world of Java and C#,
pointers don't just change from line to line unless there is a thread
race condition. :)

Thanks,
Craig


-----Original Message-----
From: Lawrie Griffiths [mailto:[EMAIL PROTECTED] 
Sent: 2007-Jun-26 9:39 AM
To: Fleming, Craig; [email protected]
Subject: Re: [Lejos-discussion] Compiling Lejos for the Nintendo DS

The NXT version of the VM has some fixes for alignment problems on the
ARM chip. What chip is the Nintendo DS?

Lawrie

----- Original Message -----
From: "Fleming, Craig" <[EMAIL PROTECTED]>
To: "Lawrie Griffiths" <[EMAIL PROTECTED]>;
<[email protected]>
Sent: Tuesday, June 26, 2007 4:17 PM
Subject: Re: [Lejos-discussion] Compiling Lejos for the Nintendo DS


> I'm currently using the RCX code because that was the first thing I 
> downloaded. Is there an important difference?
>
> -----Original Message-----
> From: Lawrie Griffiths [mailto:[EMAIL PROTECTED]
> Sent: 2007-Jun-26 8:16 AM
> To: Fleming, Craig; [email protected]
> Subject: Re: [Lejos-discussion] Compiling Lejos for the Nintendo DS
>
> Craig,
>
> Are you using the RCX code or the NXT code?
>
> Lawrie
>
> ----- Original Message -----
> From: "Fleming, Craig" <[EMAIL PROTECTED]>
> To: <[email protected]>
> Sent: Monday, June 25, 2007 11:48 PM
> Subject: [Lejos-discussion] Compiling Lejos for the Nintendo DS
>
>
>> Hello everyone,
>>
>> I know that a similar topic was brought up many years ago, and I 
>> don't know if that was anything other than one developers little pet
> project,
>> or even if anyone who reads this is interested in this. But I had 
>> some free time and a desire to see if I could do it, so here it is. 
>> If
> there
>> is no interest, that's quite alright - I'll just keep plugging away
> here
>> :). I've run into a confusing problem and I had hoped someone in here

>> might be able to help me out. Unfortunately C/C++ is not my native 
>> language - I know how to write some small programs but most of the
> Lejos
>> code is beyond me.
>>
>> I've managed to write/copy enough code to get Lejos to compile using 
>> DevKitPro/DevKitArm. I've been through a couple days of debugging, 
>> making steady progress until today. I'm in threads.c, in 
>> init_threads( Thread *thread ). What happens is:
>>
>> 1. A successful call is made to new_primitive_array, assigning to
>> thread->stackFrameArray.
>> 2. A successful call is made to new_primitive_array, assigning to
>> thread->stackArray
>> 3. An assertion exception 20 is thrown.
>>
>> I've been printfing my way around the code, and I've determined that
>> thread->stackFrameArray is somehow corrupted between the second call
> to
>> new_primitive_array and the first line of this call. There is no code

>> except the two printfs between the point of corruption. I fixed this 
>> problem by assigning to a temporary variable and then after the 
>> second call to new_primitive_array, I assign that temporary variable 
>> to
>> thread->stackFrameArray.
>>
>> Still with me? :) This work-around keeps the pointers from being 
>> corrupted, but doesn't solve the problem! If I do this, a call to 
>> is_array still returns false, throwing the assertion 20. A few more 
>> printfs give me the reason I'm writing this - a strange situation 
>> that is beyond my knowledge.
>>
>> 1. A call to is_array just after the assignment to thread->stackArray

>> returns 1.
>> 2. A call to is_array just after THAT call to is_array returns 0!
>>
>> Here is the offending section of code, including the "work-around"
>> (which is a problem I don't understand by itself), and the final two 
>> printfs. The first displays "1 1", the second displays "0 0".
>>
>>  JINT stackFrameArray = ptr2word (new_primitive_array (T_STACKFRAME, 
>> INITIAL_STACK_FRAMES));  if (stackFrameArray == JNULL)
>>    return false;
>>
>>  // Allocate actual stack storage (INITIAL_STACK_SIZE * 4 bytes)  
>> thread->stackArray = ptr2word (new_primitive_array (T_INT, 
>> INITIAL_STACK_SIZE));  thread->stackFrameArray = stackFrameArray;  
>> printf( "%d %d\n", is_array( word2obj(thread->stackFrameArray) ), 
>> is_array( word2obj(thread->stackArray) ) );  printf( "%d %d\n", 
>> is_array( word2obj(thread->stackFrameArray) ), is_array( 
>> word2obj(thread->stackArray) ) );  if (thread->stackArray == JNULL)  
>> {
>>    free_array (ref2obj(thread->stackFrameArray));
>>    thread->stackFrameArray = JNULL;
>>    return false;
>>  }
>>
>>  gThreadCounter++;
>>
>>  #ifdef VERIFY
>>  assert (is_array (word2obj (thread->stackFrameArray)), THREADS0);  
>> assert (is_array (word2obj (thread->stackArray)), THREADS1);  #endif
>>
>> Thanks for reading.
>>
>> Craig
>>
>>
> ----------------------------------------------------------------------
> --
> -
>> This SF.net email is sponsored by DB2 Express Download DB2 Express C 
>> - the FREE version of DB2 express and take control of your XML. No 
>> limits. Just data. Click to get it now.
>> http://sourceforge.net/powerbar/db2/
>> _______________________________________________
>> Lejos-discussion mailing list
>> [email protected]
>> https://lists.sourceforge.net/lists/listinfo/lejos-discussion
>>
>>
>> --
>> Internal Virus Database is out-of-date.
>> Checked by AVG Free Edition.
>> Version: 7.5.472 / Virus Database: 269.8.0/818 - Release Date:
> 25/05/2007
>> 12:32
>>
>>
>
>
> ----------------------------------------------------------------------
> --- This SF.net email is sponsored by DB2 Express Download DB2 Express

> C - the FREE version of DB2 express and take control of your XML. No 
> limits. Just data. Click to get it now.
> http://sourceforge.net/powerbar/db2/
> _______________________________________________
> Lejos-discussion mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/lejos-discussion
>
>
> --
> Internal Virus Database is out-of-date.
> Checked by AVG Free Edition.
> Version: 7.5.472 / Virus Database: 269.8.0/818 - Release Date: 
> 25/05/2007
> 12:32
>
> 


-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Lejos-discussion mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/lejos-discussion

Reply via email to