| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Cи масив + rs232 стринг http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=7548 |
Страница 1 от 2 |
| Автор: | darkshy [ Пет Фев 12, 2010 4:03 pm ] |
| Заглавие: | Cи масив + rs232 стринг |
Я дайте някаква идея, че не мога да се сетя как да го направя. Въпросното нещо е: 1во - Пращам от серииния порт към МЦУ-то стринг "test1|test2|test3" 2ро - Как да получа и разбия този стринг на "test1", "test2" и "test3" като "|" е разделитела и да ги вкарам в масив? Пиша за ПИК18ки на CSS или MCC18 |
|
| Автор: | valioman [ Пет Фев 12, 2010 4:38 pm ] |
| Заглавие: | Re: Cи масив + rs232 стринг |
цикъл for до дължината на стринга и като видиш | сменяш индекса на масива който предварително си дефинирал разбира се |
|
| Автор: | darkshy [ Пет Фев 12, 2010 5:26 pm ] |
| Заглавие: | |
Благодаря valioman! Непременно ще пробвам! П.П. Може да постнете и други предложения |
|
| Автор: | sv_shady [ Пет Фев 12, 2010 5:53 pm ] | |||||||||
| Заглавие: | ||||||||||
Личи си, че го разбираш С-то и, че въобще имаш огормен опит с програмирането, че си писал много сериозни библиотеки и спокойно можеш да зклеймяваш разни езици както ти дойде и среди за програмиране. Само, че се размисли, ако наистина е така, щеше ли да питаш такива въпроси ??? Въпросът, който си задал е с възможно най-очевидното решение...което и valioman ти го казал. Може да го реализираш, обаче още по-чисто, ползвай sscanf(). Ако входа от RS232 си го запазил в str и искаш да го разделиш в маив test[3][10]:
|
||||||||||
| Автор: | miro_atc [ Пет Фев 12, 2010 6:26 pm ] | |||||||||
| Заглавие: | ||||||||||
това със sscanf() e кофти идея... Дори при стандартните библиотеки има проблеми, пък за ПИк просто не ми се мисли Стандартно %s сканира до white space и няма да спре на '|' в случай че библиотеката е читава би трябвало да изглежда така:
|
||||||||||
| Автор: | sv_shady [ Пет Фев 12, 2010 6:48 pm ] |
| Заглавие: | |
Дам вярно, че трябваше да е до ^|, малко ми е ръждясало С-то май |
|
| Автор: | relsys [ Пет Фев 12, 2010 6:49 pm ] |
| Заглавие: | |
Не, неможе със sscanf();, защото това е библиотека писана от някой си, и той не може да и се довери! |
|
| Автор: | miro_atc [ Пет Фев 12, 2010 7:48 pm ] | |||||||||
| Заглавие: | ||||||||||
Проблемите с лопата да ги ринеш А при ембедед бозата е още по-голяма, защото или се ползва някаква неоптимизирана библиотека или е оптимизирана, но не е стандартна. Оптимазацията е особено нужна за контролери без хардуерно деление. При printf ако принтваш число в десетичен формат "%d" стандартните библиотеки ползват "/" и %, така за всяка отпечатана цифра се вика по два пъти div() за деление на 10. И това е една супер тромава функция. А деление на константа (10) може много да се оптимизира. Особено ако ядрото има MUL инструкция както са примерно АРМ7. Подобен род оптимизации могат да ускорят нещата над 100 (сто) пъти. Не знам как е при ПИК, но честно казано и изобщо не ме интересува |
||||||||||
| Автор: | syscop [ Пет Фев 12, 2010 8:04 pm ] |
| Заглавие: | |
strtok ? |
|
| Автор: | Цецо [ Пет Фев 12, 2010 9:45 pm ] |
| Заглавие: | |
miro е прав. |
|
| Автор: | darkshy [ Пет Фев 12, 2010 11:11 pm ] |
| Заглавие: | |
Мисля, че на valioman решението е най-добре за мен И аз мислех за нещо подобно но не знаех функцията как се казва. Айде утре ще го напиша и ще постна резултати, защото сега протеуса ми е бъгнат и не тръгва и трябва да го преинсталвам апък и ми се ляга че днес съм си легнал сутринта в 4 а се събудих в 6 за даскало и "две" не виждам вече П.П. Видях функцията strtok. И тя би ми свършила работа. Но първо ще пробвам по начина на валиомен |
|
| Автор: | goose [ Съб Фев 13, 2010 10:23 am ] | |||||||||
| Заглавие: | ||||||||||
|
||||||||||
| Автор: | darkshy [ Съб Фев 13, 2010 1:07 pm ] |
| Заглавие: | |
goose това го видях, но защо слагаш указатели след char Те не се ли използват за да указват адрес в рам-а? |
|
| Автор: | sv_shady [ Съб Фев 13, 2010 1:35 pm ] |
| Заглавие: | |
Ами защото стринговете в С са просто масив от символи. Така кода горе заделя масив от указатели, и всеки от тези указатели ще сочи към стринг (масив от символи). |
|
| Автор: | syscop [ Съб Фев 13, 2010 1:40 pm ] |
| Заглавие: | |
Преди да направиш copy/paste на примерчето помисли какво се случва ако имаш повече от 5 думи в buffer |
|
| Страница 1 от 2 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|