------- Additional Comments From wintermute101 at wp dot pl  2004-11-04 16:54 -------
I write here cause it's simmilar situation as reported here but I have no data
about other gcc versions than 3.3.2.

I have following:

/////////////////

define _aligned(n) __attribute__((aligned(n), packed))

struct CzazPort {
        unsigned short number;
        unsigned long  speed;
        unsigned long  protocol;
        unsigned long  mode;
        unsigned short timeout;
        unsigned short loglevel;
        unsigned short timerid;
} _aligned(2);

struct CzazPort tmp;
sscanf( data, "%lu", &tmp.speed );

/////////////////////

data="9600"

before sscanf (content of tmp)
00:01:00:00:96:00:52:54:55:00:38:4e:31:00:03:e8:00:04:2b:67
after sscanf
00:00:25:80:96:00:52:54:55:00:38:4e:31:00:03:e8:00:04:2b:67

9600 in hex -> 0x2580

it was compiled for MOXA UC7420

the same program compiled for i686 works fine

this MOXA has XScale Intel prcessor working in big-endian. I guess this is the
problem (big-endian).

sscanf is just example from source. The same occurs when I relpace sscanf with 
        (*(&tmp.speed)) = 9600; 
but
tmp.speed=9600;
works fine.

-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18287

Reply via email to