Перейти к содержанию
    

[РЕШЕНО] IAR. EEPROM. Ошибка при компилировании

Компилятор выдает ошибку

Error[Pe041]: expression must have arithmetic or pointer type E:\Work\Projects\DELTA_SKREPER\DELTA_SKREPER\proc_device.c 167

 

Ошибку выдает при разных вариантах.

 

Не могу понять причину.

 

//========================================================================
typedef struct time_t
{
  u08 hours;
  u08 minutes;
  u08 seconds;
} time_t;

extern struct time_t start_time_list [];
//========================================================================

#pragma location = 0x14
__eeprom struct time_t ee_start_time_list [24] = 
{
  0,  0, 0,
  1,  0, 0,
  2,  0, 0,
  3,  0, 0,
  4,  0, 0,
  5,  0, 0,
  6,  0, 0,
  7,  0, 0,
  8,  0, 0,
  9,  0, 0,
  10, 0, 0,
  11, 0, 0,
  12, 0, 0,
  13, 0, 0,
  14, 0, 0,
  15, 0, 0,
  16, 0, 0,
  17, 0, 0,
  18, 0, 0,
  19, 0, 0,
  20, 0, 0,
  21, 0, 0,
  22, 0, 0,
  23, 0, 0,
};

  for (u08 i = 0; i < 24; i++)
  {
//      if (ee_start_time_list [i] != start_time_list [i])
//         ee_start_time_list [i] = start_time_list [i];

     struct time_t __eeprom *ptr_1 = ee_start_time_list;
     struct time_t *ptr_2 = start_time_list;

     if (*ptr_1 != *ptr_2)
        *ptr_1 = *ptr_2;

     ptr_1++;
     ptr_2++;
  }

 

Ошибка появляется при проверке if. На этот кусок кода ошибки нет.

 

         for (u08 i = 0; i < 24; i++)
         {
                        //start_time_list [i] = ee_start_time_list [i];

            struct time_t *ptr_1 = start_time_list;
            struct time_t __eeprom *ptr_2 = ee_start_time_list;

            *ptr_1 = *ptr_2;

            ptr_1++;
            ptr_2++;
         }

Изменено пользователем demiurg1978

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не могу понять причину.

Что именно в сообщении "expression must have arithmetic or pointer" Вам непонятно то?

Ответьте себе на вопрос, что Вы вознамерились сравнить. На вопрос почему структура не есть ни арифметический тип, ни указатель - ну хотя бы любой букварь по языку Си потрудитесь в руки взять.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...

Благодарю. Вы натолкнули на ответ.

 

Решено:

      if ((ptr_1 -> hours != ptr_2 -> hours) || (ptr_1 -> minutes != ptr_2 -> minutes) || (ptr_1 -> seconds != ptr_2 -> seconds))
         *ptr_1 = *ptr_2;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...