Newsgroup: it.comp.lang.c++
Titolo: URGENTE C++ e SB

Premetto che ho già postato questo messaggio a NG che mi sembravano più
direttamente connessi all'argomento HW ricevendo 2 risposte in 2 gg ed
il consiglio di consultare tutti voi. Mi scuso per la lunghezza ma devo
spiegarmi.  Grazie.
Ciao a tutti,
passo subito al dunque:devo svolgere una tesi inerente la possibilità di
utilizzare la scheda audio come multimetro (a scopi didattici).
 Il lavoro si articola in due fasi:
1)indagare l'architetturva della scheda (SB compatibile) per poter
scrivere un programma di test che verifichi le effettive prestazioni
(monotonicità, risoluzione effettiva dei convertitori etc.);
2)scrivere un applicativo in grado di farla funzionare utilizzando l'I/O
stereo.
Il problema è che non so' dove reperire il materiale che mi dica come è
fatta la scheda e come comunicare con essa.
I programmi dovrei scriverli in C o C++: è adatto allo scopo o sarebbe
meglio
programmare direttamente in ambiente Win (come mi è già stato
consigliato) per evitare i problemi di interfacciamento con la scheda
semplificandomi la vita (forse)?
Come avrete capito sono a digiuno di elettronica prof e programmazione
avanzata( sono un elettrico), ma l'argomento mi interessa molto.
Chiedo, per favore, di darmi qualche linea guida, suggerimenti,
indirizzi, testi (a parte 'Inside PC' di Norton),  che mi permettano di
risolvere [o trovare una scappatoia :-)] soprattutto il primo punto dato
che il mio Relatore non ha,anche lui, un'idea di dove cercare materiale.
Ringrazio tutti per l'attenzione.
--
Posted from 
mta03-acc.tin.it
 [212.216.176.34]
via Mailgate.ORG Server - 
http://www.mailgate.org

    La soluzione migliore è quella di un programma che si interfacci
direttamente alle porte della scheda. Il C++ può tornare utile per
"incapsulare" la scheda sb in un oggetto, tanto per poter riutilizzare il
tutto più semplicemente, ma l'accesso alla scheda è da realizzare
preferibilmente in assembly. Far girare il tutto sotto Windows è un mezzo
suicidio, perchè la risoluzione dei problemi di temporizzazione dovuti al
multitasking non è semplice. Far girare il tutto in dos (non nel prompt di
ms-dos, ma proprio dos "puro") ti costringe a lavorare di input/output.
Visto che il tuo lavoro riguarderà l'hardware, ritengo che ti convenga
optare per questa strada, perchè acquisirai un'esperienza indispensabile
alla tua futua professione. La parte di documentazione non è effettivamente
di facile reperibilità, o meglio... trovi decine di libri che parlano della
sb, ma rischi di spendere un patrimonio, senza ottenere quello che cerchi.
Io ho letto un libro: "usare subito sound blaster", di Martin L. Moore,
Jackson Libri, che riporta anche i "comandi" (a livello assembly) da inviare
alla scheda, nonchè l'elenco delle porte i/o da utilizzare.
    Tornando all'oggetto del newsgroup. ti consiglio di crearti una classe
Scheda, che consenta di effettuare l'i/o su dispositivi hardware generici e
derivare da questa una classe SchedaSoundBlaster. A solo titolo di esempio:
class Scheda
{
    public:
        Input(char *buffer,int buffer_length,int port,int bytes);
        Output(char *buffer,int buffer_length,int port,int bytes);
        ....
};
class SchedaSoundBlaster: public Scheda
{
    public:
        PlaySound(char *filename);
        ...
};
e, se proprio vuoi esagerare:
class Multimeter: public SchedaSoundBlaster
{
    public:
        double Ampere();
        double Volt();
    ...
};
ma forse è più logico:
class Multimeter:
{
        SchedaSoundBlaster device;
    public:
        double Ampere();
        double Volt();
    ...
};
    In effetti, si potrebbe interporre tra le classi Scheda e
SchedaSoundBlaster una classe intermedia: SchedaAudio. Usando il
polimorfismo (e un po' di masochismo) potresti realizzare la classe
Multimeter in modo che utilizzi anche schede diverse dalla sb (ad esempio:
una scheda con convertitori A/D, da te realizzata):
class Scheda{...};
class SchedaAudio: public Scheda{...};
class SchedaSoundBlaster: public SchedaAudio{...};
class Multimeter:
{
        Scheda device;
    ...
};
    in questo modo, potresti utilizzare sia la scheda sb, che altri tipi di
schede (anche non schede audio).
    Spero di esserti stato di aiuto.
    Ciao!!!