Hi,
irgendwie kann ich die Befehle 'strncpy'/'strncat'/'strnlen' nicht nutzen.
testmenu.c:(.text+0xff4): undefined reference to `strncpy'
testmenu.c:(.text+0x1018): undefined reference to `strncat'
testmenu.c:(.text+0x1046): undefined reference to `strnlen'
Die String.h hab ich auch eingebunden (#include "string.h").
Der Code sieht an der Stelle folgendermaßen aus (hab vorher noch nie C-programmiert...daher evtl. total unbrauchbarer/umständlich/falscher Code)....
while (strncmp(serial_getc(),".",1)==1)
{
strncpy(replay, serial_getc(), 1);
}
Ich möchte eigentlich nur meine gesnifften Daten vom Rechner an die Betty schicken (über RS232).
Dort sollen die Daten (0-en und 1-er) so lange gesammelt werden (quasi in der variable replay) bis ein "." kommt.
Der "." signalisiert der Betty das Ende der Daten. Danach soll Sie dann die Daten entsprechende rausfunken.
while(KEY_Exit) {};
for (i=1;i=strlen(replay);i++)
{
strncat(act_char, replay+i, 1);
waitus(50); //Daten wurden mit 50µs Abtastung aufgenommen
//waitus(50);
if(act_char=0)
{
FIOCLR0 = GDO0; //Kein Signal wird gesendet - Low
} else {
FIOSET0 = GDO0; //Signal wird gesendet - High
}
Komischerweise kann ich aber strncmp nutzen....da gibt es keinen Fehler.
Was muss ich denn beachten?
Muss ich die "string.h" ausser in der testmenu.c noch wo anders einbinden?
Viele Grüße, vielen Dank und einen guten Rutsch ins neue Jahr 2010
Asgard
Hallo Asgard,
Die String.h hab ich auch eingebunden (#include "string.h").
Standardbibliotheken werden nicht mit Anführungszeichen eingebunden. Richtig ist:
#include <string.h>
while (strncmp(serial_getc(),".",1)==1)
{
strncpy(replay, serial_getc(), 1);
}
Du liest hier zwei mal ein Zeichen ein. Das Zeichen, das du auf das Übertragungsende hin überprüfst ist ein anderes als das, was du in replay abspeicherst.
Dort sollen die Daten (0-en und 1-er) so lange gesammelt werden (quasi in der variable replay) bis ein "." kommt.
Kommt da (unsigned char) 0 und 1 oder (ASCII) '0' und '1'? Wenn da 0 und 1 kommt wird das mit Stringfunktionen sowieso nicht funktionieren. (wegen der Nullterminierung von Strings)
Versuch das ganze mal ohne Stringfunktionen zu schreiben. Die sind für dieses Problem nicht notwendig.
Gruß
Telekatz
Hi Telekatz,
Standardbibliotheken werden nicht mit Anführungszeichen eingebunden. Richtig ist:
#include <string.h>
das habe ich jetzt probiert, da bekomme ich leider die selben Fehlermeldungen:
testmenu.c:(.text+0xff4): undefined reference to `strncpy'
testmenu.c:(.text+0x1018): undefined reference to `strncat'
testmenu.c:(.text+0x1044): undefined reference to `strlen'
Kommt da (unsigned char) 0 und 1 oder (ASCII) '0' und '1'? Wenn da 0 und 1 kommt wird das mit Stringfunktionen sowieso nicht funktionieren. (wegen der Nullterminierung von Strings)
du frägst sachen ;D
ka...ich wollte die Daten einfach als String per rs232 rübersenden...also gehe ich von ASCII aus....
Versuch das ganze mal ohne Stringfunktionen zu schreiben. Die sind für dieses Problem nicht notwendig.
Hast du mir da mal nen Tipp...ich hab keine Ahnung wie ich das lösen könnte...
Viele Grüße und vielen Dank für deine Mühe und Zeit!
Asgard
das habe ich jetzt probiert, da bekomme ich leider die selben Fehlermeldungen:
Code:
testmenu.c:(.text+0xff4): undefined reference to `strncpy'
testmenu.c:(.text+0x1018): undefined reference to `strncat'
testmenu.c:(.text+0x1044): undefined reference to `strlen
'
Die libc.a muss noch im makefile hinzugefügt werden (-lc):
LIBS = -lgcc -lc
Wenn GCC jetzt beim kompilieren meckert, dass die libc.a nur hardware FB unterstützt, die libc.a im verzeichnis \WinARM\arm-elf\lib\interwork durch die beiliegende ersetzen.
Hast du mir da mal nen Tipp...ich hab keine Ahnung wie ich das lösen könnte...
for (i=1;i=strlen(replay);i++)
z.B.:
i=0;
while(replay[i] != '.') {
<Irgendwas machen>
i++;
}
strncat(act_char, replay+i, 1);
kann ersetzt werden durch
act_char = replay[i];
ka...ich wollte die Daten einfach als String per rs232 rübersenden...also gehe ich von ASCII aus....
if(act_char=0)
Dann muss das eine '0' sein.