IAR for AVR vs constant strings

Do you have a question? Post it now! No Registration Necessary

Threaded View
Привет,

Имеем IAR AVR 2.28A. Фрагмент программы:

  typedef char __flash const * LPCSTR;

  typedef struct {
    BYTE bt;
    LPCSTR str;
  } SDummy;

  const __flash SDummy = {
    0x02,
    "Просто строка"
  };

Не собирается, ибо:

Error[Pe144]:a value of type "char *" cannot be used to initialize an
entity of type "CHAR const __flash *"

То есть, строка лежит во FLASH, но в стартапе копируется в SRAM. Как
этого избежать ? Необходимо, чтобы строка лежала только во FLASH и
нигде более. Что-то типа ключика --strings_in_flash_only

Всего хорошего.





--
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru

IAR for AVR vs constant strings
Wed Dec 17 2003 15:07, Alexey Krasnov wrote to All:


 AK> Имеем IAR AVR 2.28A. Фрагмент программы:

 AK>   typedef char __flash const * LPCSTR;

 AK>   typedef struct {
 AK>     BYTE bt;
 AK>     LPCSTR str;
 AK>   } SDummy;

 AK>   const __flash SDummy = {
 AK>     0x02,
 AK>     "Просто строка"
 AK>   };

 AK> Hе собирается, ибо:

 AK> Error[Pe144]:a value of type "char *" cannot be used to initialize an
 AK> entity of type "CHAR const __flash *"

 Стандартная фича IAR.
 Если хочется строки во flash, то писать надо так:
 
 static flash u8 str[] = "This string is in the flash";
 _flash  SDummy { 0x12, str };

 И никак иначе.

 VLV
 

"Добрый дятел занят делом - ремонтирует дупло"


Re: IAR for AVR vs constant strings
Привет, 17 декабря 2003 г., 16:40:08, ты писал(а):

 AK>> Имеем IAR AVR 2.28A. Фрагмент программы:

 AK>>   typedef char __flash const * LPCSTR;

 AK>>   typedef struct {
 AK>>     BYTE bt;
 AK>>     LPCSTR str;
 AK>>   } SDummy;

 AK>>   const __flash SDummy = {
 AK>>     0x02,
 AK>>     "Просто строка"
 AK>>   };

 AK>> Hе собирается, ибо:

 AK>> Error[Pe144]:a value of type "char *" cannot be used to initialize an
 AK>> entity of type "CHAR const __flash *"

VV>  Стандартная фича IAR.
VV>  Если хочется строки во flash, то писать надо так:
 
VV>  static flash u8 str[] = "This string is in the flash";
VV>  _flash  SDummy { 0x12, str };

VV>  И никак иначе.

Так и пришлось сделать. Но жутко неудобно, когда таких строк много.

Всего хорошего.





--
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru

Re: IAR for AVR vs constant strings
    Всем привет!

Alexey Krasnov писал  17.12.2003:

 AK> То есть, строка лежит во FLASH, но в стартапе копируется в SRAM. Как
 AK> этого избежать ? Необходимо, чтобы строка лежала только во FLASH и
 AK> нигде более. Что-то типа ключика --strings_in_flash_only

есть такой ключик: --string_literals_in_flash

--
Аскольд Волков, Новосибирск. http://www.inp.nsk.su/~volkov /


Re: IAR for AVR vs constant strings
Привет, 18 декабря 2003 г., 7:50:10, ты писал(а):

 AK>> То есть, строка лежит во FLASH, но в стартапе копируется в
 AK>> SRAM. Как
 AK>> этого избежать ? Необходимо, чтобы строка лежала только во FLASH и
 AK>> нигде более. Что-то типа ключика --strings_in_flash_only
AV> есть такой ключик: --string_literals_in_flash

О! Спасибо. Только непонятно почему он кладет эти строки в farflash,
хотя в опциях выставлено:
  --cpu=m128 \
  --memory_model=small \

Всего хорошего.





--
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru

Site Timeline