Hi All,, How can i declare constant bit fields in a struct ?? struct mystruct{ unsigned char xx:6; unsigned char yy:2; }mystruct; Let us say i want mystruct.yy to be a constant 00, how can i do that ?? mystruct must be a 8-bit datatype. which of its two components xx and yy would be at MSB ?? If anyone can tell how to figure that out it would be great. Thankzz && Bye -Rocknmoon
You declare constant structure members the same way you declare constant variables:
struct mystruct { unsigned char xx:6; unsigned char const yy:2; } mystruct = { 3, 0 };
(unsigned char)mystuct.yy = 1;
mystruct = { 0, 1 }; printf("LSB=%d", (1 & *(char*)&mystruct) + '0');
struct mystruct { unsigned char xx:6; unsigned char const yy:2; } mystruct = { 3, 0 }; Would this struct take up 1 byte of storage space or 2 bytes on a low end 8051 architecture ??
Why ask if you can check yourself? I do C166, so I can't help you with that. Write a small program, run it in simulator, check sizeof(mystruct). It will take you 3 minutes. In the declaration of struct member the const qualifier doesn't mean it goes into ROM. A variable cannot be partly in ROM and partly in RAM. Regards, - Mike
"Which of the structure members are MSB or LSB you can find out by testing the code." Or you can read the manual You might also want to check these articles: http://www.keil.com/support/docs/928.htm http://www.keil.com/support/docs/1279.htm And this thread: http://www.keil.com/forum/docs/thread1530.asp