Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

комуникация между два пик-а
http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=4696
Страница 1 от 1

Автор:  mash [ Съб Авг 25, 2007 5:44 pm ]
Заглавие:  комуникация между два пик-а

Здравейте !
Имам проблем с комуникирането по 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);

Но нищо не се получава....
Когато го изпращам към хипер терминала излиза без проблем !!!
Къде евентуално греша ?

Автор:  ToHu [ Съб Авг 25, 2007 11:13 pm ]
Заглавие: 

gets() ако не ме лъже паметта очаква край а стринга, демек терминатор, /r или /n не я ползвам тая функция и не помня точно кое очакваше това едното ..

Автор:  mash [ Нед Авг 26, 2007 11:49 am ]
Заглавие: 

ToHu написа:
gets() ако не ме лъже паметта очаква край а стринга, демек терминатор, /r или /n не я ползвам тая функция и не помня точно кое очакваше това едното ..


Мисля, че нее в това проблема.
Жалко, че никой в този форум не иска да ми каже.
Предполагам, че грешката е елементарна.

Автор:  woody [ Нед Авг 26, 2007 12:14 pm ]
Заглавие: 

А защо не пробваш все пак да сложиш един '\n' на края на стринга дето се праща?

Автор:  ToHu [ Нед Авг 26, 2007 12:15 pm ]
Заглавие: 

Ти мислиш, но аз не мисля
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. Това ти е един от проблемите, ама не искаш да слуаш и да четеш, я кажи в хипер-терминала всеки пакет данни на един отделен ред ли излиза или не, според мен излизат на еидн ред една след друга.

Автор:  Yanek [ Нед Авг 26, 2007 2:14 pm ]
Заглавие: 

Да питам: Наистина ли използваш printf или е начин на представяне на програмата? Нямам представа от колко време се занимаваш със С и С++ за uC, но съм на мнение че повечето от стандартните библиотеки и функции са общо взето неизползваеми. Имам предвид, че са твърде универсално написани и заемат доста ресурси. За сравнение първо извикване на printf на IAR за MSP добавя 10 КБ програмен код и около 600 Б рам употреба. Същото нещо можеш да си го напишеш 10 пъти "по-евтино". Не, не искам да ти давам наклон и да, то си е твоя работа, но знаеш ли какво точно прави тази функция?

Автор:  mash [ Нед Авг 26, 2007 2:47 pm ]
Заглавие: 

Да ! Наистина ползвам printf()
От скоро минах на С и сега реално погледнато се уча.
ToHu според теб ако в место хипер терминала ползвам пик ще се получи ли ?
Между другото установих, че забива в прекъсването.

Автор:  ToHu [ Нед Авг 26, 2007 8:31 pm ]
Заглавие: 

Сети се защо забива в прекъсването ... защото ползваш функция gets но стринга ти не е терминиран с нищо, постнах ти извадка от хелпа на CCS, иска 0х13 .. ма пак не чуваш. Gets не е нищо повечеот един while цикъл който излиза ако приетия байт е 0x13 при положение че нямаш подобно терминиране тои й си чака там вечено. Не съм заглеждал как е написан, и нямам идея дали изобо така ще работи тоя gets, но би трябвало да работи, едва ли са го написали толква тъпо че да не приема байтове в прекъсването.
Но като цяло проблема ти е че нито слушаш нито мислиш, и с тоя начин на работа по добре се откажи от този занаят и хващай нещо друго.

Само м-у другото, това което правиш е доста .. ммм, как да го кажа, нерационално. Можеш да свършиш работа много по бързо, няма защо да ползваш printf, по добре си прати променливата побайтово, това са няколко инструкции, и от друата страна си я обработи, така и така там слагаш printf.

Автор:  mash [ Вто Сеп 04, 2007 6:26 pm ]
Заглавие: 

ToHu написа:
Сети се защо забива в прекъсването ... защото ползваш функция gets но стринга ти не е терминиран с нищо, постнах ти извадка от хелпа на CCS, иска 0х13 .. ма пак не чуваш. Gets не е нищо повечеот един while цикъл който излиза ако приетия байт е 0x13 при положение че нямаш подобно терминиране тои й си чака там вечено. Не съм заглеждал как е написан, и нямам идея дали изобо така ще работи тоя gets, но би трябвало да работи, едва ли са го написали толква тъпо че да не приема байтове в прекъсването.
Но като цяло проблема ти е че нито слушаш нито мислиш, и с тоя начин на работа по добре се откажи от този занаят и хващай нещо друго.

Само м-у другото, това което правиш е доста .. ммм, как да го кажа, нерационално. Можеш да свършиш работа много по бързо, няма защо да ползваш printf, по добре си прати променливата побайтово, това са няколко инструкции, и от друата страна си я обработи, така и така там слагаш printf.


Вече работи.
добавих \n\r на края на стринга и се оправи :)

Автор:  ToHu [ Вто Сеп 04, 2007 10:06 pm ]
Заглавие: 

:) .. предполагаше се, вс епак напредваш. Значи не ти трябват и двете, 0x0D чака, т.е. \r, при теб в края а стинга имаш new line 0x0A.

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/