Hi, Thanks, for your replies. In reply to Chris' post - The IAR compiler handles such structures by accessing the data byte by byte. So, assigning the value, 0x1234 to "hg.b" (odd memory location) is done one byte at a time, i.e. 0x34 is moved in first and then 0x12 is moved into the next higher byte. As Chris rightly pointed out, it would've been nice if mspgcc could generate similar code :-)
Regards, Sudhakar " This e-mail, and any attachments thereto, are intended only for use by the addressee(s) named herein and contain Honeywell confidential information. If you are not the intended recipient of this e-mail, you are hereby notified that any dissemination, distribution or copying which amounts to misappropriation of this e-mail and any attachments thereto, is strictly prohibited. If you have received this e-mail in error, please immediately notify me and permanently delete the original and any copy of any e-mail and any printout thereof." -----Original Message----- From: mspgcc-users-ad...@lists.sourceforge.net [mailto:mspgcc-users-ad...@lists.sourceforge.net]on Behalf Of Chris Liechti Sent: Monday, January 03, 2005 23:54 To: mspgcc-users@lists.sourceforge.net Subject: Re: [Mspgcc-users] Problem with packed structures.. Venkata, Bulusu (IE10) wrote: > Hi, > I'm having problems with packed structures. Given below is a sample > code("test.c") which uses a packed structure: > > #include <stdio.h> > typedef struct { > char a; > int b; > }__attribute__((packed)) unaligned_struct; > > unaligned_struct hg; > char dummyVar; > > void main(void){ > unaligned_struct* ptr=&hg; > > hg.a = 0x56; > hg.b = 0x1234; > } > > > The equivalent assembly code generated was as follows: > > - 0x1140 <main>: mov #2558, SP ;#0x09fe > - 0x1144 <main+4>: mov r1, r4 ; > 13 unaligned_struct* ptr=&hg; > - 0x1146 <main+6>: mov #514, 0(r4) ;#0x0202 > 14 > 15 hg.a = 0x56; > 0x114c <main+12>: mov.b #86, &0x0202 ;#0x0056 > 16 hg.b = 0x1234; > - 0x1152 <main+18>: mov #4660, &0x0000 ;#0x1234 > - 0x1158 <main+24>: incd SP ; > - 0x115a <main+26>: br #0x115e ; > > The msp430-gcc compiler gives an error/warning at line no. 16, (i.e. at hg.b > = 0x1234;): > test.c:16: internal error: unsupported relocation error the msp430 hardware cannot acces shorts at odd addresses. but with your struct definition you forced the compiler to place "int b" att an odd address. ints/shorts from odd addresses can only be read by two separte byte reads. mspgcc doesn't generate such code at the moment, it seems. (patches are welcome ;-) but keep in mind that code with unaligned data will be larger and less efficient as code for aligned variables. > However, when I tried the same with the IAR compiler, it works fine. I guess "works" or "compiles"? have you confirmed that it realy works, or does it just load the "int" from the wrong address? > MSPGCC doesn't guarantee support for packed structures due to the problems > MSP430 has with unaligned word accesses - so how does IAR do it? I apologize > for the long post, but I desperately need to use packed structures in my > code. Thank you.. you could define a low and high byte access instead, that code works with both compilers, but you need to manualy recombine these two into an 16 value if you need it. typedef struct { char a; char b_low; char b_high; }__attribute__((packed)) unaligned_struct; and even better, if you have the data format under your control, insert bad bytes or rearange the struct members to get all 16 bit and larger types aligned. if the data format is defined by an enternal communications parter it may as well use big endian numbers (the common byte order in network protocols) in that case, you need to convert all incomming data anyway as the msp430 is a little endian system. chris > Regards, > Sudhakar > > > > ------------------------------------------------------- > The SF.Net email is sponsored by: Beat the post-holiday blues > Get a FREE limited edition SourceForge.net t-shirt from ThinkGeek. > It's fun and FREE -- well, almost....http://www.thinkgeek.com/sfshirt > _______________________________________________ > Mspgcc-users mailing list > Mspgcc-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/mspgcc-users > > ------------------------------------------------------- The SF.Net email is sponsored by: Beat the post-holiday blues Get a FREE limited edition SourceForge.net t-shirt from ThinkGeek. It's fun and FREE -- well, almost....http://www.thinkgeek.com/sfshirt _______________________________________________ Mspgcc-users mailing list Mspgcc-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mspgcc-users