Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: указатель на __flash
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
andrvisht
Имеется вот такой код:
Код
void foo(void)
{
  volatile char c[] = {0x00, 0x00, 0x00, 0x00, 0x00};
  __flash static unsigned char ResetFrame[]={0x08,0x01,0x00,0x00,0x00};
  pFLASH = (__flash unsigned char *)ResetFrame;
  for (char i = 5; i != 0; i--)
  {
    c[i] = *(pFLASH+i);
  }
}

Указатель pFLASH
обьявлен ранее как
Код
unsigned char *pFLASH;

Копмилятору не нравиться строка
Код
pFLASH = (__flash unsigned char *)ResetFrame;
Error[Pe513]: a value of type "unsigned char __flash *" cannot be assigned to an entity of type "unsigned char *"

Если написать так
Код
(unsigned char __flash *)pFLASH = ResetFrame;
Error[Pe137]: expression must be a modifiable lvalue
Warning[Pe549]: variable "pFLASH" is used before its value is set

Конечно можно отдельно сделать указатель, тогда все работает, но вот с преобразованием не хотит sad.gif
Как это правиьно сделать ?
KRS
указатели на флеш и на рам не совместимы!!! используются разные команды для доступа к данным!! приведение типа ничего не даст, даже елси обмануть компилер!

надо описывать указатель так

unsigned char __flash *pFLASH;
IgorKossak
Цитата(&-rey @ Nov 30 2005, 11:25) *
...Как это правиьно сделать ?

Так и сделайте (в обьявлении):
Код
unsigned char __flash *pFLASH;

Дело в том, что для работы с RAM и FLASH используются разные инструкции, поэтому и указатели должны быть конкретными.

PS: KRS оказался проворнее wink.gif
andrvisht
Цитата(KRS @ Nov 30 2005, 13:29) *
указатели на флеш и на рам не совместимы!!! используются разные команды для доступа к данным!! приведение типа ничего не даст, даже елси обмануть компилер!

надо описывать указатель так

__flash unsigned char *pFLASH;

Понятно, было желание *2 но думал что С сам разберется.
кстати если записать

__flash unsigned char *pFLASH;

будет Error[Be009]: memory attributes not allowed on auto variables or parameters

а если
unsigned char __flash *pFLASH;
то все нормально.
Это связано с IAR? или где-то что-то нужно в опциях ?

Вообщем ясно, так и сделал. Просто хотел через так.
Old1
Цитата(&-rey @ Nov 30 2005, 12:35) *
кстати если записать

__flash unsigned char *pFLASH;

будет Error[Be009]: memory attributes not allowed on auto variables or parameters

Ты пытаешся переменную (типа указатель) засунуть в память программ, вот он иругается...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.