Problems with linked list and xdata

I'm having a problem getting a linked list to work on Keil. I'm using an aduc842 microcontroller from Analog. Linked lists are something we do all the time in c and i'm baffled as to why i cant get it to work in this situation. This code works in the simulator but doesnt work on the actual hardware. Ive got 2k on chip xdata and it's configured as such. Ive tried using void * as well for the link node, which increases the size of the struct by one byte, and that didnt work either.

#include <ADuC842.h>
sbit led = 0xb4;
unsigned char xdata Store[1024] ;
unsigned char xdata * pStore ;
void xdata *  FetchMem ( unsigned int bytes ) {
	unsigned char xdata * ppStore ;
	ppStore = pStore ;
	pStore += bytes ;
	return ppStore ;
}

xdata struct Example {
	unsigned char a ;
	struct Example xdata * Next ;
} ;
struct Example xdata List ;
struct Example xdata * pList ;
int main (void ){
	unsigned char i ;
	FetchMem(1);
	pList=&List ;
	pList->a='a'; pList->Next = 0 ;
	{
		struct Example xdata * rec ;
		rec=FetchMem(sizeof(struct Example));
		rec->a='b'; rec->Next=0;
		pList->Next=rec; pList=rec;}
	{
		struct Example xdata * rec ;
		rec=FetchMem(sizeof(struct Example));
		rec->a='c'; rec->Next=0;
		pList->Next=rec; pList=rec;
	}
	{
		struct Example xdata * rec ;
		rec=FetchMem(sizeof(struct Example));
		rec->a='d'; rec->Next=0;
		pList->Next=rec; pList=rec;
	}
	pList=&List;
	for(;;){
		i=pList->a;
		if(pList->Next==0)break;
		pList=pList->Next;
	}
	led=!led;
	for(;;){}
}

Parents
  • Linked lists are something we do all the time in c and i'm baffled as to why i cant get it to work in this situation
    Because "the '51 aint no PC". What you "do all the time in c" may and may not fit the '51 architecture.

    sure, you can "get it to work" but that does not make it right. If you just took one small peek at the code, the use of linked lists, generate with the '51 architecture you would immediately stop using the combination.

    If you have to violate the poor little controller, go ahead and fix/have fixed your code, but why do you have to ignore what you are working with.

    Erik

Reply
  • Linked lists are something we do all the time in c and i'm baffled as to why i cant get it to work in this situation
    Because "the '51 aint no PC". What you "do all the time in c" may and may not fit the '51 architecture.

    sure, you can "get it to work" but that does not make it right. If you just took one small peek at the code, the use of linked lists, generate with the '51 architecture you would immediately stop using the combination.

    If you have to violate the poor little controller, go ahead and fix/have fixed your code, but why do you have to ignore what you are working with.

    Erik

Children
More questions in this forum