Hej Ole
Jeg har også været radioamatør - OZ5AFW - engang, men nu er jeg inaktiv.
Først og fremmest skal dit program snakke med en device driveren.
Programmet kan ikke snakke med hardware på nogen anden måde, og programmet kan heller ikke bestemme hardware detaljer (lpt port 378).
Der findes nogle device drivers til at styre HAM radio elektronik.
Der er en fejl i din første funktion.
Den får inddata i double typen, regner i double typen, og returnerer også en double, selv om du siger at den er en int, for du har glemt at type caste retur værdien.
Du har heller ikke giver variablerne i main en startværdi., og så ved du ikke hvad de rent faktisk indeholder.
Du koder også lidt mærkeligt, man bruger (normalt) ikke goto - det er dårlig kode stil. goto kan man finde på at bruge i en linux device driver for at ungå et nested-if helvede, som giver uoverskuelig kode.
Det kan så være at du ikke kender til while(1) tricket, så jeg har skrevet din kode om til noget kønnere:
Kode: Vælg alt
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/io.h>
#define BASE 0x378
static int int_round(double n);
static int main(int argc, char **argv);
static int main(int argc, char **argv)
{
float x;
int value;
while(1) {
printf(" freq som 144.000 in spring på 25KHz ");
scanf("%f",&x);
x = int_round((x - 140.8) * 40.0); /* beregning */
printf("portdeling= %f\n",x); /* Vist tal som vil ligge mellem 128.000 til 208.000 ialt 80 kanaler */
value = (int) x;
outb(value,BASE);
}
}
static int int_round(double n) { // afrunding
int ret_val = (int) ( (n > 0.0) ? (n + 0.5) : (n -0.5));
return ret_val;
}
og outb virker så ikke. (
kig lige i edit nederst i det her indlæg)
Hvis du lige kan vise et schematic (elektronik diagram), over din styring, og komme med nogle kommentarer til den til de ting der er ikke er indlysende, kan jeg finde ud af hvilken device driver dit program skal bruge.
Lige i forbindelse med det her kan det være rart at vide for dig at jeg er IT ingeniør med specialisering i Teknisk IT og Embedded Systems(Indlejrede systemer), og jeg var 1 af de 2 ud af 26 i vores ingeniør-klasse der er god til elektronik.
Så du må gerne blive meget teknisk - jeg skal nok sige til når kæden hopper af (det gælder mest når det kommer til RF design af elektronik.)
Er det nødvendigt kan jeg lave et lille indlejret system, der kan snakke med serielport device driveren i kernen, og så kan dit program snakke med det indlejrede systems microcontroller via den device driver.
Edit: Nå så du er ved at lave en user space device driver, eller hva'?
Hvis ja, så læg mærke til at der skal bruges en bare-bone device driver i kernen til at rå-kopiere data til og fra elektronik/mikrocontrolleren.
Er du heldig er der nogen der har lavet den i forvejen.
der er en insterressant funktion som hedder ioperm, og om den står der "Controls access to the first 0x3FF I/O ports".
/Lars