Условная иллюстрация:

Предполагается, что программы верхнего и нижнего уровня должны быть самостоятельными проектами, но один должен знать о том, где у другого адрес вызываемой процедуры. Как такое можно сделать?
Спасибо.

Код: Выделить всё
; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************
LR_IROM1 0x08000000 0x00020000 { ; load region size_region
ER_IROM1 0x08000000 0x00020000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_IRAM1 0x20000000 UNINIT 0x00000100 { ; RW data
*(NoInit)
}
RW_IRAM2 0x20000100 UNINIT 0x00000100 { ; RW data
*(Custom)
}
RW_IRAM3 0x20000200 0x00004E00 {
.ANY (+RW +ZI)
}
}
Код: Выделить всё
int var1 __attribute__( ( section( "NoInit"),zero_init) );
int var2 __attribute__( ( section( "Custom"),zero_init) );
Код: Выделить всё
void MyFunction (void) __attribute__ ((section ("MySection")));
Код: Выделить всё
ER_IROM2 0x0801A000 0x00006000 { ; load address = execution address
*(MySection)
}
Код: Выделить всё
uint32_t fnlist[]=
{
(uint32_t)func1,
(uint32_t)func2,
(uint32_t)func3,
(uint32_t)func4
};
Код: Выделить всё
// Здесь задать нужный прототип функций
typedef void (*fnptr)(void);
fnptr fnlist[]=
{
func1,
func2,
func3,
func4
};