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.
Hi, I've to modify a code previously written in Tasking compiler and at many places I find code like _rom USIGN08 TempTable[CAL_TEMPERATURES] _at(0xf35c)= { 0x0F,0x28,0x51,0x7A,0x8F }; Here the TempTable array is to be located at code address 0xf35c and also to be initialized. As per Keil compiler book, variables can be located at absolute location using _at_ but can not be initialized. Is there a way to do this? Thanks, Rajesh
"Here the TempTable array is to be located at code address 0xf35c" Why? Can you not just remove the absolute address? "Is there a way to do this?" Yes, and it's been flogged to death here ad nauseam - just do a 'Search' for "_at_"
As I've said before: This is why I recommend that you should always encapsulate all your compiler dependencies in #defines and typedefs. Then, you know that you have only one file to modify if you change compilers! See: http://www.keil.com/forum/docs/thread31.asp
The original code was not written by me and as the only person in team to worked on 8051(4-5 years ago), I volunteered to make some quick enhancement and got PK51 assuming Keil compiler can do anything. Did not know that code was done using Tasking compiler. Yes, the tables shouldn't have been located at fixed address,not sure why it was done like that. Now I'll try to make it absolute address independent or go through the hassle of locating them using liker. I was just looking for some quick solution. Also noticed that Keil IDE doesn't generate make file(Tasking compiler does) :( After using GNU Tools I'm used to Makefiles now.
"After using GNU Tools I'm used to Makefiles now." ALL of the Keil tools can be called from the command line; therefore, you can use a makefile instead of the uVision build if that's what you prefer. You could invoke it from the Tools menu, if you want...