Мои уважаемые знающие люди, у меня есть вопрос о строках в IAR AVR(+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Alexaндр Алекsandrson 17 декабря 2004 г. 09:40

в общем, у меня есть функция, принимающая параметр - текстовую строку
FUN(" :( "); при этом, для того чтобы параметр внутри неё обрабатывался как массив во флэш памяти функция написана вот так:
void FUN(const char flash * Text)
{
char a;
a = Text[0];
}
При этом в листинге компиляции FUN, видно то, что Text[0] именно во флэш памяти,
Проблема возникает при вызове этой функции, FUN("Parametr");
"Parametr" компилятором воспринимается как массив в памяти данных в
сегменте CSTR а преобразовать указатель компилятор не хочет. Вопрос первый: можно ли как нибудь описать функцию FUN, таким образом чтобы вызывать её в виде FUN("Parametr");, но при этом чтобы она считала что "Parametr" во флэш памяти

Вопрос второй: дело в том что пока FUN вызывалась в файле , где компилятор не видел её прототипа программа не только компилировалась но и работала(!!), попытавшись разобраться в этом я установил что в XCL файле сегмент CSTR был расположен по адресу 0х9000 во внешней RAM,
которой реально не сущесвовало, но в памяти программ по этому же адресу располагалась точно такая же текстовая строка(изменение адреса начала CSTR приводило и к изменению начала близнца во флэше), на первый взгляд ничего сташного в этом нет сегмент IDATA имеет своё зеркало во flash CDATA, но в этом случае зеркало для CSTR вообще не было расположено ни в каком сегменте(это из анализа map файла), но самое удивительное произошло когда я в XCL файле указал распологать CSTR вслед за сегментами данных(UDATA,IDATA,CSTR), причём "близнец" должен был перекрыть сегмент CODE. Линковщик собрал проект, не выдал ошибок.
Но после этого программатор обнаружил что в моём hex файле перекрываются блоки информации как раз по адресу CSTR :( , после чего мне стало очень непонятно, что же происходит реально с сегментом CSTR,
где же он должен располагаться (RAM or FLASH), и сущесвует ли злой близнец иди глючит линковщик.
Если кто нибудь сталкивался с такими аномалиями, прошу вас ответить
(IAR2.20, AVreal) :^( сумеречное состояние души

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru