Home Der Befehl "open" funktioniert nicht wie gewünscht Der Befehl "open" funktioniert nicht wie gewünscht Untersuchung des Completion Flag
 

3.5.1 Fehlersuche

Innerhalb der Routine qadc_open ist dieser Befehl zerstörerisch:

clear_bit(QSTOP, (short *)QADCMCR); /* stop mode zurücknehmen. Der QADC beginnt zu arbeiten */

Also gebe ich alle Werte aus, welche dieser Befehl verwendet. Hierzu wurden folgende Codezeilen ergänzt:

static int qadc_open(struct inode *inode, struct file *file)
{
    short *qadcmcr = (short *)QADCMCR;
...
    value1 = *qadcmcr;
    printk(KERN_NOTICE "Adress of QADCMCR: %lx ; value inside QADCMCR before writing: %x \n",qadcmcr, value1);
...

Hieraus ergab sich der Output:

/usr> ./readqadc-1_0
open: ccw=40190200 curent value at ccw[0]: 6
I will write to ccw[0]: c0 and ccw[1]: ff
Adress of QADCMCR: 40190000 ; value inside QADCMCR before writing: 80
qadc released
Hier soll der QADC ausgelesen werden
Adresse pdev: 6b4a44
Der Rueckgabewert von open lautet: 3
 Das Device wurde wieder geschlossen!
pid 25: failed 34048
/usr>

Das QSTOP-Bit ist genau das Bit 15. Hier ist aber nur das Supervisor-Bit 7 gesetzt.

Spaßeshalber versuche ich den set_bit-Befehl aus der Routine qadc_release. Damit wird erneut der QADC resettet. Es sollte in diesem Fall eigentlich nichts Schlimmes passieren.

Effektiv stürzte das Betriebsystem auch bei dem set_bit-befehl ab. Es liegt nahe, daß etwas grundsätzlich mit diesen beiden Routinen "clear_bit" und "set_bit" nicht funktioniert.

Darum mache ich mich auf die Suche nach Beispielcode für den QADC.

Und tatsächlich finde ich interessanten Code, welchen ich hier abgelegt habe.

Aus diesem Code habe ich das Beispiel aus "adc.h" und "adc.c" als Grundlage für meine weiteren Tests genommen.


Copyright © Andreas Birkert
Letzte Aktualisierung am 20. Dezember 2013
Home Der Befehl "open" funktioniert nicht wie gewünscht Der Befehl "open" funktioniert nicht wie gewünscht Untersuchung des Completion Flag