Facing problem with bit fields, when compiling with GCC.

2006-04-05 Thread Devendra Mulakkayala



 Hello,

ISSUE: Facing problem with bit fields, when i am compiling my code with
GCC. It was previously compiled with diab compiler and was working fine.

In our code Union definition is as follows...,
union
{
   unsigned_8 indicator;
   struct
   {
   unsigned_8 unused : 6;
   unsigned_8 speed   :1;
   unsigned_8 time:1;
   }bit;
}msg;

In code, speed and time bits are set as follows

msg.bit.speed=TRUE;
msg.bit.time=TRUE;

Some where in code there is check for indicator as follows

if(indicator==03) /* this is to check whether speed and time bits are set.
If yes go iside block */
{



}

unused 6 bits are initialized to 0.

This code previously compiled with diab compiler and working fine. Now i am
trying to compile with GCC compiler.

The problem here is
1. If speed and time bits are set, these bits are coming in MSB. That is it
is coming 1100  ( C0 ) instead of  0011 (03 ). That why eventhough
speed and time bits are set, condition is not satisfying because indicator
value is 'C0' not '03'.
2. Compiler is assigning the memory from bottom to top for bit fields in
the structure. Previously in diab compiler it is aligning bits from top to
bottom, with that our code was working fine.
2. I know that these bit fields are compiler dependent. Is there any option
in GCC to set the bit fields from top to bottom ( MSB to LSB )
in structure.
3. As per the client requirement we are not supposed to change the code. I
am looking for any option or any other way to solve this problem.

Please help me in this

Thanks
Mulakkayala


--
Unsubscribe info:  http://cygwin.com/ml/#unsubscribe-simple
Problem reports:   http://cygwin.com/problems.html
Documentation: http://x.cygwin.com/docs/
FAQ:   http://x.cygwin.com/docs/faq/



Re: Facing problem with bit fields, when compiling with GCC.

2006-04-05 Thread Larry Hall (Cygwin X)

Devendra Mulakkayala wrote:



 Hello,

ISSUE: Facing problem with bit fields, when i am compiling my code with
GCC. It was previously compiled with diab compiler and was working fine.

In our code Union definition is as follows...,
union
{
   unsigned_8 indicator;
   struct
   {
   unsigned_8 unused : 6;
   unsigned_8 speed   :1;
   unsigned_8 time:1;
   }bit;
}msg;

In code, speed and time bits are set as follows

msg.bit.speed=TRUE;
msg.bit.time=TRUE;

Some where in code there is check for indicator as follows

if(indicator==03) /* this is to check whether speed and time bits are set.
If yes go iside block */
{



}

unused 6 bits are initialized to 0.

This code previously compiled with diab compiler and working fine. Now i am
trying to compile with GCC compiler.

The problem here is
1. If speed and time bits are set, these bits are coming in MSB. That is it
is coming 1100  ( C0 ) instead of  0011 (03 ). That why eventhough
speed and time bits are set, condition is not satisfying because indicator
value is 'C0' not '03'.
2. Compiler is assigning the memory from bottom to top for bit fields in
the structure. Previously in diab compiler it is aligning bits from top to
bottom, with that our code was working fine.
2. I know that these bit fields are compiler dependent. Is there any option
in GCC to set the bit fields from top to bottom ( MSB to LSB )
in structure.
3. As per the client requirement we are not supposed to change the code. I
am looking for any option or any other way to solve this problem.

Please help me in this



This isn't a Cygwin-X issue.  If this is a Cygwin issue, ask it on the main
list.  But before you do that, you should make sure that it is a Cygwin issue
and not a gcc one.  If it is the latter, then you want to ask about this on
the gcc list instead.


--
Larry Hall  http://www.rfk.com
RFK Partners, Inc.  (508) 893-9779 - RFK Office
838 Washington Street   (508) 893-9889 - FAX
Holliston, MA 01746

--
Unsubscribe info:  http://cygwin.com/ml/#unsubscribe-simple
Problem reports:   http://cygwin.com/problems.html
Documentation: http://x.cygwin.com/docs/
FAQ:   http://x.cygwin.com/docs/faq/