From: <MSoegtrop@Michael-Soegtrop.de> - 2001-07-08 12:45:19
|
Hello Karl, ANSI C for your modula bits code looks like this: struct SButtons { unsigned up:1; unsigned down:1; unsigned left:1; unsigned right:1; } buttons; int main() { buttons.left=3D1; if(buttons.left) { // do something } } The :1 after each member is the number of bits to assign to this member (= can be any number of bits up to the machines wordsize). If the field is signe= d, the possible values are 0 and -1, if the field is unsigned, the possible values are 0 and 1. I don't know whether SDCC supports this kind of syntax, but probably it does, because it is very convenient for saving memory. If you try it, ple= ase let me know the results. If SDCC does not support this syntax, the best w= ay is to use an enum or defines to define bitmasks, and to use bit operators= (& and |). Regards, Michael -----Urspr=FCngliche Nachricht----- Von: sdc...@li... [mailto:sdc...@li...]Im Auftrag von karl mowatt-wilson Gesendet: Sonntag, 8. Juli 2001 13:54 An: sdc...@li... Betreff: [Sdcc-user] bitaddressable variables I am translating some code I wrote & tweaked under Modula-51 to compile w= ith SDCC (I am new to C). This is for reading/debouncing/using a set of buttons. Under Modula-51 I could have some variable declarations such as this: VAR buttons : BYTE BITADDRESSABLE; button_up : BOOLEAN AT buttons.0; button_down : BOOLEAN AT buttons.1; button_left : BOOLEAN AT buttons.2; button_right : BOOLEAN AT buttons.3; This would declare the variable 'buttons' to be somewhere in the range 0x= 20 to 0x2F (I don't care where, just as long as the compiler/linker/whatever knows). The variables 'button_up', 'button_down', etc. would be assigned= as bit variables pointing to the bits within the bitaddressable variable 'buttons'. ie. if buttons is at 0x23 then button_up would be bit address 0x18, button_down would be bit address 0x19, etc. I could then read the set of buttons (assuming they're all on P1 and need= no debouncing) and make use of them something like this: buttons :=3D P1; IF button_up THEN do_something; IF button_down THEN do_somethingelse; This generated clean & efficient assembler. How do I do something which will generate the same nice sort of code in SDCC? thanks, Karl. _________________________________________________________________________ Get Your Private, Free E-mail from MSN Hotmail at http://www.hotmail.com. _______________________________________________ Sdcc-user mailing list Sdc...@li... http://lists.sourceforge.net/lists/listinfo/sdcc-user |