Zeichen ind String suchen und auslesen

Gast #1896063
Lesenswert?

Hallo, ich hoffe ihr könnt mir helfen.
Ich will einen String an meinem Mikrocontroller übergeben.
Nun will ich in diesem String Buchstaben und Zahlen suchen.
Beispiel eines Strings: A1006

Nun scheitere ich aber schon bei der Suche nach dem "A".

Mein C-Code:
1
#include <stdio.h>
2
#include <string.h>
3

4
void main(void)
5
{
6
    unsigned char string[10];     //zB. A1006
7
    printf("Programm gestartet.\n");
8

9
    inputse(string,11);
10

11
    if(strchr(string, 'A'))
12
    {
13
        printf("String enthaelt ein A\n");
14
    }
15

16

17
    while(1);
18
}

Ich bekomme folgende Fehlermeldung ausgegeben:
Error: serikom.s51 120: unresolved reference to '_strchr'

Was mache ich falsch?

Programmiert wird mit dem Jens File Editor.

Gruß
#1896079
Lesenswert?

Aus C-Sicht ist an deinem Code nichts falsch (zumindest nicht an der 
Stelle)

* Das sieht nach einem Installations/Konfigurationsproblem
  deiner Entwicklungsumgebung aus

* möglich wäre auch noch, dass deine Entwicklungsumgebung keinen
  vollständigen Satz an Standardfunktionen mitbringt. Obwohl das
  eigentlich eher unwahrscheinlich ist, da die str Funktion und im
  speziellen strchr ziemlich trivial sind.
  Ist denn in string.h ein Protoyp für strchr enthalten?
  Wenn ja, dann deutet das ebenfalls auf ein Installationsproblem
  hin.
Gast #1896113
Lesenswert?

Das ist das was in der sting.h gefunden habe:
1
// ANSII standard
2
extern int strlen(far char* px);
3
extern int strcmp(far char* pa,far char* pb);
4
extern int memcmp(far char* pa,far char* pb, int n);
5
extern far char* strcpy(far char * pdst, far char * psrc);
6

7
// Non ANSI byte move (Note: src first argument!)
8
extern void bmove(far void * _psrc, far void * _pdest, unsigned int count);
9

10
/* END */
#1896129
Lesenswert?

Index schrieb:
> Das ist das was in der sting.h gefunden habe:
>
>
1
> // ANSII standard
2
> extern int strlen(far char* px);
3
> extern int strcmp(far char* pa,far char* pb);
4
> extern int memcmp(far char* pa,far char* pb, int n);
5
> extern far char* strcpy(far char * pdst, far char * psrc);
6
> 
7
> // Non ANSI byte move (Note: src first argument!)
8
> extern void bmove(far void * _psrc, far void * _pdest, unsigned int
9
> count);
10
> 
11
> /* END */
12
>

kein strchr?

Ausserdem fehlt da noch jede Menge und das far da drinnen macht mich 
nervös.

Ein strchr kann man sich (im Prinzip) auch leicht selber schreiben
1
far char* strchr( far char* pa, char c )
2
{
3
  while( *pa && *pa != c )
4
    pa++;
5

6
  return (*pa == c ) ? pa : 0;
7
}

und da das so trivial ist, wundert es mich, dass der Compilerhersteller 
das nicht gemacht hat.
Wie gesagt: das far macht mich nervös. Da könnte mehr dahinter stecken. 
Probier mal die Selbstbau-Version aus.
Gast #1896148
Lesenswert?

Wundert mich auch, das da so wenig drin steht.
Ich installier noch mal die etwas neue Version.
Softwarepaket ist von Wickenhäuser Elektrotechnik.

Wenn es dann noch immer nicht drin ist versuche ich die 
Selbstbau-Version.
Danke.
#1896205
Lesenswert?

Index schrieb:
> Leider funktioniert es nicht.
> Nun kommt so ein Fehler:
> serikom.c 44: Error: unexpected type 'far char'

dann nimm das "far" an allen Stellen raus.
Ich habs nur mit aufgenommen, weil deine Vorlagen in string.h es auch 
haben.
1
char* strchr( char* pa, char c )
2
{
3
  while( *pa && *pa != c )
4
    pa++;
5

6
  return (*pa == c ) ? pa : 0;
7
}
Gast #1896249
Lesenswert?

Ohne das far läuft es. Danke für die Hilfe Karl heinz.
Code sieht nun so aus:
1
#include <stdio.h>
2
#include <string.h>
3
#include <at89c51cc03.h>
4

5

6
void seri_init(void)
7
{
8
    SCON=0x52;
9
    TMOD|=0x20;
10
    TH1=0xfd;
11
    TR1=1;
12
    TI=1;
13
}
14

15
char* strchr( char* pa, char c )
16
{
17
  while( *pa && *pa != c )
18
    pa++;
19

20
  return (*pa == c ) ? pa : 0;
21
}
22

23

24

25
void main(void)
26
{
27
    unsigned char string[10];     //zB. A1006
28

29

30
    seri_init();
31

32
    printf("Programm gestartet.\n");
33

34
    
35

36
    inputse(string,11);
37

38
    if(strchr(string, 'A'))
39
    {
40
        printf("String enthaelt ein A\n");
41
    }
42

43

44
    while(1);
45
}
#1896271
Lesenswert?

Index schrieb:
> Leider funktioniert es nicht.
>
> Nun kommt so ein Fehler:
>
> serikom.c 44: Error: unexpected type 'far char'
>
>
>
> Muss ich wohl alles per Hand programmieren :/.

Nicht unbedingt. Du musst aber unbedingt darüber nachdenken, was Du da 
compilierst und was Du uns da zeigst.
Wenn der Compiler mit far char nix anfangen kann, wieso konnte er dann 
die Header inkludieren, die Du uns gezeigt hast? Bist Du sicher, dass Du 
die Header aus dem richtigen Verzeichnis genommen hast? Bist Du sicher, 
dass der Compiler ins richtige Verzeichnis schaut? Hast Du Deinen 
Workflow korrekt eingerichtet?

Wenn Du das nicht sicher im Griff hast, wirst Du sehr bald noch viel 
mehr Probleme bekommen.

Grüße,
  Stefan

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren