Avatar billede hmortensen Nybegynder
29. november 2004 - 14:58 Der er 17 kommentarer og
2 løsninger

Kalde funktion med streng

Hej

Jeg er ved at lave en funktion, som skal skrive til et display vha. en microprocessor, og jeg benytter system51 til at compile min c kode.

Jeg har prøvet flg:
//inst. skriv
#define C0 XMEM[0x8000]

//inst. læs
#define C1 XMEM[0x8002]

//data. skriv
#define D0 XMEM[0x8001]

//data. læs
#define D1 XMEM[0x8003]

void SkrivDisplay(int linie, int position, char* tekst)
{
    data char i;
    //venter på busy
    while (C1 & 0x80);
    //angiver positionen på displayet
    C0 = ((linie) ? 0x0c0 : 0x80)+position;
    for(i=0; i<strlen(tekst); i++)
    {
        //venter på busy
        while(C1 & 0x80);
        //skriver en karakter
        D0 = tekst[i];
    }
}


void main()
{
    while (1)
    {
        data char txt = "En tekst";
        //Skriver på første linie, på første position
        SkrivDisplay(0, 0, char);
    }
}

Måske jeg skal bruge en pointer, men det er jeg ikke så stærk i.
Avatar billede arne_v Ekspert
29. november 2004 - 15:02 #1
char *txt = "En tekst";
...
SkrivDisplay(0, 0, txt);

måske
Avatar billede hmortensen Nybegynder
29. november 2004 - 15:08 #2
Er der forskel på 'char* txt' og 'char *txt' ?
Avatar billede arne_v Ekspert
29. november 2004 - 15:10 #3
Nej.
Avatar billede arne_v Ekspert
29. november 2004 - 15:13 #4
Men da:

char*    p1,p2;

svarer til:

char *p1;
char p2;

så er der mange som foretrækker at placere stjernen foran variablen
fremfor efter typen.
Avatar billede hmortensen Nybegynder
29. november 2004 - 15:20 #5
Ja, jeg kan godt få det til at virke som alm konsol.

Jeg kan først prøve i system51 i morgen, så afvent response :)
Avatar billede hmortensen Nybegynder
01. december 2004 - 10:29 #6
Nu har jeg prøvet lidt frem og tilbage, og derefter fundet ud af at D0 skal fodres med ASCII værdien.

Kan du omskrive funktionen, så D0 = ASCII_værdi_fra_hvert_tegn; ?
Avatar billede arne_v Ekspert
01. december 2004 - 10:36 #7
Indeholder tekst[i] ikke ASCII værdien for tekst[i] ??
Avatar billede hmortensen Nybegynder
01. december 2004 - 10:37 #8
Åbenbart ikke, for det virker ikke, men hvis jeg hiver tingene ud af funktionen, og kalden D0 med ASCII værdier direkte, så virker det.

Er der i C en funktion til at få ASCII værdien fra et tegn ?
Avatar billede arne_v Ekspert
01. december 2004 - 10:42 #9
c = 'A'

c = 65;

c = 0x41;

char s[] = "A";
c = s[0];

skulle alle gøre præcis det samme
Avatar billede hmortensen Nybegynder
01. december 2004 - 10:51 #10
Funktionen virker faktisk når den ikke kaldes med en variabel.
Altså SkrivDisplay(0, 0, "Hej"); virker, men ikke SkrivDisplay(0, 0, var);

Er det mine datatyper den er gal med ?
Avatar billede arne_v Ekspert
01. december 2004 - 11:00 #11
SkrivDisplay(0, 0, "Hej");

og

char *var = "Hej";
SkrivDisplay(0, 0, var);

burde også virke ens
Avatar billede hmortensen Nybegynder
01. december 2004 - 11:11 #12
Men det gør det ikke. Ihvertfald ikke i system51.

Har du ikke en god idé ?
Avatar billede arne_v Ekspert
01. december 2004 - 11:14 #13
Mystisk.

Hvad med:

char var[4] = "Hej";
SkrivDisplay(0, 0, var);
Avatar billede segmose Nybegynder
01. december 2004 - 11:16 #14
char var[4] = "Hej";
SkrivDisplay(0, 0, var);
virker det?
burde også være det samme som SkrivDisplay(0, 0, "Hej");
prøv så at lave var const, virker det?
const char var[4] = "Hej";
Avatar billede hmortensen Nybegynder
01. december 2004 - 11:17 #15
Det får jeg desværre heller ikke noget ud af.

Jeg har prøvet:
void SkrivDisplay(int linie, int position, char *tekst)
og
void SkrivDisplay(int linie, int position, char tekst[])
Avatar billede segmose Nybegynder
01. december 2004 - 11:41 #16
Kan du være truffen af en signed / unsigned char ting?
hvilken type har XMEM?

void SkrivDisplay(const int linie, const int position, const char tekst[])
Avatar billede hmortensen Nybegynder
01. december 2004 - 13:39 #17
Jeg fik løst problemet ved at benytte den øvre hukommelse.

Ligger I lige et svar for jeres tid
Avatar billede arne_v Ekspert
01. december 2004 - 14:17 #18
ok
Avatar billede segmose Nybegynder
01. december 2004 - 14:20 #19
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester