Например TDA7294

Форум РадиоКот • Просмотр темы - Срочно требуется консультация по IAR AVR
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Вс фев 22, 2026 16:49:19

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Срочно требуется консультация по IAR AVR
СообщениеДобавлено: Пн окт 29, 2012 21:04:20 
Поставщик валерьянки для Кота

Карма: 11
Рейтинг сообщений: 58
Зарегистрирован: Пт окт 31, 2008 09:38:55
Сообщений: 1957
Откуда: Одесса
Рейтинг сообщения: 0
реанимирую один комерческий проектик....он был писан давно в старом иаре
камень мега 324

организован вывод на экран через процедуру void LCD_Print(char __flash *,...);

теперь я хочу напечатать чтото
LCD_Print("%uг/л",fract);

fract это инт

так вот он ЗАЧЕМ-то "%uг/л" эту часть считает char* а не char __flash *
тоесть линкер качает эту строку в рам......НО ЗА ЧЕ М? как это можно убрать?
всё что мог гуглить - гуглил.....фигвам...

можно было бы через массив строковый конст флеш сделать но это ж звиздец...там этого текста тонны...да и наглядность падает

_________________
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Срочно требуется консультация по IAR AVR
СообщениеДобавлено: Вт окт 30, 2012 08:14:48 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 21
Рейтинг сообщений: 143
Зарегистрирован: Сб фев 21, 2009 13:11:40
Сообщений: 1900
Откуда: Москва
Рейтинг сообщения: 0
так Вы передаете не указатель, а строку. Где по Вашему должна храниться строка после вызова функции? Думаю в стеке, ведь это параметр функции...

_________________
Ставим плюсы: )


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Срочно требуется консультация по IAR AVR
СообщениеДобавлено: Вт окт 30, 2012 09:28:29 
Поставщик валерьянки для Кота

Карма: 11
Рейтинг сообщений: 58
Зарегистрирован: Пт окт 31, 2008 09:38:55
Сообщений: 1957
Откуда: Одесса
Рейтинг сообщения: 0
АГа...по идее вы правы но этот исходник был собран и работал хекс 2 года...и написано там было именно так.....и всё собиралось...
потом иаровцы чтото поменяли и понеслось....

я конечно вышел из ситуации обходным путём

Код:
static char __flash str4[]="%c %02d%02d%02d";
LCD_Print(str4,prefix,e.ts.hours,e.ts.minutes,e.ts.seconds);


да вот раньше то оно работало...и в кейле только что проверил - он позволяет так делать передавая ссылку на массив из flash .... Codevision аналогично работает

например

из библиотечки 44780
Код:
void lcd_putsf(char flash *str)
{
char k;
while (k=*str++) lcd_putchar(k);
}


а в любом месте где я хочу
Код:
lcd_putsf("Сбросить сист. пара-");


и никаких когнитивных диссонансов!
и потом
в этом же ИАРЕ printf ожидает char flash * в качестве первого параметра - тоесть форматную строку расположенную во флеше - ссылку на неё.....и это логично...зачем ЭТО копировать в рам?
я же явно указал что функции надо....а тут получается тройная работа....

страннно это как-то....я так понимаю что дело в галочке " plase string literals and constants in initialised ram" но вот беда она затемненная и не снимается что бы я не делал...и никакие ключики не помогают в коммандной строке

_________________
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Срочно требуется консультация по IAR AVR
СообщениеДобавлено: Вт окт 30, 2012 12:07:44 
Поставщик валерьянки для Кота

Карма: 11
Рейтинг сообщений: 58
Зарегистрирован: Пт окт 31, 2008 09:38:55
Сообщений: 1957
Откуда: Одесса
Рейтинг сообщения: 0
Ну в общем ладно с этими строками....вот кто мне обьяснит что в этих строках происходит....оно-то происходит правильно....но я чтото запутался...не могу допереть что это

есть обьявленная структура
Код:
struct rate
{
    uint8_t                 sen_type;      // sensor type
    uint16_t                sen_pulses;    // pulse count by one litre
    uint8_t                 motor;         // motor type
}


теперь в основном коде вот такое вот

Код:
struct rate _rate;
struct rate *rate = &_rate;


Как я понимаю что в первой строке создаётся экземпляр структуры rate с именем _rate
а потом создаётся переменная rate которая есть указатель на структуру rate и в неё записался адрес того прошлого экземпляра?

_________________
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: Срочно требуется консультация по IAR AVR
СообщениеДобавлено: Вт окт 30, 2012 12:46:56 
Друг Кота
Аватар пользователя

Карма: 32
Рейтинг сообщений: 482
Зарегистрирован: Сб сен 10, 2011 17:46:25
Сообщений: 3832
Рейтинг сообщения: 0
Еще про строки в иаре
можно в иаре птичку поставить Use command line options
--string_literals_in_flash

или типа так:
Код:
#define LCD_Puts_FLASH(s) {static __flash unsigned char str[] = s; LCD_Putsf(str);}
//----------
void LCD_Putsf(unsigned char __flash *str)
{
    unsigned char temp;
   
    while (temp=*str++)
    LCD_Data(temp, 1);
}
использовать:
LCD_Puts_FLASH("Start");


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Срочно требуется консультация по IAR AVR
СообщениеДобавлено: Вт окт 30, 2012 13:07:46 
Поставщик валерьянки для Кота

Карма: 11
Рейтинг сообщений: 58
Зарегистрирован: Пт окт 31, 2008 09:38:55
Сообщений: 1957
Откуда: Одесса
Рейтинг сообщения: 0
именно эту птичку и командную строку я и имел ввиду что пихал куда только ни попадя....или такой ключ не найден - или до фени

а по поводу второго....эмм...дык это...

проблема!

Код:
void LCD_Print(char __flash *pcFmt,...)
{
  va_list ap;
   
  va_start(ap,pcFmt);
  _medium_write_P(pcFmt, DOut, (void *) 0, &ap);
  va_end(ap);

}

void DOut(char c,void * dummy)
{
   if(c>=0xC0){
      c -= 0xC0;
      c = TabWin[c]; // Перекодировать
   }
   Write(c);
}



там вот такой вот код....это по ходу сделан принтф только строка параметров - параметр функции.... :)

_________________
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Срочно требуется консультация по IAR AVR
СообщениеДобавлено: Вт окт 30, 2012 13:29:15 
Поставщик валерьянки для Кота

Карма: 11
Рейтинг сообщений: 58
Зарегистрирован: Пт окт 31, 2008 09:38:55
Сообщений: 1957
Откуда: Одесса
Рейтинг сообщения: 0
кстати интересный вопрос

Код:

void fun1()
{
static int a=100;
a++;
}

void fun1()
{
static int a=100;
a--;
}



вопрос - по идее каждой из этих функций будет принадлежать своя переменная а ? и для первой функции она расти будет а для второй уменьшаться(функции вызываются одновременно)
или я чтото путаю?

_________________
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Срочно требуется консультация по IAR AVR
СообщениеДобавлено: Вт окт 30, 2012 13:54:04 
Друг Кота
Аватар пользователя

Карма: 32
Рейтинг сообщений: 482
Зарегистрирован: Сб сен 10, 2011 17:46:25
Сообщений: 3832
Рейтинг сообщения: 0
ключ у меня работает
использовал так:
Код:
strcpy_P( (char *)buf, (char __flash *) ( "HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n" ) );


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 88


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

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y