Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: [РЕШЕНО] IAR. EEPROM. Ошибка при компилировании
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
demiurg1978
Компилятор выдает ошибку
Error[Pe041]: expression must have arithmetic or pointer type E:\Work\Projects\DELTA_SKREPER\DELTA_SKREPER\proc_device.c 167

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

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

CODE

//========================================================================
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++;
         }
zltigo
Цитата(demiurg1978 @ Jan 8 2017, 19:37) *
Не могу понять причину.

Что именно в сообщении "expression must have arithmetic or pointer" Вам непонятно то?
Ответьте себе на вопрос, что Вы вознамерились сравнить. На вопрос почему структура не есть ни арифметический тип, ни указатель - ну хотя бы любой букварь по языку Си потрудитесь в руки взять.
demiurg1978
Цитата(zltigo @ Jan 9 2017, 00:37) *
...

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

Решено:
Код
      if ((ptr_1 -> hours != ptr_2 -> hours) || (ptr_1 -> minutes != ptr_2 -> minutes) || (ptr_1 -> seconds != ptr_2 -> seconds))
         *ptr_1 = *ptr_2;
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.