Email: Password: Remember Me | Create Account (Free)

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
???
02/23/11 20:26
Modified:
  02/23/11 20:29

Read: times


 
#181271 - linker magic
Responding to: ???'s previous message
Andy Peters said:
Neil Kurzman said:
Why not make the Bootloader a separate program.
But I agree the Bootloader should not erase itself.


A separate program is ideal. I just don't know how to locate it starting at 0x8000,

This is toolchain-dependent, and often boils down to linker magic.
As I said, I don't Keil, but I'd start with reading the fine manual... ;-)


Andy Peters said:
[...] nor how to jump to it, at least from within a C program.
The traditional way is to cast a constant (the address) to a function pointer and then invoke it.
typedef void (* function_ptr)();

int main(void) {
  ((function_ptr)0x8000)();
}
 

Less common methods would be to write a dummy function and move it to the given position again using linker magic and then removing it from the resulting hex by post-processing; defining a symbol at a required address using linker magic (together with writing a C prototype for it) (*); and the simplest: using inline assembler.

JW

[EDIT] Keil's linker does not appear to support custom symbol creation, making (*) unusable


List of 14 messages in thread
TopicAuthorDate
Odd use of code banking            01/01/70 00:00      
   I don't know about Keil's...            01/01/70 00:00      
   Seperate Program?            01/01/70 00:00      
      separate program            01/01/70 00:00      
         Often special lock bits for boot regions            01/01/70 00:00      
         linker magic            01/01/70 00:00      
            RTFM            01/01/70 00:00      
               You are not good to go            01/01/70 00:00      
                  updater and libraries            01/01/70 00:00      
         which is why            01/01/70 00:00      
   Please Reconsider            01/01/70 00:00      
      the golden rule            01/01/70 00:00      
      re: Reconsider            01/01/70 00:00      
         If needed...            01/01/70 00:00      

Back to Subject List