реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Помогите запаковать строку в буфер и распаковать ее обратно.
-=Женек=-
сообщение Jun 6 2010, 10:26
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 559
Регистрация: 6-09-06
Пользователь №: 20 131



отредактировал, так как почти со всем сам разобрался, остался один момент:
вот такая строка
sprintf(str,"%s",RF_RX_Buffer);
записывает в str содержимое буфера.

А как мне сделать чтобы в str писалось не с нулевого элемента буфера, а с 3-го?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 6 2010, 11:24
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



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

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


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
-=Женек=-
сообщение Jun 6 2010, 11:43
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 559
Регистрация: 6-09-06
Пользователь №: 20 131



Цитата
Вообще-то буфер и есть ваша строка. То, что вы делаете - простое копирование. Поэтому использовать 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);
}


}
Go to the top of the page
 
+Quote Post
toweroff
сообщение Jun 6 2010, 14:13
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



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

делать в цикле?
Go to the top of the page
 
+Quote Post
-=Женек=-
сообщение Jun 6 2010, 14:36
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 559
Регистрация: 6-09-06
Пользователь №: 20 131



Сигнал должен передаваться непрерывно и в течение этого цикла может изменяться. Это только пока в стадии отладки строка константа.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 6 2010, 15:33
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Это:
Код
sprintf(sss,"1234567",0);

есть муть. Автор так и не понял, что ему Сергей написал. Просто скопировал какую-то очередную порцию "букв" sad.gif.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
XVR
сообщение Jun 7 2010, 09:27
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата
А вот это безобразие как-нить рационализировать можно?
Нужно!
Код
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");
}


}
Go to the top of the page
 
+Quote Post
baralgin
сообщение Jun 7 2010, 09:56
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 92
Регистрация: 23-12-08
Из: Кишинёв
Пользователь №: 42 680



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

Да и вместо strcpy лучше будет strncpy, которая может ограничить как выход за пределы RF_TX_Buffer так и установить разумный предел для входного буфера(мало ли, вдруг без нуля на конце придёт). Или это слишком бюрократично для эмбеддеда? smile.gif
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Jun 7 2010, 16:38
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Цитата(XVR @ Jun 7 2010, 12:27) *
Код
while(1)
{
RF_PutString(0,120,"1234567");
}


Что за шаманство в бесконечном цикле?
Go to the top of the page
 
+Quote Post
-=Женек=-
сообщение Jun 7 2010, 17:26
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 559
Регистрация: 6-09-06
Пользователь №: 20 131



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



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

Кстати вот так не катит, ошибку совместимости типов выдает.
Код
RF_PutString(0,120,"1234567");
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Jun 7 2010, 17:36
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



По тому, как функцию надо определить:

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


А про while(1). У вас это под какой-нибудь OS реализовано?
Go to the top of the page
 
+Quote Post
-=Женек=-
сообщение Jun 7 2010, 18:45
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 559
Регистрация: 6-09-06
Пользователь №: 20 131



Все равно не получается. "flas unsigned char* incompartible with unsigned char*"


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

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


Да нет. Я испытываю радиопередачу. Дабы не передергивать при испытании питание обоих устройств, одно из них у меня постоянно в приеме, а другое в передаче. Это временно.
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Jun 8 2010, 05:48
Сообщение #13


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Некоторые компиляторы имеют ключи интерпретации char типа: default char type is unsigned. Посмотрите, что у вас.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 8 2010, 12:02
Сообщение #14


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(sergeeff @ Jun 8 2010, 08:48) *
Посмотрите, что у вас.
У него CodeVision и "строка" воспринимается как строка во флеш.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 7th July 2025 - 11:12
Рейтинг@Mail.ru


Страница сгенерированна за 0.01494 секунд с 7
ELECTRONIX ©2004-2016