Ich programmiere ja eigentlich schon etwas länger,
zur Zeit aber nicht mehr viel in C
und auf Linux erst seit kurzem.
Habe folgende zwei Probleme:
Ich möchte einen Thermometer an meinem COM-Port realisieren.
die Pin's ansteueren und abfragen funktioniert ja schon
aber um den Wiederstand zu messen brauche ich Echtzeitprioritaeten!
zur zeit frage ich innerhalb einer while Schleife ob das Signal angekommen ist
das schaut in etwa so aus:
while( (!(inb(0x3F8+6) & 0x020) && usleepTime < 1500000)
{
usleep(1);
++usleepTime;
}
damit komme ich auf so ca. 74 - 83 millisecunden.
wenn ich den Process mit nice -n -20 starte
auf 81 - 83 millisekunden
keine Ahnung ob diese Werte stimmen, (obwohl mir diese Werte etwas nieder vorkommen)
jedoch möchte ich den Process nicht fortwährend in einer Echtzeitschleife laufen lassen
sondern eben nur diese eine Schleife
dann warte ich vielleicht wieder eine sekunde
und messe dann wieder.
In einem Thread hat Janka geschrieben
dass das mit sched_setscheduler geht
hab aber keine Ahnung wie ich die man-Pages für diesen Befehl aufrufe
vermute mal ich brauche dafür ein extra Paket.
Nun zu meiner zweiten Frage:
Ich hab da von der Firma Conrad das Buch "Elektronik am PC"
Da wird in Visual Basic programmiert über eine port.dll
mich interresiert weniger die Elektronik als das Programmieren
(die Elektronik macht dann mein Bruder)
Aus diesem Buch habe ich die folgende Formel
wie ich von den millesecunden,
wenn ich einen NTC-Wiederstand dazwischen hänge,
auf die Temperatur komme.
T= <millisekunden>
T= T * 1.0000000001;
R= 2200 + 7800 * (T - 76300) / (294600 - 76300);
R= (int)R
Temp= 1 / (log(R / 10000) / 4300 + 1 / 298) -273
Temp= (int)(Temp * 10) / 10
mein Problem liegt beim Befehl log()
das ist der natürliche Logarithmus.
ich habe danach gegoogelt und herausgefunden
dass ich die Bibliothek math.h dafür includieren muss.
leider erkennt der gcc compiler diesen Befehl trotzdem nicht.
Ich hoffe ich war mit meiner Erklärung Verständlich
und irgendjemand kann mir weiterhelfen.
