Отговори на тема  [ 10 мнения ] 
комуникация между два пик-а 
Автор Съобщение
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Пет Окт 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
Профил ICQ
Online
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30686
Местоположение: София
Мнение 
gets() ако не ме лъже паметта очаква край а стринга, демек терминатор, /r или /n не я ползвам тая функция и не помня точно кое очакваше това едното ..


Съб Авг 25, 2007 11:13 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Пет Окт 27, 2006 6:23 pm
Мнения: 162
Местоположение: Севлиево
Мнение 
ToHu написа:
gets() ако не ме лъже паметта очаква край а стринга, демек терминатор, /r или /n не я ползвам тая функция и не помня точно кое очакваше това едното ..


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


Нед Авг 26, 2007 11:49 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Юли 31, 2007 2:55 pm
Мнения: 1792
Местоположение: София
Мнение 
А защо не пробваш все пак да сложиш един '\n' на края на стринга дето се праща?


Нед Авг 26, 2007 12:14 pm
Профил
Online
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 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
Профил
Ранг: Новодошъл
Ранг: Новодошъл

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


Нед Авг 26, 2007 2:14 pm
Профил ICQ
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Пет Окт 27, 2006 6:23 pm
Мнения: 162
Местоположение: Севлиево
Мнение 
Да ! Наистина ползвам printf()
От скоро минах на С и сега реално погледнато се уча.
ToHu според теб ако в место хипер терминала ползвам пик ще се получи ли ?
Между другото установих, че забива в прекъсването.


Нед Авг 26, 2007 2:47 pm
Профил ICQ
Online
Ранг: Форумен бог
Ранг: Форумен бог

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

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


Нед Авг 26, 2007 8:31 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

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

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


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


Вто Сеп 04, 2007 6:26 pm
Профил ICQ
Online
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30686
Местоположение: София
Мнение 
:) .. предполагаше се, вс епак напредваш. Значи не ти трябват и двете, 0x0D чака, т.е. \r, при теб в края а стинга имаш new line 0x0A.


Вто Сеп 04, 2007 10:06 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 10 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 3 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни