|
|
  |
Помогите запаковать строку в буфер и распаковать ее обратно. |
|
|
|
Jun 6 2010, 11:24
|

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
|
Jun 6 2010, 11:43
|
Знающий
   
Группа: Свой
Сообщений: 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); }
}
|
|
|
|
|
Jun 6 2010, 15:33
|

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

|
Это: Код sprintf(sss,"1234567",0); есть муть. Автор так и не понял, что ему Сергей написал. Просто скопировал какую-то очередную порцию "букв"  .
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jun 7 2010, 09:27
|
Гуру
     
Группа: Свой
Сообщений: 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"); }
}
|
|
|
|
|
Jun 7 2010, 09:56
|
Частый гость
 
Группа: Участник
Сообщений: 92
Регистрация: 23-12-08
Из: Кишинёв
Пользователь №: 42 680

|
Или лучше Код void RF_PutString(unsigned char x, unsigned char y, const /*unsigned*/ char txt[]) Да и вместо strcpy лучше будет strncpy, которая может ограничить как выход за пределы RF_TX_Buffer так и установить разумный предел для входного буфера(мало ли, вдруг без нуля на конце придёт). Или это слишком бюрократично для эмбеддеда?
|
|
|
|
|
Jun 7 2010, 17:26
|
Знающий
   
Группа: Свой
Сообщений: 559
Регистрация: 6-09-06
Пользователь №: 20 131

|
Цитата(sergeeff @ Jun 7 2010, 20:38)  Что за шаманство в бесконечном цикле? Коллега, зрите пост №5. Кстати вот так не катит, ошибку совместимости типов выдает. Код RF_PutString(0,120,"1234567");
|
|
|
|
|
Jun 7 2010, 17:36
|
Профессионал
    
Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007

|
По тому, как функцию надо определить: Код void RF_PutString(int x, int y, const char *pc); А про while(1). У вас это под какой-нибудь OS реализовано?
|
|
|
|
|
Jun 7 2010, 18:45
|
Знающий
   
Группа: Свой
Сообщений: 559
Регистрация: 6-09-06
Пользователь №: 20 131

|
Все равно не получается. "flas unsigned char* incompartible with unsigned char*" Если что у меня CodeVision. Цитата А про while(1). У вас это под какой-нибудь OS реализовано? Да нет. Я испытываю радиопередачу. Дабы не передергивать при испытании питание обоих устройств, одно из них у меня постоянно в приеме, а другое в передаче. Это временно.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|