Инициализация постоянной структуры - PullRequest
0 голосов
/ 08 мая 2018

Я хотел бы создать постоянную структуру во flash. Эта структура будет состоять из элементов различного размера, включая строковые массивы, шорты, байты и т. Д. Строки должны заканчиваться нулем, но могут не полностью заполнять выделенную для этого область хранения массива. Приведенный ниже код - это то, что у меня есть, но компилятор выдает следующую ошибку.

../Source/flash_constants.h:1025:33: error: expected ':', ',', ';', '}' or '__attribute__' before '=' token
   const unsigned char Reg00[32] = "My String 1";

const unsigned char Reg00[32] = "My String 1"; является допустимым оператором вне определения структуры, но завершается ошибкой внутри определения структуры.

Спасибо.

struct
{
  const unsigned char Reg00[32] = "My String 1";
  const unsigned char Reg01[32] = "My String 2";
  const unsigned char Reg02[32] = "My String 3";
  const unsigned short Reg03 = 0;
  const unsigned short Reg04 = 0;
} ModBusIDReg;

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Вы также можете использовать назначенные инициализаторы (C99), которые не ограничивают вас в инициализации членов в фиксированном порядке:

struct
{
  const unsigned char Reg00[32];
  const unsigned char Reg01[32];
  const unsigned char Reg02[32];
  const unsigned short Reg03;
  const unsigned short Reg04;
} const ModBusIDReg = {

    .Reg01 = "My String 2",
    .Reg00 = "My String 1",
    .Reg02 = "My String 3",
};

Члены, которые не были явно инициализированы, инициализируются так, как если бы экземпляр имел статическую длительность, поскольку C не имеет частичной инициализации.

0 голосов
/ 08 мая 2018

Нельзя делать встроенную инициализацию структур в C.

Вам необходимо определить структуру, определить переменную и затем инициализировать переменную:

struct
{
  const unsigned char Reg00[32];
  const unsigned char Reg01[32];
  const unsigned char Reg02[32];
  const unsigned short Reg03;
  const unsigned short Reg04;
} const ModBusIDReg = {
    "My String 1",
    "My String 2",
    "My String 3",
    0,
    0
};
...