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

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

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

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

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

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

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

 
Опции темы
Непрочитано 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, время: 09:16.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot