From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Grant Edwards" To: "Trenton D. Adams" Cc: "'Jonathan Larmour'" , "'Andrew Lunn'" , "'eCos discussion'" Subject: [ECOS] Re: Network programming for eCos under linux Date: Wed, 08 Aug 2001 09:07:00 -0000 Message-id: <20010808160751.B73547A926@visi.com> References: <000001c12022$dfa2f460$090110ac@TRENT> X-SW-Source: 2001-08/msg00247.html Trenton D. Adams writes: > > > > > 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? Not by dereferenceing a short or int pointer. You've got to use memcpy(). -- Grant Edwards grante@visi.com