реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> [РЕШЕНО] IAR. EEPROM. Ошибка при компилировании
demiurg1978
сообщение Jan 8 2017, 17:37
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 320
Регистрация: 19-12-13
Из: Новосибирск
Пользователь №: 79 709



Компилятор выдает ошибку
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++;
         }


Сообщение отредактировал demiurg1978 - Jan 8 2017, 18:57
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 8 2017, 18:37
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(demiurg1978 @ Jan 8 2017, 19:37) *
Не могу понять причину.

Что именно в сообщении "expression must have arithmetic or pointer" Вам непонятно то?
Ответьте себе на вопрос, что Вы вознамерились сравнить. На вопрос почему структура не есть ни арифметический тип, ни указатель - ну хотя бы любой букварь по языку Си потрудитесь в руки взять.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
demiurg1978
сообщение Jan 8 2017, 18:57
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 320
Регистрация: 19-12-13
Из: Новосибирск
Пользователь №: 79 709



Цитата(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;
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st September 2017 - 10:31
Рейтинг@Mail.ru


Страница сгенерированна за 0.01504 секунд с 7
ELECTRONIX ©2004-2016