From: Royce & S. P. <be...@et...> - 2003-01-24 10:27:39
|
Hi, The code: data at 8 char valu0; bit at 0x20 flg_one; both refer to absolutely placed variables. In the asm file, I get .global _valu0 ..... _valu0 = 0x08 ------------> this is ok! but in case of my bit variable, I get: _flg_one = 0x20 ------------> Why no global for bits? As flg_one is not declared global, I can't access it from another module! I know I can redeclare it in my other modules, but I have to tinker with my other modules for every new project! I would love a ".global _flg_one" statement(automatically, that is)in my asm file. The same is the case with sbit variables declared explicitly. I had a IIC module with SDA & SCL values declared in my main.c program. sbit at 0x97 SDA; sbit at 0x96 SCL; But I couldnt link it as I got a error that _SDA & _SCL were undefined! I really dont think redefining your (s)bits in each module is an intelligent solution. Logically, if bytes declared explicitly are made global, so as to be accessed from other modules, then (s)bits declared explicitly must also be global, right? Could someone pleeeese fix this & give me a ".global _flg_one" in the .asm output? Huh? please? Thanks! --Royce. |
From: Bernhard H. <Ber...@be...> - 2003-01-24 12:00:33
|
> data at 8 char valu0; > bit at 0x20 flg_one; > > both refer to absolutely placed variables. > In the asm file, I get > > .global _valu0 > ..... > _valu0 = 0x08 ------------> this is ok! > > but in case of my bit variable, I get: > > _flg_one = 0x20 ------------> Why no global for bits? > > As flg_one is not declared global, I can't access it from another module! Not reproducable with 2.3.3. _flg_one is global. > The same is the case with sbit variables declared explicitly. > I had a IIC module with SDA & SCL values declared in my main.c program. > > sbit at 0x97 SDA; > sbit at 0x96 SCL; > But I couldnt link it as I got a error that _SDA & _SCL were undefined! I > really dont think redefining your (s)bits in each module is an intelligent > solution. Same procedure as last year? http://www.geocrawler.com/archives/3/3278/2002/4/50/8337589/ You're badly mixing the terms "definition" and "declaration". Repeat reading your K&R until you've understood the difference. "sbit at" is a declaration. And yes, you've to redeclare it in all mdoules. Many people pointed into the right direction: http://www.geocrawler.com/archives/3/3278/2002/4/50/8339013/ http://www.geocrawler.com/archives/3/3278/2002/4/50/8339272/ http://www.geocrawler.com/archives/3/3278/2002/4/50/8355806/ Bernhard |
From: Jesus Calvino-F. <Je...@ec...> - 2003-01-27 08:40:48
|
Hi, bit at 0x20 flg_one; creates .globl flg_one .area BSEG (BIT) _flg_one = 0x0020 but if sbit is used instead of bit: sbit at 0x20 flg_one; just creates _flg_one = 0x20 That works for I/O pins too. For instance P1_0 (bit 0x90) and flg_one in the code below generate the same assembly, but flg_one is public and P1_0 is not: #include <8051.h> int j; bit at 0x90 flg_one; void main (void) { flg_one=1; P1_0=1; for(j=0; j<10; j++); flg_one=0; P1_0=0; } in the rst file: ;-------------------------------------------------------- ; Public variables in this module ;-------------------------------------------------------- .globl _main .globl _flg_one .globl _j . . . 245 ; z.c:10: flg_one=1; 246 ; genAssign 0038 D2 90 247 setb _flg_one 248 ; z.c:11: P1_0=1; 249 ; genAssign 003A D2 90 250 setb _P1_0 Hope this helps, Jesus At 03:57 PM 1/24/03 +0530, Royce & Sharal Pereira wrote: >Hi, >The code: > >data at 8 char valu0; >bit at 0x20 flg_one; > >both refer to absolutely placed variables. >In the asm file, I get > >.global _valu0 >..... >_valu0 = 0x08 ------------> this is ok! > >but in case of my bit variable, I get: > >_flg_one = 0x20 ------------> Why no global for bits? > >As flg_one is not declared global, I can't access it from another module! >I know I can redeclare it in my other modules, but I have to tinker with my >other modules for every new project! I would love a ".global _flg_one" >statement(automatically, that is)in my asm file. > >The same is the case with sbit variables declared explicitly. >I had a IIC module with SDA & SCL values declared in my main.c program. > >sbit at 0x97 SDA; >sbit at 0x96 SCL; >But I couldnt link it as I got a error that _SDA & _SCL were undefined! I >really dont think redefining your (s)bits in each module is an intelligent >solution. >Logically, if bytes declared explicitly are made global, so as to be >accessed from other modules, then (s)bits declared explicitly must also be >global, right? > >Could someone pleeeese fix this & give me a ".global _flg_one" in the .asm >output? Huh? please? >Thanks! >--Royce. > > > > > >------------------------------------------------------- >This SF.NET email is sponsored by: >SourceForge Enterprise Edition + IBM + LinuxWorld = Something 2 See! >http://www.vasoftware.com >_______________________________________________ >Sdcc-user mailing list >Sdc...@li... >https://lists.sourceforge.net/lists/listinfo/sdcc-user |