Problem so vstupom z klavesnice – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Problem so vstupom z klavesnice – C / C++ – Fórum – Programujte.comProblem so vstupom z klavesnice – C / C++ – Fórum – Programujte.com

 

_k_
Duch
6. 1. 2008   #1
-
0
-

Zdravim. Mam takyto kod:

struct _key_buffer {

unsigned int size;
unsigned char buffer[256];
} key_buffer;

char getc()
{

while(key_buffer.size == 0); /*<<<===========cez toto to neprejde*/
return key_buffer.buffer[--key_buffer.size];
}

/*rutina pre obsluzenie IRQ1*/
void IRQ1_Keyboard_isr(struct reg_struct non)
{
unsigned char scancode = inb(0x60);

switch(scancode)
{
case 0x2a: /*stisknutie shiftu*/
shift = 1;
case 0xaa: /*pustenie shiftu*/
shift = 0;
default:
if(scancode & 0x80) { /*zdvihnuty klaves*/
break;
} else {
if(shift)
key_buffer.buffer[key_buffer.size++] = asciiShift[scancode];
else
key_buffer.buffer[key_buffer.size++] = asciiNonSh[scancode];
}
}
}


Problem je v tom, ze cez cyklus while(key_buffer.size == 0) v getc() sa to nikdy nedostane.
IRQ1_Keyboard_isr() je volana asynchonne(prerusenie) a na 100% funguje tak ako ma (skusane) no getc() si akosi nevsima zmenu key_buffer.size....
Vobec neviem ze preco... Neviete niekdo ze v com je chyba ?

Nahlásit jako SPAM
IP: 195.91.54.–
Jura
~ Anonymní uživatel
637 příspěvků
6. 1. 2008   #2
-
0
-

Zdravím,

no, je to sice jen výstřel do tmy, ale zkus tu proměnnou deklarovat jako volatile.

Nahlásit jako SPAM
IP: 85.207.192.–
_k_
Duch
6. 1. 2008   #3
-
0
-

To Jura : Wow ;O. Funguje to! ;) Diky starsne moc... uz som sa s tym ondial 2 dni a vyriesi to 1 slovo ;)

Nahlásit jako SPAM
IP: 195.91.54.–
Zelenáč0
Posthunter
6. 1. 2008   #4
-
0
-

Zajimave, mne to funguje i bez toho.. K cemu to voletile slouzi?

Nahlásit jako SPAM
IP: 89.176.254.–
_k_
Duch
6. 1. 2008   #5
-
0
-

To Zelenáč : Ty mas tiez bufferovany vstup ? Btw, uz sa idem pokusit o paging ;)

Nahlásit jako SPAM
IP: 195.91.54.–
Zelenáč0
Posthunter
6. 1. 2008   #6
-
0
-

To _k_ : Kdepak, vstup jsem zatim neresil.. BTW ty ten buffer nekde vymazavas?

Nahlásit jako SPAM
IP: 89.176.254.–
Zelenáč0
Posthunter
6. 1. 2008   #7
-
0
-

Jo, taky jsem si si stahnul hromadu materialu o sprave pameti.. Budu mit zejtra ve skole co cist :-)

Nahlásit jako SPAM
IP: 89.176.254.–
_k_
Duch
6. 1. 2008   #8
-
0
-

To Zelenáč : jakze ne ? Sak potom by ti ten had nezatacal ;) Prevod na ascii zo scancode je uz len brnkacka...

EDIT: k tomu buffru... toto je este len taka prdprodukcna vzorka na test typu "funguje to vobec ?" Bezpecnostne opatrenia idem urobit az teraz (ani len nekntrolujem ci nepreteka... tfuj!)

Nahlásit jako SPAM
IP: 195.91.54.–
Zelenáč0
Posthunter
6. 1. 2008   #9
-
0
-

To _k_ : Had byl jen rozcvicka :-)

Nahlásit jako SPAM
IP: 89.176.254.–
Jura
~ Anonymní uživatel
637 příspěvků
6. 1. 2008   #10
-
0
-

Zdravím,

tak jsem rád, že jsem se trefil:-) Ale, teď vážně. Modifikator volatile upozorňuje kompilátor, že daná proměnná bude změněná nějakou asynchronní událostí(třeba právě přerušením, nebo vláknem), a proto s ní kompilátor nebude dělat žadné optimalizační kouzla.

Nahlásit jako SPAM
IP: 85.207.192.–
_k_
Duch
6. 1. 2008   #11
-
0
-

To Jura : No aspon konecne viem naco ten modifikator je ;). Este raz diky ;)

Nahlásit jako SPAM
IP: 195.91.54.–
Zelenáč0
Posthunter
6. 1. 2008   #12
-
0
-

Takže mi to funguje i bez volatile, protože kompiluju s -O0?

Nahlásit jako SPAM
IP: 89.176.254.–
Jura
~ Anonymní uživatel
637 příspěvků
6. 1. 2008   #13
-
0
-

To Zelenáč :
Nejspíše ano. Zkus je zapnout a sám uvidíš, gcc zrovna nepoužívám..

Nahlásit jako SPAM
IP: 85.207.192.–
_k_
Duch
6. 1. 2008   #14
-
0
-

To Zelenáč : divne... aj ja to kompilujem s -O0 ...

Nahlásit jako SPAM
IP: 195.91.54.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 44 hostů

Podobná vlákna

Program so vstupom — založil ukulele

Klavesnice — založil Ladík

Klavesnice — založil Turbo1

C# klavesnice — založil H12

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý