私たちのプロジェクトでは、エラー コードに使用される何百もの識別子があります。例:
#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
私たちの要件の 1 つは、識別子の名前またはテキストを出力することです。これにはルックアップ テーブルを使用します。
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 に準拠する必要があります。
(ARM7 プロセッサを使用するターゲット システムで、IAR 組み込みワークベンチで C89 を使用しています。)