📄 regist.h
字号:
#ifndef __REGISTER_H__
#define __REGISTER_H__
// 出口表中每一个结构中最大项的个数
#define EXPORT_TABLE_MAX_ITEM 128
// 申明第n级类型为ExportType的出口表
#define DECLARE_EXPORT_TABLE(ExportType, n) \
static ulong theExport##n##ExportType[EXPORT_TABLE_MAX_ITEM]
// 将ExportType类型的第n2级结构注册到n1级中
#define REGISTER_STRUCT(ExportType, n1, n2) \
do\
{\
uint i;\
ulong *paddr = (ulong*)&theExport##n1##ExportType[0];\
\
/* 将n1数组里的每个分量都赋值为n2数组的首地址 */ \
for (i = 0; i < sizeof(theExport##n1##ExportType)/sizeof(ulong); i++)\
{\
*paddr++ = (ulong)&theExport##n2##ExportType[0];\
}\
}while(0)
// 将函数注册到ExportType类型第n级结构中,用于注册缺省函数
#define REGISTER_FUNCTION(ExportType, n, Function) \
do\
{\
uint i;\
ulong *paddr = (ulong*)&theExport##n##ExportType[0];\
\
/* 将数组里的每个分量都赋值为函数地址 */ \
for (i = 0; i < sizeof(theExport##n##ExportType)/sizeof(ulong); i++)\
{\
*paddr++ = (ulong)Function;\
}\
}while(0)
// 检查模块ModuleName,类型TypeName的模块是否已经载入,如果载入,将模块提供的出口表
// 赋给ExportPonter,否则将我们默认的ExportType结构类型的第n级结构地址赋给ExportPonter
// 这样当模块没有载入的时候,调用模块提供的然后函数都会跳到我们定义的函数去
#define RETRIEVE_EXPORT_TABLE(ExportType, n, ModuleName, TypeName, ExportPonter) \
do\
{ \
uint ModuleID;\
\
ExportPonter = NULL; \
/* 检查模块是否已经载入 */ \
EA_vGetModuleID(ModuleName, TypeName, &ModuleID);\
if (ModuleID != EM_rtos_INVALID)\
{\
ExportPonter = EA_pvRetrieveExportTable(ModuleID,0); \
}\
\
/* 如果模块没有载入或获取出口表失败则使用我们默认的出口表 */ \
if (!ExportPonter)\
{\
ExportPonter = (ExportType *)&theExport##n##ExportType[0];\
}\
}while(0)
#endif // __REGISTER_H__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -