Vítejte na Elektro Bastlírn?
Nuke - Elektro Bastlirna
  Vytvořit účet Hlavní · Fórum · DDump · Profil · Zprávy · Hledat na fóru · Příspěvky na provoz EB

Vlákno na téma KORONAVIRUS - nutná registrace


Nuke - Elektro Bastlirna: Diskuzní fórum

 FAQFAQ   HledatHledat   Uživatelské skupinyUživatelské skupiny   ProfilProfil   Soukromé zprávySoukromé zprávy   PřihlášeníPřihlášení 

Příjem řetězce atmelem
Jdi na stránku 1, 2  Další
 
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
hajs



Založen: May 28, 2007
Příspěvky: 31

PříspěvekZaslal: út říjen 06 2009, 6:55    Předmět: Příjem řetězce atmelem Citovat

Ahoj. mužete mi někdo poradit jak vyhodnotit přijmutí řetězce který je vždy uzavřen do #: a # např (#:FF# , #:FT#) z koušel jsem počítat přijaté znaky a po dosažení počtu 5 vyhodnotit řetězec to funguje , ale problém je pokud mi přijde např sekvence 3 znaků a pak moje 5znaková tak mám v poli 3+2 a tím se mi posune celé vyhodnocování.. A už to nelze srovnat. Potřeboval bych neco ve stylu , ted dorazil '#' po nem ':' tak následující 2 znaky ulož do pole.

Kod pisu v C

data přijímam v tomto cyklu :

while (1==1){
while ((USR & (1 << RXC)) == 0) { };
znak = UDR;

... //zpracovani vysledneho retezce

}

Dekuji moc za každou radu Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Ivan_Ryger



Založen: Mar 02, 2005
Příspěvky: 1273
Bydliště: Bratislava, Petrzalka

PříspěvekZaslal: út říjen 06 2009, 7:39    Předmět: Citovat

ja by som tam doplnil jednu docasnu premennu navyse, cosi ako register char cTmp1, cTmp2, a do nej by som paskoval prijate znaky.
Ked by prisla ta sekvencia, potom by bola podmienka, ktora zabezpeci ulozenie retazca.
Vlastne by to ani nemuselo byt cTmp1, cTmp2, ale jedna by mohla byt typu "Boolean" ktora by definovala stav automatu.
Ivan
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
anonym






PříspěvekZaslal: út říjen 06 2009, 8:11    Předmět: Citovat

Mohlo by to vypadat třeba takto, v C neumím, tak mě nemlaťte za případné chyby.

kód:

int stav;

stav = 0;

while (1){ 
  while ((USR & (1 << RXC)) == 0) {  };
  znak = UDR;       

  switch (stav) {
    case 0 : if (znak == '#') stav = 1;          // Přijat úvodní #, příště čeká :
             break;
    case 1 : if (znak == ':') stav = 2;          // Přijata :, příště čeká řetězec
             else stav = 0;                      // Přijat jiný znak než :, začne znovu
             break;
    case 2 : if (znak == '#') {
               stav = 0;                         // Přijat ukončující #, příště čeká na úvodní #
               zpracuj přijaté znaky;
             }
             else {
               ulož někam znak;                  // Přijat znak řetězce
             }
             break;
  }
}
Návrat nahoru
hajs



Založen: May 28, 2007
Příspěvky: 31

PříspěvekZaslal: út říjen 06 2009, 8:30    Předmět: Citovat

díky za nápad, vypadá to dobře v podvečer to zkusim a informuji zdali to zafungovalo ..
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
ZdenekHQ
Administrátor


Založen: Jul 21, 2006
Příspěvky: 25741
Bydliště: skoro Brno

PříspěvekZaslal: út říjen 06 2009, 8:49    Předmět: Citovat

Jde to i dělat zpětně. Vyrobit si posuvný registr třeba 8 znaků a křížek brát jako koncový znak. Po jeho příjmu mrknout zpětně znak po znaku, zda se nachází i dvojtečka s křížkem a to vyhodnotit a zpracovat, v případě úspěchu registr následně smazat. Registr se má mazat automaticky i v případě, že po určitou dobu nepřišel žádný znak (řádově jednotky až desítky ms u běžné komunikace).

Pokud bys chtěl jednoduchý zabezpečení, může být za dvojtečkou jedno číslo jako počet znaků. Chodí to spolehlivě na všemožný druhy komunikace, jen se nevyhodnocuje křížek, ale třeba CRC + minimální délka registru.

_________________
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?
]
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovy WWW stránky
anonym






PříspěvekZaslal: út říjen 06 2009, 8:58    Předmět: Citovat

ZdenekHQ napsal(a):
Jde to i dělat zpětně. Vyrobit si posuvný registr třeba 8 znaků a křížek brát jako koncový znak. Po jeho příjmu mrknout zpětně znak po znaku, zda se nachází i dvojtečka s křížkem a to vyhodnotit a zpracovat,...

A zmýšlel ses nad časovou náročností takového řešení?
Návrat nahoru
ZdenekHQ
Administrátor


Založen: Jul 21, 2006
Příspěvky: 25741
Bydliště: skoro Brno

PříspěvekZaslal: út říjen 06 2009, 9:16    Předmět: Citovat

Používám to v přerušení na modbus atd. a nikdy jsem si nevšiml, že by to nějak zdržovalo. Naopak je to spolehlivý a ještě nikdo to nedokázal poplést či kousnout a spolkne to jakoukoliv sekvenci, klidně i dva různý protokoly najednou (samozřejmě poslaný postupně za sebou)...
_________________
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?
]
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovy WWW stránky
anonym






PříspěvekZaslal: út říjen 06 2009, 9:36    Předmět: Citovat

ZdenekHQ napsal(a):
Používám to v přerušení na modbus atd. a nikdy jsem si nevšiml, že by to nějak zdržovalo. Naopak je to spolehlivý a ještě nikdo to nedokázal poplést či kousnout a spolkne to jakoukoliv sekvenci, klidně i dva různý protokoly najednou (samozřejmě poslaný postupně za sebou)...

Kontrola struktury 200 bytového paketu určitě nezabere 50 taktů procesoru, takže jestli tu kontrolu děláš naráz v jednom přerušení, tak si na dost dlouho zabereš procesor. Ale asi souběžně neděláš nic jiného citlivého na latenci přerušení. A pokud si pamatuju, tak aspoň u modbusu RTU se začátek a konec paketu nedetekuje podle speciální sekvence znaků, ale podle mezery.
Návrat nahoru
ZdenekHQ
Administrátor


Založen: Jul 21, 2006
Příspěvky: 25741
Bydliště: skoro Brno

PříspěvekZaslal: út říjen 06 2009, 9:55    Předmět: Citovat

Tak 200 bytů je hezký teoretický příklad, ale v praxi i v zadání se jedná většinou o pár znaků a nikdo netvrdí, že je ten můj algoritmus pro větší možství dat použitelnej. Prostě příklad jako příklad.

Tady u tohoto zadání máš definovaný koncový znaky a to tě svádí psát algoritmus tak, jak jsi to napsala - i když jako teoretický zjednodušený příklad je to v pořádku.

Když zůstaneme u těch 200 znaků - schválně, co se stane s Tvým algoritmem, když master pošle za sebou třeba 20x #:0ABCDEF# a chybou přenosu ti vypadne jeden ukončovací křížek.

_________________
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?
]
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovy WWW stránky
anonym






PříspěvekZaslal: út říjen 06 2009, 13:27    Předmět: Citovat

ZdenekHQ napsal(a):
Tak 200 bytů je hezký teoretický příklad, ale v praxi i v zadání se jedná většinou o pár znaků a nikdo netvrdí, že je ten můj algoritmus pro větší možství dat použitelnej. Prostě příklad jako příklad.

To neni teoretický příklad, musíš zvládnou všechny stavy, které protokol umožňuje, pokud protokol dovoluje poslat 1KB paket, musíš zvládnout stav kdy na sběrnici běhá 1KB paket i když tvoje zařízení komunikuje třeba jen s 8B paketama.

ZdenekHQ napsal(a):
Tady u tohoto zadání máš definovaný koncový znaky a to tě svádí psát algoritmus tak, jak jsi to napsala - i když jako teoretický zjednodušený příklad je to v pořádku.

Na tom taky není nic teoretického, v zadání je uvedeno přijmout řetězec mezi #: a # a to ten popsaný algoritmus zvládne v pohodě. Ukaž lepší algoritmus založený pouze na zadaných podmínkách.

ZdenekHQ napsal(a):
Když zůstaneme u těch 200 znaků - schválně, co se stane s Tvým algoritmem, když master pošle za sebou třeba 20x #:0ABCDEF# a chybou přenosu ti vypadne jeden ukončovací křížek.

Vynechá se následující paket a další už se zase přijmou v pořádku.
Návrat nahoru
anonym






PříspěvekZaslal: út říjen 06 2009, 13:37    Předmět: Citovat

Takhle už jsi spokojenější? Wink

kód:

  switch (stav) {
    case 1 : if (znak == ':') {                    // Přijata :, příště čeká řetězec
               stav = 2;
               break;
             }
             else stav = 0;                      // Přijat jiný znak než :, začne znovu
    case 0 : if (znak == '#') stav = 1;          // Přijat úvodní #, příště čeká :
             break;
    case 2 : if (znak == '#') {
               stav = 0;                         // Přijat ukončující #, příště čeká na úvodní #
               zpracuj přijaté znaky;
             }
             else {
               ulož někam znak;                  // Přijat znak řetězce
             }
             break;
Návrat nahoru
ZdenekHQ
Administrátor


Založen: Jul 21, 2006
Příspěvky: 25741
Bydliště: skoro Brno

PříspěvekZaslal: út říjen 06 2009, 15:50    Předmět: Citovat

Já si tady nebudu hrát na ing. F, takže jsem o něco spokojenější. Pokud mému zařízení stačí 8B, může se na sběrnici honit třeba MB a já prostě tyto data budu ignorovat, aniž bych je přijmul. Takto jsme i testovali - cpali jsme do procesoru metráky náhodně generovaných čísel a pak správnou sekvenci a testovalo se, jestli se nekousne.

Jinak lepší algo nemůžu představit, neboť z Tvého vyjadřování plyne, že Tvůj je ten nejlepší a všechno ostatní by způsobilo pouze nekonečnou dialogovou smyčku. Já se spokojím s druhým, čili posledním místem.

Doufám, že v obecném řetězci jsou křížek a dvojtečka odfiltrovány jako zakázané znaky.

_________________
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?
]
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovy WWW stránky
anonym






PříspěvekZaslal: út říjen 06 2009, 18:17    Předmět: Citovat

ZdenekHQ napsal(a):
Já si tady nebudu hrát na ing. F, takže jsem o něco spokojenější. Pokud mému zařízení stačí 8B, může se na sběrnici honit třeba MB a já prostě tyto data budu ignorovat, aniž bych je přijmul.

Psal jsi, že je analyzuješ až zpětně po přijetí, tak jak je můžeš ignorovat, když nevíš, že nejsou pro tebe? Shocked
Moje řešení je sice nejlepší, ale i tak bys mohl místo planého teoretizování předvést něco praktického. Twisted Evil
Návrat nahoru
ZdenekHQ
Administrátor


Založen: Jul 21, 2006
Příspěvky: 25741
Bydliště: skoro Brno

PříspěvekZaslal: út říjen 06 2009, 20:43    Předmět: Citovat

Máš v té úvaze typicky ženskou chybu v logice - když vím, že pro mě přijde max. 8 či 16 znaků, analyzuji průběžně buffer délky 8 či 16 znaků a nesyslím všechno, co se po sběrnici honí. A mezi námi děvčaty - opět typická aplikace je chrápající slave, co po přijetí instrukce vyplivne data, jinak se většinou fláká. A moje chlebodárce netrápí, kolik vyplácám strojovýho času na spolehlivou komunikaci, ale spolehlivá komunikace sama o sobě.

A zdroják nedám, je to stejně jen hromada kódu v asm. Teoretické nakopnutí správným směrem většinou stačí.

EDIT - Napsal jsem původně ignoruji - ano, je to jedna možnost, že zpráva delší než 8 či 16 znaků není pro mě pak skutečně ignoruji, pouze čekám na mezeru. Nebo můžu průběžně analyzovat, záleží na aplikaci.

_________________
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?
]
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovy WWW stránky
ZdenekHQ
Administrátor


Založen: Jul 21, 2006
Příspěvky: 25741
Bydliště: skoro Brno

PříspěvekZaslal: út říjen 06 2009, 21:05    Předmět: Citovat

Anonym napsal(a):

Moje řešení je sice nejlepší, ale i tak bys mohl místo planého teoretizování předvést něco praktického. Twisted Evil


No, a tady mě tpřipomínáš chování Mrkvosoftu. Pustíš do světa "geniální" algoritmus, pak Tě někdo upozorní na to, že kvůli neplatným datům klidně zahodíš i následující platná data, ty to opravíš a opět - i když velmi opatrně - hlásáš, že je nejlepší. Ale bez nadřazeného timeoutu, hlídajícího dlouhé prodlevy mezi znaky to nikdy spolehlivý a tudíž nejlepší nebude. I kdyby ses stokrát na blond obarvila Twisted Evil

_________________
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?
]
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovy WWW stránky
Zobrazit příspěvky z předchozích:   
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů Časy uváděny v GMT + 1 hodina
Jdi na stránku 1, 2  Další
Strana 1 z 2

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra.
Nemůžete odpovídat na témata v tomto fóru.
Nemůžete upravovat své příspěvky v tomto fóru.
Nemůžete mazat své příspěvky v tomto fóru.
Nemůžete hlasovat v tomto fóru.
Nemůžete připojovat soubory k příspěvkům
Můžete stahovat a prohlížet přiložené soubory

Powered by phpBB © 2001, 2005 phpBB Group
Forums ©
Nuke - Elektro Bastlirna

Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.


PHP-Nuke Copyright © 2005 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.
Čas potřebný ke zpracování stránky 0.39 sekund