Oppure

Loading
19/05/13 11:23
emanuele19956
Salve a tutti, sono nuovo del forum :)
Spero di essere nella sezione giusta, dato che quello che voglio scrivere tocca diversi ambiti.

Quello che voglio fare è un software in C++ che includa codice assembly in grado di controllare la comunicazione tra due pc tramite porta seriale.
Scrivo non per farmi aiutare nell'algoritmo da implementare (a cui voglio lavorare da solo), ma solamente nei passaggi che devo fare per far funzionare il tutto. L'ambiente che uso è Visual Studio 2012.

Il problema principale si manifesta nel momento in cui chiamo gli interrupt del bios. Il punto è che la mia scheda madre è piuttosto avanzata e purtroppo non è dotata di porta seriale, cosicché quando, ad esempio, chiamo l'int 14h Windows mi dà un errore madornale. Come posso fare per lavorare comunque? Esiste un modo per simulare la porta seriale? E soprattutto la porta simulata verrebbe riconosciuta da un linguaggio a basso livello come assembly?

In realtà l'obiettivo finale è quello di integrare poi il codice C++ in un programma in Visual Basic cosicché la porta seriale possa essere controllata tramite interfaccia grafica ed eventi.

Mi rendo conto di non aver spiegato benissimo, ma non so fin dove posso spingermi dato che non sono certo di essere nella giusta sezione.

In ogni caso chiedetemi riguardo ogni cosa che non vi è chiara.

Grazie in anticipo.
aaa
20/05/13 6:30
Guarda che in .NET esiste già il modo per usare le porte seriali e comunque non credo che windows ti lasci chiamare il BIOS a tuo piacimento......... Se ti serve per forza l' assembly scrivi tutto in assembly non vedo il senso di fare un "mischiotto". Inoltre puoi emulare una porta seriale scrivendo un driver per windows ma comunque non sarà mai come avere fisicamente la porta seriale. Il " la porta simulata verrebbe riconosciuta da un linguaggio a basso livello come assembly" non ha alcun senso per me, dato che l' assembly non riconosce proprio niente in quanto non è una persona!
20/05/13 8:53
TheKaneB
Usare la porta seriale tramite int 14h è una cosa che funziona solamente sotto DOS(*).

Quando sei in Windows devi sfruttare le API di Windows, non si scappa.



(*) = A scanso di equivoci. Il DOS non è la schermata nera della riga di comando, quella è la Windows Console. Per DOS intendo il vecchio sistema operativo MS-DOS.
Ultima modifica effettuata da TheKaneB 20/05/13 8:55
aaa
20/05/13 10:24
eh immaginavo che non potessi fare quei riferimenti al BIOS in modalità protetta, ma non ero sicurissimo....... Come al solito TheKaneB si dimostra utile :D Comunque se non hai a disposizione una vera seriale devi scrivere un driver windows per emularla, usando qualche altro hardware al posto della porta seriale, quindi penserei all' USB anche se convertitori USB-seriale esistono già (e sono hardware).......
20/05/13 12:53
emanuele19956
Vi spiego le ragioni del mischiotto, come diceva qualcuno...
A me per principio dà abbastanza fastidio essere costretto ad usare librerie chiuse di Windows per controllare l'hardware e di conseguenza non poterne capire il funzionamento.. e quindi pensavo ad usare un linguaggio "diretto", cioè l'assembly... E ho pensato di integrarlo inline col C++ perché alla fine vorrei che la porta fosse usabile tramite interfaccia grafica, e qui si crea il bisogno del visual basic...

Sicuri che non esiste un modo per chiamare il bios da windows?
aaa
21/05/13 15:32
Allora se le ragioni sono di principio usa linux, e per l' interfaccia grafica esistono le Qt, usarle sarebbe una scelta migliore di fare un "mischiotto". Windows lavora in modalità protetta e quindi il BIOS non è raggiungibile, INOLTRE i tuoi programmi sono eseguiti sul ring3 quindi non hai privilegi di accesso all' hardware, se vuoi qualcosa più a basso livello, diciamo così, devi scrivere un driver e lavoreresti su ring0 (l' anello del kernel). Comunque credo seriamente che tu debba usare linux visto come stanno le cose.......
21/05/13 15:57
TheKaneB
Anche Linux gira in modalità protetta e non consente le chiamate al BIOS.

Al massimo dovresti usare DOS ( freedos.org/ )
aaa
21/05/13 18:31
Si ma linux era per il fatto che volendo lui può sapere come viene gestita la seriale, anche se per capirlo......... ehm tanti auguri