Yahoo Groups archive

Lpc2000

Index last updated: 2026-04-28 23:31 UTC

Message

Re: [lpc2000] type cast in GCC

2006-02-28 by Dmitry Diky

Hi Nic,
I had the same problem...
It seems that Keil's __packed keyword in the front of a pointer effectively 
means 
memcpy(packed_p, source_p, sizeof(source));

In your case your can write
	EP0Buf[0] = 0;
	EP0Buf[1] = 0;
or just 
*(short *)EP0Buf = 0;
if you add __atribute__((aligned(2))) to the EP0Buf declaration:
	char __atribute__((aligned(2))) EP0Buf[USB_MAX_PACKET0];
This will in result write to assembly:
	.comm EP0Buf, USB_MAX_PACKET0, 2
where last digit '2' is an optional align passed to linker.

Have fun,
Dmitry.

P.S. in my case I couldn't run Keil's example on my board with gcc anyway.



On Tuesday 28 February 2006 05:54, weartronics wrote:
> Dear lpc2000,
>
> In the Keil LPC2148 USB examples, EP0 buffer is declared as a byte array
> BYTE  EP0Buf[USB_MAX_PACKET0];
>
> but later it is type cast to the packed word array
> *((__packed WORD *)EP0Buf) = 0;
>
> I don't understand how the pointer EP0Buf would be changed by casting
> it to the __packed word pointer. Is anyone able to explain the
> function of the type cast to me so I can write a GCC equivalent (where
> the type cast to a packed type is not supported)?
>
> Thanks,
>
> Nic
>
>
>
>
>
>
> Yahoo! Groups Links
>
>
>

Attachments

Move to quarantaine

This moves the raw source file on disk only. The archive index is not changed automatically, so you still need to run a manual refresh afterward.