From: Mary-Ann J. <Mar...@di...> - 2007-01-12 18:09:27
|
I'm porting some 8051 assembler into C, and I need to locate some functions at specific memory locations. In assembler, it's something like the following: ---------------------------------- .area MAIN (ABS, CODE) .org BASE + VECT vect: ---------------------------------- Can I do the same thing in C and, if so, how? I tried the following as a test, but that didn't work - it ended up at address 0x03B2. __code __at 0x4000 void test_func(void) { ... } Any ideas welcomed... --=20 Mary-Ann Johnson |
From: Bill N. <nik...@us...> - 2007-01-13 15:03:45
|
Hello, On 1/12/07, Mary-Ann Johnson <Mar...@di...> wrote: > I'm porting some 8051 assembler into C, and I need to locate some > functions at specific memory locations. Try something like the following: #define BEGIN_CODE_ABS_LOCATION(uniqueName, address) \ void _##uniqueName##_Begin(void) _naked \ { \ _asm \ .area ABSCODE (ABS,CODE) \ _endasm; \ _asm \ .org address \ _endasm; \ } // return to normal mode by using this macro. #define END_CODE_ABS_LOCATION(uniqueName) \ void _##uniqueName##_End(void) _naked \ { \ _asm \ .area CSEG (REL,CODE) \ _endasm; \ } BEGIN_CODE_ABS_LOCATION(Task0, 0xABCD) // NOTE: No semicolon! void Task0 () { } END_CODE_ABS_LOCATION(Task0) // NOTE: No semicolon! I have copied it from a post on sdcc-user a long time ago but i don't remember the author :) |
From: Mary-Ann J. <Mar...@di...> - 2007-01-15 10:57:55
|
> On 1/12/07, Mary-Ann Johnson <Mar...@di...> wrote: >> I'm porting some 8051 assembler into C, and I need to locate some >> functions at specific memory locations. > Try something like the following: > ... > I have copied it from a post on sdcc-user a long time ago but > i don't remember the author :) That works nicely - many thanks! Mary-Ann |