www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Zeichen ind String suchen und auslesen


Autor: Index (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
#include <stdio.h>
#include <string.h>

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

    inputse(string,11);

    if(strchr(string, 'A'))
    {
        printf("String enthaelt ein A\n");
    }


    while(1);
}

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ß

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rene H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Versuchs mal mit
#include <strings.h>

statt
#include <string.h>

Autor: Rene H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Obwohl vergiss es. strchr müsste in string.h drin sein.

Sorry.

Autor: Index (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist das was in der sting.h gefunden habe:
// ANSII standard
extern int strlen(far char* px);
extern int strcmp(far char* pa,far char* pb);
extern int memcmp(far char* pa,far char* pb, int n);
extern far char* strcpy(far char * pdst, far char * psrc);

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

/* END */

Autor: Rene H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist das alles? Da steht aber nicht viel drin.

Was für ein Betriebssystem hast Du?

Weil sonst könntest Du mal in Deinem Include Verzeichnis nach strchr 
greppen, wo das drin ist.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Index schrieb:
> Das ist das was in der sting.h gefunden habe:
>
>
> // ANSII standard
> extern int strlen(far char* px);
> extern int strcmp(far char* pa,far char* pb);
> extern int memcmp(far char* pa,far char* pb, int n);
> extern far char* strcpy(far char * pdst, far char * psrc);
> 
> // Non ANSI byte move (Note: src first argument!)
> extern void bmove(far void * _psrc, far void * _pdest, unsigned int
> count);
> 
> /* END */
> 

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
far char* strchr( far char* pa, char c )
{
  while( *pa && *pa != c )
    pa++;

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

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.

Autor: Index (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Index (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich nutze Windows 7 HP.

Autor: Index (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Leider funktioniert es nicht.
Nun kommt so ein Fehler:
serikom.c 44: Error: unexpected type 'far char'

Muss ich wohl alles per Hand programmieren :/.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.
char* strchr( char* pa, char c )
{
  while( *pa && *pa != c )
    pa++;

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

Autor: Index (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ohne das far läuft es. Danke für die Hilfe Karl heinz.
Code sieht nun so aus:
#include <stdio.h>
#include <string.h>
#include <at89c51cc03.h>


void seri_init(void)
{
    SCON=0x52;
    TMOD|=0x20;
    TH1=0xfd;
    TR1=1;
    TI=1;
}

char* strchr( char* pa, char c )
{
  while( *pa && *pa != c )
    pa++;

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



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


    seri_init();

    printf("Programm gestartet.\n");

    

    inputse(string,11);

    if(strchr(string, 'A'))
    {
        printf("String enthaelt ein A\n");
    }


    while(1);
}

Autor: Stefan Hennig (stefanhennig)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.