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

 
 
 
Reply to this topicStart new topic
> Ссылки в winavr - varning, Что делаю неправильно при работе с сылками.
Igor_U
сообщение Nov 29 2005, 08:25
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 34
Регистрация: 2-10-05
Пользователь №: 9 141



Есть массив AdrDecodeReciver[] во флеше в котором описаны адреса данных в структурах (озу), все данные 16-ти битные. Задача сформировать массив Usart[] из данных которые описаны в AdrDecodeReciver[].

Вот массив:
Код
const uint16_t *AdrDecodeReciver[NumberReciver+NumberTranciver] PROGMEM=
  {
  &ResultFirst.VoltageOff,
  &ResultFirst.CurrentOff,
  ........
  };


Вот функция которая это делает:

Код
extern void CopyReciverData(void)
{
uint8_t i;
uint16_t *Adr;

for (i=0;i<(NumberTranciver+NumberReciver);i++)
  {
    Adr=pgm_read_word(&AdrDecodeReciver[i]);
    Usart[i]=*Adr;
  }
}


Компилятор выдает варнинг:warning: assignment makes pointer from integer without a cast. Хотя компилит правильный код.
Как написать правильно?
Go to the top of the page
 
+Quote Post
Виктория
сообщение Nov 29 2005, 09:03
Сообщение #2


инженер
****

Группа: Свой
Сообщений: 520
Регистрация: 19-09-05
Из: Самара
Пользователь №: 8 701



Цитата(Igor_U @ Nov 29 2005, 12:25) *
Компилятор выдает варнинг:warning: assignment makes pointer from integer without a cast. Хотя компилит правильный код.
Как написать правильно?


Ну и введите операцию приведения типа в той строке, в которой компилятор просит.
Go to the top of the page
 
+Quote Post
Postoroniy_V
сообщение Nov 29 2005, 09:05
Сообщение #3


МедвеД Инженер I
****

Группа: Свой
Сообщений: 816
Регистрация: 21-10-04
Пользователь №: 951



Цитата(Igor_U @ Nov 29 2005, 11:25) *
Есть массив AdrDecodeReciver[] во флеше в котором описаны адреса данных в структурах (озу), все данные 16-ти битные. Задача сформировать массив Usart[] из данных которые описаны в AdrDecodeReciver[].

Вот массив:
Код
const uint16_t *AdrDecodeReciver[NumberReciver+NumberTranciver] PROGMEM=
  {
  &ResultFirst.VoltageOff,
  &ResultFirst.CurrentOff,
  ........
  };


Вот функция которая это делает:

Код
extern void CopyReciverData(void)
{
uint8_t i;
uint16_t *Adr;

for (i=0;i<(NumberTranciver+NumberReciver);i++)
  {
    Adr=pgm_read_word(&AdrDecodeReciver[i]);
    Usart[i]=*Adr;
  }
}


Компилятор выдает варнинг:warning: assignment makes pointer from integer without a cast. Хотя компилит правильный код.
Как написать правильно?

компилеру "не нравится" видимо строка
Adr=pgm_read_word(&AdrDecodeReciver[i]);
сделайте так
Adr=(const uint16_t *)pgm_read_word(&AdrDecodeReciver[i]);


--------------------
Cogito ergo sum
Go to the top of the page
 
+Quote Post
Igor_U
сообщение Nov 29 2005, 09:36
Сообщение #4


Участник
*

Группа: Новичок
Сообщений: 34
Регистрация: 2-10-05
Пользователь №: 9 141



Ок. Спасибо. Было проглоченно. Сделал одним оператором: Usart[i]=*(uint16_t*)pgm_read_word(&AdrDecodeReciver[i]).
Но мне не понятно, почему приходится делать преобразование. Ведь я из массива AdrDecodeReciver беру именно указатели, при инициализации это явно указано. Почему же компилятор забывает об этом и считает, что я беру просто слово? Как-то не совсем понятно. Ожидаемо было бы наоборот - ругань в случае использования данных из AdrDecodeReciver не как указатели.
Go to the top of the page
 
+Quote Post
Postoroniy_V
сообщение Nov 29 2005, 10:03
Сообщение #5


МедвеД Инженер I
****

Группа: Свой
Сообщений: 816
Регистрация: 21-10-04
Пользователь №: 951



что возвращает фуркция pgm_read_word?
задавайтесь этим вопросом каждый раз когда вам нужен именно указатель именно на тот тип какой вам нужен smile3046.gif


--------------------
Cogito ergo sum
Go to the top of the page
 
+Quote Post
Igor_U
сообщение Nov 29 2005, 10:15
Сообщение #6


Участник
*

Группа: Новичок
Сообщений: 34
Регистрация: 2-10-05
Пользователь №: 9 141



Цитата
что возвращает фуркция pgm_read_word?


ОК. Теперь понятно. Спасибо.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 21:15
Рейтинг@Mail.ru


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