Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Помогите запаковать строку в буфер и распаковать ее обратно.
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
-=Женек=-
отредактировал, так как почти со всем сам разобрался, остался один момент:
вот такая строка
sprintf(str,"%s",RF_RX_Buffer);
записывает в str содержимое буфера.

А как мне сделать чтобы в str писалось не с нулевого элемента буфера, а с 3-го?
Сергей Борщ
Вообще-то буфер и есть ваша строка. То, что вы делаете - простое копирование. Поэтому использовать sprintf - несколько расточительно и некрасиво. Обратите внимание на функции strcpy() и подобные.

Цитата(-=Женек=- @ Jun 6 2010, 13:26) *
А как мне сделать чтобы в str писалось не с нулевого элемента буфера, а с 3-го?
&RF_RX_Buffer[3]. И читать, читать, читать K&R.
-=Женек=-
Цитата
Вообще-то буфер и есть ваша строка. То, что вы делаете - простое копирование. Поэтому использовать sprintf - несколько расточительно и некрасиво. Обратите внимание на функции strcpy() и подобные.


Вон че крест животворящий делаит!!

Код
lcd_print(&RF_RX_Buffer[3], L_ALIGNED, NO_TRANSPARENCY);


Пашет! Спасибо.

А вот это безобразие как-нить рационализировать можно?

Код
void RF_PutString(unsigned int x, unsigned int y, unsigned char *txt)
{
   unsigned char c,i;

     RF_TX_Buffer[0]=0x3E;
     RF_TX_Buffer[1]=x;
     RF_TX_Buffer[2]=y;          
     i=2;        
    while((c = *txt++))           //Выполнять для всей строки
        {
          i++;
          RF_TX_Buffer[i]=c;
        }
}

//////////////////////////
unsigned char sss[60];
while(1)
{
sprintf(sss,"1234567",0);
RF_PutString(0,120,sss);
}


}
toweroff
а зачем
Код
sprintf(sss,"1234567",0);

делать в цикле?
-=Женек=-
Сигнал должен передаваться непрерывно и в течение этого цикла может изменяться. Это только пока в стадии отладки строка константа.
zltigo
Это:
Код
sprintf(sss,"1234567",0);

есть муть. Автор так и не понял, что ему Сергей написал. Просто скопировал какую-то очередную порцию "букв" sad.gif.
XVR
Цитата
А вот это безобразие как-нить рационализировать можно?
Нужно!
Код
void RF_PutString(unsigned int x, unsigned int y, unsigned char *txt)
{
     RF_TX_Buffer[0]=0x3E;
     RF_TX_Buffer[1]=x;
     RF_TX_Buffer[2]=y;          
     strcpy(RF_TX_Buffer+3,txt);
}

//////////////////////////
while(1)
{
RF_PutString(0,120,"1234567");
}


}
baralgin
Или лучше
Код
void RF_PutString(unsigned char x, unsigned char y, const /*unsigned*/ char txt[])

Да и вместо strcpy лучше будет strncpy, которая может ограничить как выход за пределы RF_TX_Buffer так и установить разумный предел для входного буфера(мало ли, вдруг без нуля на конце придёт). Или это слишком бюрократично для эмбеддеда? smile.gif
sergeeff
Цитата(XVR @ Jun 7 2010, 12:27) *
Код
while(1)
{
RF_PutString(0,120,"1234567");
}


Что за шаманство в бесконечном цикле?
-=Женек=-
Цитата(sergeeff @ Jun 7 2010, 20:38) *
Что за шаманство в бесконечном цикле?



Коллега, зрите пост №5.

Кстати вот так не катит, ошибку совместимости типов выдает.
Код
RF_PutString(0,120,"1234567");
sergeeff
По тому, как функцию надо определить:

Код
void RF_PutString(int x, int y, const char *pc);


А про while(1). У вас это под какой-нибудь OS реализовано?
-=Женек=-
Все равно не получается. "flas unsigned char* incompartible with unsigned char*"


Если что у меня CodeVision.

Цитата
А про while(1). У вас это под какой-нибудь OS реализовано?


Да нет. Я испытываю радиопередачу. Дабы не передергивать при испытании питание обоих устройств, одно из них у меня постоянно в приеме, а другое в передаче. Это временно.
sergeeff
Некоторые компиляторы имеют ключи интерпретации char типа: default char type is unsigned. Посмотрите, что у вас.
Сергей Борщ
Цитата(sergeeff @ Jun 8 2010, 08:48) *
Посмотрите, что у вас.
У него CodeVision и "строка" воспринимается как строка во флеш.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.