可以定位数据 但是函数貌似不行 有问题
转变一下
void func (void)
{
printf("HELLO");
}
typedef struct _component_init {
char *name;
void (*fun)( void);
}component_init;
component_init A __attribute__((at(0x20000000))) = {"HELLO", func};
改变函数为数据!!!
如上可以!!
SRAM中放的地址 和 函数本身的地址 相差1 (暂时认为相当吧)
func();
A.fun();
基本可以判断一个这样的结构体需要8个HEX
嗨一下
__packed typedef struct _component_init {
char id;
void (*fun)( void);
}component_init;
component_init A __attribute__((at(0x20000000))) = {1, func};
看到这里 节约!!!
注意必须要__packed 否则char不是1 它不对齐 也是4
继续:
#define MODULE_DEVICE_TABLE(fun) \
component_init __mod_##fun \
__attribute__((at(0x20000000)))={COUNT++,fun};
此时必须放在函数内部!
void StartDefaultTask(void const * argument)
{MODULE_DEVICE_TABLE(func) ;
如果
MODULE_DEVICE_TABLE(func) ;
void StartDefaultTask(void const * argument)
{
就会:../Src/freertos.c(246): error: #57: this operator is not allowed in a constant expression
继续:
放弃了 太麻烦