IAR for AVR vs constant strings

Dec 17, 2003 4 Replies

Привет,



Имеем 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



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


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

"äÏÂÒÙÊ ÄÑÔÅÌ ÚÁÎÑÔ ÄÅÌÏÍ - ÒÅÍÏÎÔÉÒÕÅÔ ÄÕÐÌÏ"

Привет, 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> И никак иначе.

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

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

Всем привет!

Alexey Krasnov писал 17.12.2003:

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

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

Привет, 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 \

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

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required