在我们的项目中,我们有数百个用于错误代码的标识符,例如:
#define SYS_FAIL_EXCEP_PREFETCH_ABORT 0
#define SYS_FAIL_EXCEP_DATA_ABORT 1
#define SYS_FAIL_EXCEP_RESET 2
#define SYS_FAIL_EXCEP_UNDEFINED 3
#define SYS_FAIL_EXCEP_RESERVED 4
#define SYS_FAIL_EXCEP_IRQ_UNVECTORED 5
我们的要求之一是打印标识符的名称或文本。我们为此使用了一个查找表:
typedef struct HAL_Map_Text_ID_struct
{
unsigned int id;
char const * const text;
} HAL_Map_Text_ID_t;
static const HAL_Map_Text_ID_t system_failure_text_id_map[] =
{
// ID Text
// The following text has the prefix SYS_FAIL_EXCEP_
{SYS_FAIL_EXCEP_PREFETCH_ABORT, "PREFETCH_ABORT"},
{SYS_FAIL_EXCEP_DATA_ABORT, "DATA_ABORT"},
{SYS_FAIL_EXCEP_RESET, "RESET"},
{SYS_FAIL_EXCEP_UNDEFINED, "UNDEFINED"},
{SYS_FAIL_EXCEP_RESERVED, "RESERVED"},
{SYS_FAIL_EXCEP_IRQ_UNVECTORED, "IRQ_UNVECTORED"},
};
我们的问题是当有人添加标识符但忘记更新表时,表和错误代码列表可能不同步。
是否有一个习惯用法或其他过程,我们可以添加一个标识符并且表格会自动更新?
我们更喜欢标识符位于头文件中而表位于源文件中的解决方案。
此外,如果可能,解决方案应符合 MISRA。
(我们使用带有 IAR 嵌入式工作台的 C89,目标系统使用 ARM7 处理器。)