Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

Строки в компиляторе IAR

Непрочитано 24.03.2008, 16:42  
GLVlad
Временная регистрация
 
Регистрация: 29.09.2006
Сообщений: 64
Сказал спасибо: 0
Сказали Спасибо 23 раз(а) в 1 сообщении
GLVlad на пути к лучшему
По умолчанию Строки в компиляторе IAR

Всем привет.
Может кто подскажет по IAR'у. Не то что проблемма, просто для удобства:

Есть функция, что выводит строку на устройство из flash памяти, например SendMessage(__flash char src*). При объявлении строки переменной заранее она располагается в flash, а если указать непосредственно в функции( SendMessage("Some text") ), то строка занимает оперативную память (или как минимум указатель на строку). Можно ли заставить каким-либо образом во втором варианте строку сохранять в flash.
Компилятор CodeVisionAVR это делает, GNU похоже тоже(я правда с ним не работал).

Заранее спасибо.
Реклама:
GLVlad вне форума  
Непрочитано 25.03.2008, 12:09  
tws
Прохожий
 
Регистрация: 15.04.2005
Сообщений: 9
Сказал спасибо: 10
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
tws на пути к лучшему
По умолчанию

Неплохо было бы указатькакой именно IAR используется. В общем случае, это определяется в конфигурации Linker-а. Можно посмотреть, в какой сегмент компилятор пристраивает эти константы (4.11 for AVR клаюёт в NEAR_ID, ARM-овский - вообще прямо в код). И проследить, чтобы этот сегмент линковался во влэш. Причём у меня, почему-то, всегда так и было.
tws вне форума  
Непрочитано 25.03.2008, 13:08  
GLVlad
Временная регистрация
 
Регистрация: 29.09.2006
Сообщений: 64
Сказал спасибо: 0
Сказали Спасибо 23 раз(а) в 1 сообщении
GLVlad на пути к лучшему
По умолчанию

День добрый.

Пользую IAR for AVR 4.30A. Пользуюсь недолго, поэтому всех тонкостей и не знаю.

Может я что-то не так делаю. Примерный код ниже.

Str размещает в NEAR_F.
А для непосредственного вызова похоже использует два сегмента: NEAR_ID в flash и NEAR_I в оперативной памяти.

char __flash str[] = "Str sample";

void sendMessage(char __flash *src)
{
}


int main()
{

sendMessage(str);
sendMessage((char __flash *)("Message"));

return 0;
}
[/i][/b]
GLVlad вне форума  
Непрочитано 25.03.2008, 15:20  
ARM7TDMI
Частый гость
 
Регистрация: 24.10.2007
Сообщений: 24
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
ARM7TDMI на пути к лучшему
По умолчанию

Откуда можно скачать IAR for AVR 4.30 ?
В гугле искал но ничего толком не нашел.
ARM7TDMI вне форума  
Непрочитано 26.03.2008, 01:25  
mikle2000
Частый гость
 
Регистрация: 26.08.2006
Сообщений: 34
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
mikle2000 на пути к лучшему
По умолчанию

Сообщение от GLVlad
День добрый.



char __flash str[] = "Str sample";

void sendMessage(char __flash *src)
{
}


int main()
{

sendMessage(str);
sendMessage((char __flash *)("Message"));

return 0;
}
[/i][/b]
Используйте указатель на указатель и будет вам счастье.
Например (рабочий):
объявите строку и указатель на строку:
const unsigned char __flash S3[] = "ERROR";
const unsigned char __flash *searchStringsSS[1] = {S3};

Функция для работы с таким указателем выглядит:
unsigned char SearchRespons (const unsigned char __flash **fstr)

Вызывайте функцию вот так:
... = SearchRespons(searchStringsSS);

Это частный случай работы с массивом строк во flash.
mikle2000 вне форума  
Непрочитано 26.03.2008, 10:39  
alekseyb
Частый гость
 
Регистрация: 23.05.2005
Сообщений: 16
Сказал спасибо: 4
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
alekseyb на пути к лучшему
По умолчанию

IAR 430A
http://rubeg.bratsk.ru/files/ewavr-ev-web-430A.exe
alekseyb вне форума  
Непрочитано 27.03.2008, 10:42  
GLVlad
Временная регистрация
 
Регистрация: 29.09.2006
Сообщений: 64
Сказал спасибо: 0
Сказали Спасибо 23 раз(а) в 1 сообщении
GLVlad на пути к лучшему
По умолчанию

Сообщение от mikle2000
Сообщение от GLVlad
День добрый.



char __flash str[] = "Str sample";

void sendMessage(char __flash *src)
{
}


int main()
{

sendMessage(str);
sendMessage((char __flash *)("Message"));

return 0;
}
[/i][/b]
Используйте указатель на указатель и будет вам счастье.
Например (рабочий):
объявите строку и указатель на строку:
const unsigned char __flash S3[] = "ERROR";
const unsigned char __flash *searchStringsSS[1] = {S3};

Функция для работы с таким указателем выглядит:
unsigned char SearchRespons (const unsigned char __flash **fstr)

Вызывайте функцию вот так:
... = SearchRespons(searchStringsSS);

Это частный случай работы с массивом строк во flash.
Видно не совсем ясно задал вопрос. С указателями и так все понятно.
Вопрос вот в чем.
Если делать вызов sendMessage(str), то str храниться в сегменте NEAR_F(т.е. в flash) и ОЗУ не используется.
Если же делать вызов sendMessage((char __flash *)("Message")), то строка "Message" размещается в сегменте NEAR_ID(в flash) для инициализации сегмента NEAR_I(в ОЗУ) и после приведения типа в функцию передается к тому же неверный указатель.
Позволяет ли компилятор ИАР строки из вызова sendMessage((char __flash *)("Message")) помещать в NEAR_F, не тратя при этом напрасно ОЗУ?
GLVlad вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Строки для AVR ArtUrl1986 Микроконтроллеры, АЦП, память и т.д 8 02.09.2009 23:26
IAR EWEZ80 изчез с сайта IAR где взять? int4880053 Микроконтроллеры, АЦП, память и т.д 0 26.05.2009 20:03
IAR C для i51 (IAR Embedded Workbench) List Микроконтроллеры, АЦП, память и т.д 2 01.12.2005 11:22
Прошивка для бегущей строки pic16f877 CJ CooL Микроконтроллеры, АЦП, память и т.д 6 03.11.2005 12:00


Часовой пояс GMT +4, время: 20:20.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.