This is the mail archive of the
ecos-discuss@sources.redhat.com
mailing list for the eCos project.
RE: Network programming for eCos under linux
- To: "'Jonathan Larmour'" <jlarmour at redhat dot com>
- Subject: RE: [ECOS] Network programming for eCos under linux
- From: "Trenton D. Adams" <tadams at theone dot dnsalias dot com>
- Date: Wed, 8 Aug 2001 09:57:49 -0600
- Cc: "'Grant Edwards'" <grante at visi dot com>,"'Andrew Lunn'" <andrew dot lunn at ascom dot ch>,"'eCos discussion'" <ecos-discuss at sources dot redhat dot com>
>
> > So, how would one go about making a buffer word aligned or DWORD
> aligned
> > just to be safe?
>
> something along the lines of:
>
> char buffer[1024];
> #define ALIGNMENT 8
> #define ALIGNUP(_x_) (((char *)(_x_) + ALIGN-1) & ~(ALIGN-1))
> int *foo = ALIGNUP(buffer);
>
> You could also use __alignof(int) to give the alignment but that's
> obviously a GNU C-ism.
>
First of all, I assume your ALIGN is actually supposed to be ALIGNMENT!
I don't understand your macro. Let's say _x_ happens to be memory
address 0x201 the macro formula would go like this
= (0x201 + 7) & ~(7)
= 0x208 & 0xfffffff8
= 0x208
So, now foo is pointing to an integer that is not at the beginning of
the buffer. This would mean that I couldn't put anything at the
beginning of the buffer, correct?