Есть несколько способов подойти к этому.
struct + макросы
Самый простой способ - просто использовать структуру, возможно, с макросами:
struct {
unsigned short MinWaitTime;
unsigned short FaultCode;
...
} vars;
#define MinWaitTime (vars.MinWaitTime)
#define FaultCode (vars.FaultCode)
...
Это хорошо, потому что это именно то, для чего предназначена структура, но макросы не очень хороши.
Теоретически, " глобальная анонимная структура " сделает это так, что вы можете сделать это без макросов, но этого не существует.
Мнение: Я бы использовал структуру, но без макросов.
сборка
Другой способ сделать это - с небольшой помощью сборки. Вы можете создать отдельный исходный файл сборки со следующим кодом:
.data
.align 2
.globl MinWaitTime
MinWaitTime:
.zero 2
.globl FaultCode
FaultCode:
.zero 2
.globl FaultReg1
FaultReg1:
.zero 2
.globl FaultReg2
FaultReg2:
.zero 2
Это определяет переменные по последовательным адресам. Затем вы можете получить к ним доступ из C, просто объявив их extern где-нибудь в вашем исходном коде C:
extern unsigned short MinWaitTime;
extern unsigned short FaultCode;
extern unsigned short FaultReg1;
extern unsigned short FaultReg2;
extern
необходим только для того, чтобы вы не получили повторяющиеся определения.
Затем скомпилируйте и свяжите файлы C и сборки вместе.
Примечания
Обратите внимание, что здесь мы явно не заинтересованы в переносимости.