avr-gcc-list
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [avr-gcc-list] Struct problem


From: Eric Fu
Subject: Re: [avr-gcc-list] Struct problem
Date: Sat, 31 Jan 2004 16:43:32 +1100

It works. That's great.
But it added an unbelievable 500Bytes! It seems the code size under AVR GCC
varies a lot for different implementations of the same task. In my case,
what I changed was to access  UART buffer from arrays to pointers with
malloc.
I redefined:
    ...
  byte *pTxBuf,*pRxBuf;
     ...
Allocated memory as:
uart0.pRxBuf = malloc(RX_BUFFER_SIZE0);
 uart0.pTxBuf = malloc(TX_BUFFER_SIZE0);

Used such as
return *(uart0.pRxBuf+TmpTail);           // Return data
There are no other changes apart from the change to access the buffer. Is
this normal?

Eric Fu

----- Original Message ----- 
From: "Brian Cuthie" <address@hidden>
To: "'Eric Fu'" <address@hidden>; <address@hidden>
Sent: Saturday, January 31, 2004 1:59 PM
Subject: RE: [avr-gcc-list] Struct problem


>
> You can use malloc() to create your buffers and they'll still be globally
> accessible so long as the pointers you store them in are global.
>
> -brian
>
> > -----Original Message-----
> > From: Eric Fu [mailto:address@hidden
> > Sent: Friday, January 30, 2004 9:52 PM
> > To: address@hidden; address@hidden
> > Subject: Re: [avr-gcc-list] Struct problem
> >
> > Thanks for the tip.
> > The buffers need to be Global, since it needs to be
> > accessible in different modules. My understanding is that
> > malloc is for allocating dynamic memory.
> > Anyway, I will read my C book for clue. Thanks for pointing
> > the direction.
> >
> > Eric Fu
> >
> >
> > ----- Original Message -----
> > From: "Brian Cuthie" <address@hidden>
> > To: "'Eric Fu'" <address@hidden>; <address@hidden>
> > Sent: Saturday, January 31, 2004 12:22 PM
> > Subject: RE: [avr-gcc-list] Struct problem
> >
> >
> > >
> > > The problem, quite simply, is that because the size of TxBuf[] isn't
> > > specified, the offset within the struct to RxBuf[] can't be
> > computed at
> > > compile time (which it needs to be).
> > >
> > > To do what you want you'll need to change the struct so
> > that instead of
> > > arrays, TxBuf and RxBuf are pointers. Then malloc the
> > memory you need and
> > > store the addresses in TxBuf and RxBuf respectively.
> > >
> > > You might want to re-read a few chapters in your C book.
> > >
> > > -brian
> > >
> > > > -----Original Message-----
> > > > From: address@hidden
> > > > [mailto:address@hidden On Behalf Of Eric Fu
> > > > Sent: Friday, January 30, 2004 8:05 PM
> > > > To: address@hidden
> > > > Subject: [avr-gcc-list] Struct problem
> > > >
> > > > Hi All,
> > > >
> > > > I'm trying to declare a Structure for UART, so that it can be
> > > > used for more than one UARTs such as:
> > > > typedef struct UART
> > > > {
> > > >  volatile byte RxHead;
> > > >  volatile byte RxTail;
> > > >  volatile byte TxHead;
> > > >  volatile byte TxTail;
> > > >  byte TxBuf[],RxBuf[];
> > > > }UART;
> > > > extern UART uart0;
> > > > extern UART uart1;
> > > >
> > > > By doing this way, I can assign different buffer size to
> > > > different UART such as:
> > > > byte uart0.RxBuf[RX_BUFFER_SIZE0];
> > > > byte uart0.TxBuf[RX_BUFFER_SIZE0];
> > > > byte uart1.RxBuf[RX_BUFFER_SIZE1];
> > > > byte uart1.TxBuf[RX_BUFFER_SIZE1];
> > > >
> > > > However, I get the following compile error:
> > > > UART.h:47: error: flexible array member not at end of struct
> > > >
> > > > Could anyone give me a hint on How to tell the compiler
> > to do this?
> > > > Thanks
> > > >
> > > > Eric Fu
> > > > _______________________________________________
> > > > avr-gcc-list mailing list
> > > > address@hidden
> > > > http://www.avr1.org/mailman/listinfo/avr-gcc-list
> > > >
> > >
> > >
> >
> >
>
>




reply via email to

[Prev in Thread] Current Thread [Next in Thread]