PDA

View Full Version : Creare un driver per scheda DSP ISA


swarm
17-12-2005, 11:45
Salve a tutti

per la mia tesi di laurea (ing elettronica) mi trovo a dover utilizzare una scheda DSP basata su TMS320C25, che è pure ISA non Plug&Play (niente driver windows)

La scheda è fornita delle routine che ne comandano le operazioni a basso livello (halt, go, scrivi/ leggi a un certo indirizzo di I/O ecc...), sotto forma di file precompilati (.obj), e anche come file .c e .asm.

Nel file assembler sono presenti le routine "+ elementari", e sono scritte in codice DOS a 16bit, non accettato da Windows( :cry: :cry: :cry: )

Mi trovo così a dover scrivere un driver per la scheda....

Potete darmi consigli/aiuti/suggerimenti su come procedere?

Ho trovato un tool che sembra rendi la vita facile a chi vuole sviluooare un driver:

si chiama WinDriver (http://www.jungo.com/windriver.html)

Vi prego, datemi una mano, sono disperato!

(PS: x di + mi ritrovo pure senza relatore... :cry: )

ilsensine
17-12-2005, 22:05
Bè si, ti serve una sorta di sdk per costruire i driver; quello ufficiale Microsoft è il ddk:
http://www.microsoft.com/whdc/devtools/ddk/default.mspx
non mi affiderei a terzisti per questo genere di cose.

Nota che potrebbe essere complicato.

71104
17-12-2005, 23:59
si, te lo dico io: è complicato :Prrr: :D
ci stanno degli esempi di drivers nel ddk: guarda ad esempio quello della keyboard class: non fa niente!!! :D
io ho iniziato a studiare il ddk tempo fa, ma mi sono fermato tremila volte a causa del fatto che non so usare la utility BUILD fornita da Microsoft: non so scrivere il makefile :mc: :mc: :mc:
causa pigrizia non mi va di imparare, ma adesso dovrò imparare per forza perché devo farlo per il corso di Laboratorio di Sistemi Operativi (sperando che i makefile di Linux siano identici come sintassi a quelli di Microsoft...)

ilsensine
19-12-2005, 09:23
sperando che i makefile di Linux siano identici come sintassi a quelli di Microsoft...
Ho paura che siano differenti. Dovrai fare un driver per Windows per il laboratorio?

71104
19-12-2005, 10:17
no, un normale programma user mode per Linux, ma dobbiamo ugualmente usare i makefiles.

swarm
19-12-2005, 19:06
ragazzi, forse ho trovato una scappatoia...

STRANAMENTE, le funzioni incluse nella libreria conio.h (in particolare inp, inpw, outp e outpw) non danno problemi sotto Win98SE, mentre rompono sotto WinXP....

Credo quindi che svilupperò il software sotto win98, visto che il prof nn mi fa problemi...(non c'è... :rolleyes: )

cmq WinDriver sembrava rendesse facili le cose (sembrava), il problema è "SOLO" capire dove inserire le funzioni della mia scheda....

facile a dirsi eh?

che ne pensate della soluzione con le funzioni di conio.h?

shinya
19-12-2005, 21:37
Ma se lo fai per linux il driver è lo stesso? Perchè forse è più facile, puoi implementarlo scrivendo un modulo per il kernel. C'è diversa documentazione a riguardo, ed anche un libro scaricabile gratuitamente.

FLAME ON

'make' è un'utility che dovrebbe essere cancellata dalla faccia della Terra!

FLAME OFF

:D

ilsensine
20-12-2005, 08:40
ragazzi, forse ho trovato una scappatoia...

STRANAMENTE, le funzioni incluse nella libreria conio.h (in particolare inp, inpw, outp e outpw) non danno problemi sotto Win98SE, mentre rompono sotto WinXP....
Bè non credo che la tua tesi sia incentrata sulla scrittura di un driver, quindi usa la soluzione più veloce per far funzionare quella ferraglia.

ilsensine
20-12-2005, 08:46
Ma se lo fai per linux il driver è lo stesso? Perchè forse è più facile, puoi implementarlo scrivendo un modulo per il kernel. C'è diversa documentazione a riguardo, ed anche un libro scaricabile gratuitamente.
Se per far andare la scheda sono sufficienti le porte di i/o, senza dma e gestione irq, si può fare in userspace tramite /dev/port senza scomodare il kernel, in maniera addirittura portabile tra diverse architetture.
Forse anche XP offre qualche strumento simile, non lo so...

Usare direttamente inb & co su Win98 può andar bene per metterci una pezza, ma certamente un driver non andrebbe scritto in questo modo. E' un bene che XP non lo consenta più, non un male.

ilsensine
20-12-2005, 08:48
FLAME ON

'make' è un'utility che dovrebbe essere cancellata dalla faccia della Terra!

FLAME OFF

:D
Mai screditare un programma senza poter proporre una valida alternativa :)

ilsensine
20-12-2005, 09:33
Forse anche XP offre qualche strumento simile, non lo so...

Infatti, tutto il mondo è paese...

Questi ricordano la sys_iopl di linux:
http://dpointer.blogspot.com/2005/02/io-port-access-under-windows-nt2000xp.html
http://www.direct-io.com/

Questo invece è simile alla /dev/port:
http://www.vcomsoft.com/DDKDOC.htm

Inutile dire che il secondo metodo è preferibile, ma per velocità di sviluppo puoi anche dare una occhiata al primo link.

swarm
20-12-2005, 09:56
grazie a tutti x la risposte.

Infatti anche secondo me questa è la cosidetta "pezza a colori", ma dopo aver cominciato da solo a studiare visual c++, poi un pò di assembler (che nn ricordavo proprio +) e infine vita morte e miracoli della scheda, credo di non commettere un delitto se utilizzi una soluzione di questo tipo (e mi ci è voluto un bel pò per "imbeccare" le funzioni giuste!)

Cmq c'è da dire che uno sviluppo di un driver non avrebbe nemmeno senso in questo caso, perchè si riferirebbe a una scheda vecchissima, nemmeno più supportata dalla casa, che dopo la mia tesi credo non servirà +

(per i curiosi, ecco qui la scheda
http://www.dalanco.com/m250.htm)

credo che cmq avrò ancora bisogno di voi!

GRAZIE!

PS: AUGURI!!!!!!!!

cionci
20-12-2005, 10:06
Se usi il driver giveio.sys in Windows XP/NT/2k riuscirai ad usare tranquillamente qualsiasi tipo di i/o diretto...
Ora vediamo se riesco a trovare un download...

cionci
20-12-2005, 10:23
http://www.bottledlight.com/tools/giveio.zip

Qui c'è il driver e l'eseguibile per installarlo, ma non c'è un esempio...ora guardo se lo trovo...

cionci
20-12-2005, 10:27
http://www.embeddedtronics.com/public/Electronics/directio/directio.zip

Meglio questo: ci sono diversi driver, comunque prova ad usare da subito giveio.sys... Dentro directio.zip (ce n'è un altro all'interno di dello zip che ti ho linkato) c'è un sorgente di prova: tstio.c che fa suonare lo speaker del PC...

71104
20-12-2005, 12:30
ma sta scheda a che serve?? :|

cmq su XP (e su Windows in generale) esiste la possibilità di comunicare con alcuni tipi di periferiche come fossero dei files: li si apre con CreateFile, si scrive con WriteFile, si legge con ReadFile, e si chiude con CloseHandle. funzionava solo per porte COM e LPT, ma poi ho visto anche un esempio di codice che permetteva di farlo anche su porte USB. non so se potrebbe in qualche modo funzionare anche per una scheda interna, potresti provare a chiedere su qualche Newsgroup...

btw, l'I/O diretto non esiste più su Windows NT perché in e out sono istruzioni privilegiate ;)
ha ragione ilsensine: è una caratteristica positiva che non ci sia più, altrimenti qualsiasi virus potrebbe allegramente mandare a gentil donzelle il computer, controllare a suo piacimento le periferiche, cancellare il BIOS, e fare tutto quello che gli pare, praticamente come se fosse in MS-DOS anziché in un sistema operativo in modalità protetta.

cionci
20-12-2005, 12:34
Con i driver sopra si può usare l'i/o diretto ;)

swarm
20-12-2005, 12:34
ma sta scheda a che serve?? :|

.

questa scheda è un DSP classico, con in più le funzionalità di acquisire/elaborare via hardware il segnale
(hai visitato il sito di sopra?)

in pratica io posso acquisire il segnale e visualizzarlo, oppure visualizzarne lo spettro tramite FFT elaborata on board.

@ cionci
Cmq proverò a usare quei driver che mi hai dato,(ti ringrazio) se ne avessi bisogno...

GRAZIE!!!!!

ilsensine
20-12-2005, 13:29
Spero che non devi acquisire/inviare immagini in tempo reale sul computer con quella scheda, altri farlo in PIO sei messo male :)

cionci
20-12-2005, 15:55
@ cionci
Cmq proverò a usare quei driver che mi hai dato,(ti ringrazio) se ne avessi bisogno...
Funzionano alla grande, te lo asicuro... Basta fare una chiamata a CreateFile in caso il SO sia XP/2K/NT e poi non devi fare altro...continui ad usare lo stesso codice che usi su Windows9x per accedere ai registri dell'hardware...

swarm
20-12-2005, 16:19
Spero che non devi acquisire/inviare immagini in tempo reale sul computer con quella scheda, altri farlo in PIO sei messo male :)

cosa intendi per messo male?(e che significa PIO? :fagiano: )

io devo implementare un software che acquisisce/elabora un segnale velocimetrico doppler (in pratica due segnali audio) e "plottare" il segnale nel dominio del tempo/il sonogramma.

Il programma fu implementato a suo tempo sotto DOS, e funziona tutt'ora(stranamente, solo se si "rallenta" la macchina....)

La mia tesi è "rifare" tale programma sotto Windows.

Possiedo il software in DOS, sia l'eseguibile che il listato sorgente in C.

Come detto, anche se il programma sarà lento nel visualizzare il segnale, poco importa, l'importante è che funzioni.

Secondo te l'impresa è pressochè impossibile?

Fammi sapere, perchè sono di nuovo in preda allo sconforto! :cry:

ilsensine
20-12-2005, 17:06
cosa intendi per messo male?(e che significa PIO? :fagiano: )
PIO=programmed i/o; inb e compagnia bella insomma.
In genere grosse quantità di dati vengono trasferite in dma. Se puoi farne a meno ok; per il dma ti servirebbe l'ausilio di un driver vero e proprio.

swarm
20-12-2005, 17:50
cioè intendi tipo trasferimento di dati "a blocchi", e non un elemento del buffer per volta?

se è questo che intendi, mi sono già messo l'animo in pace, il software all'epoca riempiva i buffer (array) un elemento per volta, e il programma era visibilmente "moscio".

Fortunatamente, il limite della scheda è già noto, non devo preoccuparmene.

Se poi intendevi problemi che posso incontrare..... era questo che temevo (e temo tutt'ora)

ciao!

ilsensine
20-12-2005, 17:51
Gli unici problemi puoi averli se hai dei vincoli temporali sull'elaborazione dei dati. Se non è un problema, sei a posto.

71104
20-12-2005, 18:56
Con i driver sopra si può usare l'i/o diretto ;) quei driver vanno installati, e per installarli devi essere admin :Prrr:
se lavori come admin e installi qualcosa che manda la macchina a gentil donzelle allora per quanto riguarda Microsoft è tutto ok :Prrr:

cionci
20-12-2005, 19:32
quei driver vanno installati, e per installarli devi essere admin :Prrr:
se lavori come admin e installi qualcosa che manda la macchina a gentil donzelle allora per quanto riguarda Microsoft è tutto ok :Prrr:
Se la macchina ti serve per fare quello cose voglio vedere se non sei un admin...visto che la macchina la devi pur aprire...

71104
20-12-2005, 21:42
Se la macchina ti serve per fare quello cose voglio vedere se non sei un admin...visto che la macchina la devi pur aprire... lo so, infatti in questo caso va tutto bene; ciò che non va bene è che molti utenti usano il proprio pc agendo come Administrator: e se per caso arriva un virus che installa un driver come quello e fa IN e OUT sulle periferiche e cancella il BIOS e rovina tutto?? la scheda madre è da buttare... :nonsifa:
gli utenti dovrebbero abituarsi di più a un'organizzazione del sistema stile Linux: esiste root ed esiste l'utente con le resitrizioni sulle cartelle di sistema e su altre cose; errare è umano, ma per fare veramente casino devi avere la password di root! :D

swarm
21-12-2005, 11:39
x tutti:

avete ragione, cmq sulla macchina su cui lavoro sono praticamente il proprietario, quindi tutto ok.

Riguardo il probl del "pericolo virus", beh la macchina su cui funzionerà il programma, internet non lo vedrà manco da lontano, e servirà solo per questo programmino.

x il sensine:

vincoli temporali veri e propri non ne ho, quello che ho intenzione di fare è che sia il programma a dover "aspettare" la scheda che termina le computazioni, se poi intendi altro (sono ngnurant) spiegami.

Te lo chiedo perchè nel programma originario, l'autore aveva inserito un "ciclo di sincronizz del clock dela macchina con l'istante di partenza della prima schermata", che credo non potrò più usare....

In ultimo(x tutti)

ho trovato questi piccoli tool per avere l'I/O diretto su macchina Win32
http://www.entechtaiwan.net/dev/index.shtm

la stessa casa della sceda (la Dalanco) mi ha consigliato TVicHW32, ma credo che anche io RapidDeveloper sia interessante (costano poco)

che ne dite?


GRAZIEEEEEEEEEEEE

ilsensine
21-12-2005, 12:13
x il sensine:

vincoli temporali veri e propri non ne ho, quello che ho intenzione di fare è che sia il programma a dover "aspettare" la scheda che termina le computazioni, se poi intendi altro (sono ngnurant) spiegami.
L'unico problema potresti averlo se devi elaborare dati acquisiti in realtime.
Se devi elaborare dati preregistrati, non vedo problemi.
Te lo chiedo perchè nel programma originario, l'autore aveva inserito un "ciclo di sincronizz del clock dela macchina con l'istante di partenza della prima schermata", che credo non potrò più usare....
Non ho capito un fico secco :D

swarm
21-12-2005, 20:00
L'unico problema potresti averlo se devi elaborare dati acquisiti in realtime.

il fatto è che la scheda stessa elabora il segnale, in pratica io gli invio un file binario(in modo seriale) che contiene il programma di elaborazione (ad esempio, FFT a 256 punti) e dalla scheda, non appena mi dice che ha concluso (con un flag) prelevo i dati elaborati, quindi io col programma visual c++ dovrò solo gestire i dati per plottarli.

Riguardo il resto, anche io ho le idee nn molto chiare, sicuramente quando capirò cosa mi serve ti chederò aiuto...

Nel frattempo ti ringrazio

(lo so che con tutti sti ringraziamenti vi è venuto il voltastomaco, ma se nn fosse x voi...)