forum.mcontrollers.com - hlavní stránka forum.mcontrollers.com - fórum

 

.: fórum - hlavní stránka :.
Technology Stronghold by Rudolf Vesely
How to build Microsoft System Center hosted cloud series
FAQFAQ HledatHledat Seznam uživatelůSeznam uživatelů Uživatelské skupinyUživatelské skupiny RegistraceRegistrace
ProfilProfil StatistikaStatistika Soukromé zprávySoukromé zprávy PřihlášeníPřihlášení

 
Ako nahradiť testovaciu slučku prerušením v C#

 
Přidat nové téma   Zaslat odpověď    Obsah fóra mcontrollers.com -> Jiné mikrokontroléry, procesory, hradla
 
sqad
Profesionál
Profesionál


Založen: 6.2.2009
Příspěvky: 43

PříspěvekZaslal: 16 květen 2012, 10:26    Předmět: Ako nahradiť testovaciu slučku prerušením v C# Citovat

Ahojte, rád by som Vás požiadal o pomoc s nasledujúcim problémom:

Vo Visual C# 2010 chcem napísať program, ktorý komunikuje s AVR cez paralelný port (používam inpout32.dll a triedu PP). U AVR chcem využiť AD prevodníky s tým, že keď AVR vykoná AD prevod, nastaví pin paralelného portu na log1, čím dá PC vedieť, že môže načítavať dáta.
Jediný spôsob, ako by som to doteraz vedel urobiť je, že PC bude v slučke while kontrolovať, ťi je pin na log0 alebo log1.

nap. kontrola pinu LSB data:
while ((PP.PP_Data_In() & 0x01) == 0) {} //cakaj na nacitavanie
{
//nacitaj data
}

Tento spôsom mi však nevyhovuje kvôli vyťaženiu vlákna, a rád by som to nahradil nejakým ,,kvázi hardwarovým" prerušením od pinu. V knihe Visual C# 2008 som sa dočítal, že by to mohlo ísť pomocou udalostí s použitím delegátov, ale priznám sa, že som to skoro vôbec nepochopil.
Dalo by sa to ešte spraviť nastavením časovača napr. na 1ms a v tomto čase kontrolovať stav, ale to už nie je pravé prerušenie od pinu.

Vedeli by Ste mi poradiť, čím konkrétne by sa dala táto slučka nahradiť, aby tento program naozaj plnil funkciu podobnú pin change interrupt u AVR?

Ďakujem za pomoc, nasmerovanie alebo užitočné pripomienky.
Súbor inpout32 môžete stiahnuť napr. tu (z originálnej adresy mi to nešlo stiahnuť).

Arrow administrator: přesunuto z "Ostatní"

Arrow administrator: přiloženy externí soubory



inpout32.dll.zip
 Komentář:

Stáhnout
 Soubor:  inpout32.dll.zip
 Velikost:  11.74 kB
 Staženo:  340 krát


PP.txt
 Komentář:
trieda PP (príponu zmeniť na .cs)

Stáhnout
 Soubor:  PP.txt
 Velikost:  1.57 kB
 Staženo:  257 krát

Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
piityy
Profesionál
Profesionál


Založen: 1.4.2008
Příspěvky: 2138

PříspěvekZaslal: 16 květen 2012, 18:38    Předmět: Citovat

Delegát je vpodstatě pointer na funkci. Událost je pak volání této funkce.
Když si např. vytvoříš instanci od System.IO.Ports.SerialPort zjistíž, že je obsahuje událost "DataReceived". Této události můžeš přiřadit funkci ("xxx.DataReceived +=", VS ti automaticky navrhne vytvoření obsluhy události, potvrdíš 2x TAB) a ta bude volána vždy, když dorazí data.
Dále je tam i událost "PinChanged". Dají se tu najít C# kódy na jednoduchý uartový terminál. Tam je použitý i invoke (nutné protože asynchronní událost bývá na jiném vlákně).

Ta dll je však nejspíš v C++ a nemáš k ní toto sharpovské zapouzdření. S tím sis však už asi poradil když umíš číst/zapisovat data. Pokud to ta knihovna (a hw) vůbec umí - není tam funkce, která by právě požadovala pointer na funkci z tvého programu(obsluha události)?

Víc k tomu asi nenapíšu. Používám totiž pouze uart (pro jednoduchost obsluhy v C#) nebo wifi (v režimu vysílačky - udp pakety na broadcast).
Se C# problémy ovšem budeš mít asi větší šanci na úspěch na fóru builder.cz
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
sqad
Profesionál
Profesionál


Založen: 6.2.2009
Příspěvky: 43

PříspěvekZaslal: 17 květen 2012, 20:45    Předmět: Citovat

Ďakujem piityy za tip, pozriem či v tejto .dll je možnosť vyvolania udalosti ako pin changed u sériového portu, avšak obávam sa že skôr asi nebude...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

Zobrazit příspěvky z předchozích:   
Zobrazit předchozí téma :: Zobrazit následující téma  
Přidat nové téma   Zaslat odpověď    Obsah fóra mcontrollers.com -> Jiné mikrokontroléry, procesory, hradla Časy uváděny v GMT + 2 hodiny
 
Strana 1 z 1
Přejdi na:  
Můžete přidat nové téma do tohoto fóra.
Můž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.
Můžete k příspěvkům připojovat soubory
Můžete stahovat a prohlížet přiložené soubory
 



Num Lock Holder - app to hold Numlock
Copyright © 2017 Rudolf Veselý, mcontrollers.com.
Je zakázáno používat části tohoto webu bez souhlasu autora. || Powered by phpBB © 2001, 2002 phpBB Group - with RedSquare DoubleJ(Jan Jaap)