| Автор |
Съобщение |
|
darkshy
Ранг: Популярен
Регистриран на: Съб Ное 28, 2009 5:50 am Мнения: 391 Местоположение: Варна
|
 Cи масив + rs232 стринг
Я дайте някаква идея, че не мога да се сетя как да го направя. Въпросното нещо е:
1во - Пращам от серииния порт към МЦУ-то стринг "test1|test2|test3"
2ро - Как да получа и разбия този стринг на "test1", "test2" и "test3" като "|" е разделитела и да ги вкарам в масив?
Пиша за ПИК18ки на CSS или MCC18

|
| Пет Фев 12, 2010 4:03 pm |
|
 |
|
valioman
Ранг: Почетен член
Регистриран на: Съб Сеп 17, 2005 5:07 pm Мнения: 813 Местоположение: Сливен
|
 Re: Cи масив + rs232 стринг
цикъл for до дължината на стринга и като видиш | сменяш индекса на масива който предварително си дефинирал разбира се
|
| Пет Фев 12, 2010 4:38 pm |
|
 |
|
darkshy
Ранг: Популярен
Регистриран на: Съб Ное 28, 2009 5:50 am Мнения: 391 Местоположение: Варна
|
Благодаря valioman! Непременно ще пробвам!
П.П. Може да постнете и други предложения 
|
| Пет Фев 12, 2010 5:26 pm |
|
 |
|
sv_shady
Ранг: Популярен
Регистриран на: Сря Окт 11, 2006 8:19 pm Мнения: 373 Местоположение: София/Edinburgh, UK
|
Личи си, че го разбираш С-то и, че въобще имаш огормен опит с програмирането, че си писал много сериозни библиотеки и спокойно можеш да зклеймяваш разни езици както ти дойде и среди за програмиране. Само, че се размисли, ако наистина е така, щеше ли да питаш такива въпроси ??? Въпросът, който си задал е с възможно най-очевидното решение...което и valioman ти го казал. Може да го реализираш, обаче още по-чисто, ползвай sscanf(). Ако входа от RS232 си го запазил в str и искаш да го разделиш в маив test[3][10]:
|
| Пет Фев 12, 2010 5:53 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
това със sscanf() e кофти идея... Дори при стандартните библиотеки има проблеми, пък за ПИк просто не ми се мисли
Стандартно %s сканира до white space и няма да спре на '|'
в случай че библиотеката е читава би трябвало да изглежда така:
|
| Пет Фев 12, 2010 6:26 pm |
|
 |
|
sv_shady
Ранг: Популярен
Регистриран на: Сря Окт 11, 2006 8:19 pm Мнения: 373 Местоположение: София/Edinburgh, UK
|
Дам вярно, че трябваше да е до ^|, малко ми е ръждясало С-то май  Иначе мога да кажа, че CCS си има sscanf и sprintf и си работят идеално. Иначе при ANSI С и sscanf не съм имал никога проблеми, може ли да дадеш пример някой за проблем ?
Последна промяна sv_shady на Пет Фев 12, 2010 6:50 pm, променена общо 1 път
|
| Пет Фев 12, 2010 6:48 pm |
|
 |
|
relsys
Ранг: Форумен бог
Регистриран на: Пет Ное 25, 2005 11:41 am Мнения: 1680
|
Не, неможе със sscanf();, защото това е библиотека писана от някой си, и той не може да и се довери!
|
| Пет Фев 12, 2010 6:49 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
Проблемите с лопата да ги ринеш  Особено ако пишеш или портваш код с по-засукани форматни спецификатори... На практика няма две еднакви библиотеки, M$ базираните се държат по един начин, лайнукс базираните по друг, а стандартите казват трето
А при ембедед бозата е още по-голяма, защото или се ползва някаква неоптимизирана библиотека или е оптимизирана, но не е стандартна. Оптимазацията е особено нужна за контролери без хардуерно деление. При printf ако принтваш число в десетичен формат "%d" стандартните библиотеки ползват "/" и %, така за всяка отпечатана цифра се вика по два пъти div() за деление на 10. И това е една супер тромава функция. А деление на константа (10) може много да се оптимизира. Особено ако ядрото има MUL инструкция както са примерно АРМ7. Подобен род оптимизации могат да ускорят нещата над 100 (сто) пъти.
Не знам как е при ПИК, но честно казано и изобщо не ме интересува 
|
| Пет Фев 12, 2010 7:48 pm |
|
 |
|
syscop
Ранг: Форумен бог
Регистриран на: Пет Юни 03, 2005 9:39 pm Мнения: 2277
|
strtok ?
|
| Пет Фев 12, 2010 8:04 pm |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
miro е прав.
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Пет Фев 12, 2010 9:45 pm |
|
 |
|
darkshy
Ранг: Популярен
Регистриран на: Съб Ное 28, 2009 5:50 am Мнения: 391 Местоположение: Варна
|
Мисля, че на valioman решението е най-добре за мен
И аз мислех за нещо подобно но не знаех функцията как се казва.
Айде утре ще го напиша и ще постна резултати, защото сега протеуса ми е бъгнат и не тръгва и трябва да го преинсталвам апък и ми се ляга че днес съм си легнал сутринта в 4 а се събудих в 6 за даскало и "две" не виждам вече  (несъм вкъщи за да го пробвам с пик-а)
П.П. Видях функцията strtok. И тя би ми свършила работа. Но първо ще пробвам по начина на валиомен 
|
| Пет Фев 12, 2010 11:11 pm |
|
 |
|
goose
Ранг: Популярен
Регистриран на: Сря Окт 03, 2007 3:39 pm Мнения: 311
|
_________________ In God we trust. All others must submit an X.509 Certificate
|
| Съб Фев 13, 2010 10:23 am |
|
 |
|
darkshy
Ранг: Популярен
Регистриран на: Съб Ное 28, 2009 5:50 am Мнения: 391 Местоположение: Варна
|
goose това го видях, но защо слагаш указатели след char
Те не се ли използват за да указват адрес в рам-а?
|
| Съб Фев 13, 2010 1:07 pm |
|
 |
|
sv_shady
Ранг: Популярен
Регистриран на: Сря Окт 11, 2006 8:19 pm Мнения: 373 Местоположение: София/Edinburgh, UK
|
Ами защото стринговете в С са просто масив от символи. Така кода горе заделя масив от указатели, и всеки от тези указатели ще сочи към стринг (масив от символи).
|
| Съб Фев 13, 2010 1:35 pm |
|
 |
|
syscop
Ранг: Форумен бог
Регистриран на: Пет Юни 03, 2005 9:39 pm Мнения: 2277
|
Преди да направиш copy/paste на примерчето помисли какво се случва ако имаш повече от 5 думи в buffer 
|
| Съб Фев 13, 2010 1:40 pm |
|
|