|
Виж темите без отговор | Виж активните теми
Дата и час: Вто Юли 28, 2026 1:40 am
|
Страница 1 от 1
|
[ 10 мнения ] |
|
комуникация между два пик-а
| Автор |
Съобщение |
|
mash
Ранг: Новодошъл
Регистриран на: Пет Окт 27, 2006 6:23 pm Мнения: 162 Местоположение: Севлиево
|
 комуникация между два пик-а
Здравейте !
Имам проблем с комуникирането по rs232 между два пик-а.
Искам от единия да изпратя на другия числото 3,14 , но на приемния на лцд-то не излиза нищо коректно.
Излолзвам CCS C.
ето кода за предаване :
float digit;
.............
.............
.............
digit=3.14;
printf("%f5.2",digit);
За да ми излезе това число на дисплея на другия пик ползвам:
char str[20];
#int_RDA
void RDA_isr(void)
{
gets(str);
}
printf(LCD_PUTC, "\ndigit= %s ",str);
Но нищо не се получава....
Когато го изпращам към хипер терминала излиза без проблем !!!
Къде евентуално греша ?
|
| Съб Авг 25, 2007 5:44 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
gets() ако не ме лъже паметта очаква край а стринга, демек терминатор, /r или /n не я ползвам тая функция и не помня точно кое очакваше това едното ..
|
| Съб Авг 25, 2007 11:13 pm |
|
 |
|
mash
Ранг: Новодошъл
Регистриран на: Пет Окт 27, 2006 6:23 pm Мнения: 162 Местоположение: Севлиево
|
Мисля, че нее в това проблема.
Жалко, че никой в този форум не иска да ми каже.
Предполагам, че грешката е елементарна.
|
| Нед Авг 26, 2007 11:49 am |
|
 |
|
woody
Ранг: Форумен бог
Регистриран на: Вто Юли 31, 2007 2:55 pm Мнения: 1792 Местоположение: София
|
А защо не пробваш все пак да сложиш един '\n' на края на стринга дето се праща?
|
| Нед Авг 26, 2007 12:14 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
Ти мислиш, но аз не мисля
Reads characters (using GETC()) into the string until a RETURN (value 13) is encountered. The string is terminated with a 0. Note that INPUT.C has a more versatile GET_STRING function. Това ти е един от проблемите, ама не искаш да слуаш и да четеш, я кажи в хипер-терминала всеки пакет данни на един отделен ред ли излиза или не, според мен излизат на еидн ред една след друга.
|
| Нед Авг 26, 2007 12:15 pm |
|
 |
|
Yanek
Ранг: Новодошъл
Регистриран на: Пет Юни 29, 2007 10:59 pm Мнения: 113
|
Да питам: Наистина ли използваш printf или е начин на представяне на програмата? Нямам представа от колко време се занимаваш със С и С++ за uC, но съм на мнение че повечето от стандартните библиотеки и функции са общо взето неизползваеми. Имам предвид, че са твърде универсално написани и заемат доста ресурси. За сравнение първо извикване на printf на IAR за MSP добавя 10 КБ програмен код и около 600 Б рам употреба. Същото нещо можеш да си го напишеш 10 пъти "по-евтино". Не, не искам да ти давам наклон и да, то си е твоя работа, но знаеш ли какво точно прави тази функция?
|
| Нед Авг 26, 2007 2:14 pm |
|
 |
|
mash
Ранг: Новодошъл
Регистриран на: Пет Окт 27, 2006 6:23 pm Мнения: 162 Местоположение: Севлиево
|
Да ! Наистина ползвам printf()
От скоро минах на С и сега реално погледнато се уча.
ToHu според теб ако в место хипер терминала ползвам пик ще се получи ли ?
Между другото установих, че забива в прекъсването.
|
| Нед Авг 26, 2007 2:47 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
Сети се защо забива в прекъсването ... защото ползваш функция gets но стринга ти не е терминиран с нищо, постнах ти извадка от хелпа на CCS, иска 0х13 .. ма пак не чуваш. Gets не е нищо повечеот един while цикъл който излиза ако приетия байт е 0x13 при положение че нямаш подобно терминиране тои й си чака там вечено. Не съм заглеждал как е написан, и нямам идея дали изобо така ще работи тоя gets, но би трябвало да работи, едва ли са го написали толква тъпо че да не приема байтове в прекъсването.
Но като цяло проблема ти е че нито слушаш нито мислиш, и с тоя начин на работа по добре се откажи от този занаят и хващай нещо друго.
Само м-у другото, това което правиш е доста .. ммм, как да го кажа, нерационално. Можеш да свършиш работа много по бързо, няма защо да ползваш printf, по добре си прати променливата побайтово, това са няколко инструкции, и от друата страна си я обработи, така и така там слагаш printf.
|
| Нед Авг 26, 2007 8:31 pm |
|
 |
|
mash
Ранг: Новодошъл
Регистриран на: Пет Окт 27, 2006 6:23 pm Мнения: 162 Местоположение: Севлиево
|
 |  |  |  | ToHu написа: Сети се защо забива в прекъсването ... защото ползваш функция gets но стринга ти не е терминиран с нищо, постнах ти извадка от хелпа на CCS, иска 0х13 .. ма пак не чуваш. Gets не е нищо повечеот един while цикъл който излиза ако приетия байт е 0x13 при положение че нямаш подобно терминиране тои й си чака там вечено. Не съм заглеждал как е написан, и нямам идея дали изобо така ще работи тоя gets, но би трябвало да работи, едва ли са го написали толква тъпо че да не приема байтове в прекъсването. Но като цяло проблема ти е че нито слушаш нито мислиш, и с тоя начин на работа по добре се откажи от този занаят и хващай нещо друго.
Само м-у другото, това което правиш е доста .. ммм, как да го кажа, нерационално. Можеш да свършиш работа много по бързо, няма защо да ползваш printf, по добре си прати променливата побайтово, това са няколко инструкции, и от друата страна си я обработи, така и така там слагаш printf. |  |  |  |  |
Вече работи.
добавих \n\r на края на стринга и се оправи 
|
| Вто Сеп 04, 2007 6:26 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
 .. предполагаше се, вс епак напредваш. Значи не ти трябват и двете, 0x0D чака, т.е. \r, при теб в края а стинга имаш new line 0x0A.
|
| Вто Сеп 04, 2007 10:06 pm |
|
|
|
Страница 1 от 1
|
[ 10 мнения ] |
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 3 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|