We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Dear friends, Plz help me in solving this bad problem: PROBLEM DESCRIPTION: I have a number defined in C and I DONT want to alocate memory in 8051 for this number : #define myNumber 0x1234 All is well, when i work with myNumber in C for example: HiByte=myNumber/256; will translate as expected: MOV HiByte,#012H ; No memory alocated for myNumber and stil, C compiler is capable to make calculus based on it. Happy with that, now i try tu use myNumber (remember defined in C) in ASM. And that is the problem: I'm unnable to found a method to see myNumberin ASM. Shortly: Seems to me that A51 compiler is unable to see a numerical constant declared in C51 with #define directive (but mybe i missing something out, and that's why I ask for your expertize, Dear friends) An example follows:
//---------file main.c---------------- //I wish to see this number both in C and ASM //PLZ NOTE: I dont want to reserve memory for myNumber //i only wish to use it's High Byte in a data memory location #define myNumber 0x1234 //function defined in ASM which use myNumber extern unsigned char GetHiByte(void); //reserve memory location unsigned char HiByte; void main (void) { HiByte=myNumber/256;//all is well in C HiByte=GetHiByte();//dont work in ASM, myNumber is not seen //and is initialized to zero } ;-------file func.a51----------------- ?PR?GetHiByte?FUNC? segment code EXTRN NUMBER (myNumber) public GetHiByte rseg ?PR?GetHiByte?FUNC? using 0 GetHiByte: mov r7,#HIGH(myNumber) ret end
You are right Andy Neil, Thanks again!!