-
Thread
SDCC und Strings mit Umlauten
Hallo Forumsmitglieder, ich bin gerade dabei ein umfangreiches Programm von Pascal nach C zu portieren. Im Programm werden viele Textstrings in verschiedenen Sprachen verwendet. Ich habe mir ein array of struct gebaut das im Codebereich abgelegt wird. Nun ist es aber so, dass die Strings
, aber wo kommt das 0xC2 her? Gruß Stefan
-
Thread
MPX 5500 und Formel in C
[c] ..... (value/1024) [/c] value ist ein int (wenn auch mit 32 Bit, was aber wurscht ist, denn value kann nur Werte zwischen 0 und 1023 annehmen). 1024 ist ein int Damit wird hier int
[[FAQ#Datentypen_in_Operationen]] oder jedes andere noch so grindige C-Buch.
-
Thread
Wie kann String von EEProm in Byte-Array eingelesen werden?
' EEProm-Daten $EEPROM _DataString1: Data "Das ist ein String" , 0 _DataString2: Data "Noch ein String" , 0 $Data dim sString as string * 30 ' String-variable dim sByte as Byte
gelöst. Siehe Anhang. Es ist NOCH einfacher als man denkt. ;-) Man darf nicht zu kompliziert denken und C mit BASCOm mischen. Dann klappts aus mit den Strings. >Ich möchte einen String, der im EEProm abgelegt ist, in ein Array >einlesen, um es seriell über UART mit dem Befehl MFG Falk
-
Thread
Propeller Uhr Bilder darstellen
Indem du alle drei Farben ansteuerst mit dem µC
meinen Output in ein Array und lasse jeden Buchstaben > einzeln nachschauen ...? void OutputString( const char* Text ) { while( *Text ) OutputCharacter( *Text++ ); } void OutputCharacter( char c ) { // suche c in der Fonttabelle // kopiere die Bits in den Ausgabepuffer }
-
Thread
Laufschrift auf dem HD44780
2x16 muss man das nicht. Der Rest ist aber identisch. Im Prinzip ist es einfach. Du willst einen String ala [c] char mein_text[38]"Hallo ich bin eine Laufschrift"; [/c] als Laufschrift in die 2. Zeile des LCD bringen. Also musst du beim ersten mal die Zeichen 0..15 ausgeben, dann 1..16, 2..17
das Display senden ohne ihn in das Array > "displayzeile" zu schreiben?? studiere das mal: [C] #include <avr/io.h> #include <lcd.h> #define CHARS_PER_LINE 16 void TextOut( const char* string ) { int nrChars = 0; lcd_gotoxy( 0, 0 ); while( nrChars < CHARS_PER_LINE && *string
-
Thread
pgmspace mit C++
Hallo! Ich versuche gerade ein Projekt für einen AVR in C++ zu realisieren, um Klassen und Vererbung nutzen zu können. In diesem Projekt wollte ich auch einige Daten im Programmspeicher des AVR ablegen (hauptsächlich String-Konstanten). Sobald allerdings
error: expected unqualified-id before string constant In file included from ../sideboard.c:7: ../uart.h:38: error: expected `,' or `...' before '*' token ../uart.h:38: error: ISO C++ forbids declaration of `prog_char' with no type make: *
-
Thread
Aquariumcontroller: hängt sich auf / stürzt ab / friert ein - Hilfe!
kann mit *.ino, *.txt nichts anfangen. Welche Programmiersprache ist denn das? Ich programmiere in C und da heißen die Programme *.c, *.h. Peter
auf einem Microcontroller ohne Reserve-RAM als Auslagerungsspeicher auf Festplatte, würde ich die C++ String-Objekte im Programm dringend meiden. Meine Tipps zur Einsparung vom RAM-Speicher und zur Vermeidung der Defragmentierung des RAM-Speichers wären: 1. Auf "String" Objekte im Programm komplett
-
Thread
keine variable, kein pointer- was dann?
Funktionen, bei denen die Funktion das übergebene Argument verändern können muss Am Beispiel eines int [C] void foo( int * i ) { *i = 5; } int main() { int j; foo( &j ); } [/C] Jetzt sei i kein int, sondern es gehe um Strings. Ersetzt int von oben durch char* (und natürlich
void foo( T * argument ) [/C] eben [C] void foo( char* * argument ) [/C] und da an dieser Stelle Leerzeichen keine Rolle spielen, ist das Äquivalent zu einem char**
-
Thread
Wie kann ich Libraries in AVR Studio 5 einbinden?
bin\../lib/gcc/avr/4.5.1/../../../../avr/include/string.h 133 15 test1 Warning 5 pointer targets in passing argument 1 of 'strcpy' differ in signedness c:\users\it-lab08\documents\avrstudio\test1\test1\cmdline.c 307 4 test1 Error 6 expected
\test1\fat.c 329 4 test1 Error 27 expected 'char *' but argument is of type 'unsigned char *' c:\program files (x86)\atmel\avr studio 5.0\avr toolchain\bin\../lib/gcc/avr/4.5.1/../../../../avr/include/string.h
-
Thread
STM32 Eingänge einlesen und auswerten
der entsprechende Eingang gesetzt ist oder nicht. Ich blicke aber immer noch nicht, wie ich diesen String dann über UART an meine C# WinForms Anwendung senden kann und dort ein Ereignis auslösen ?? Kann mir bitte jemand weiterhelfen ????
mitfühlend den Kopf neigen, Dich aber nicht weiterbringen. Wir müssen wissen, wo es hakt. 2. Lies ein C-Buch und das Datenblatt. Solche Code-Snippets wie [c] #define RELAIS(a) {if(a>0)GPIOE->BSRR |= GPIO_Pin_6; else GPIOE->BRR |= GPIO_Pin_6;} [/c] deuten auf einen Mangel in mindestens einer
-
Thread
[ARM-GCC] malloc Page Size 4096 Byte änderbar?
/mallocr.c Das macht malloc, um den Memory für die MMU an 4kB-Grenzen auszurichten.
Ich hab es jetzt so gelöst: [c] void* mymalloc(int s) { caddr_t addr = _sbrk(s+3); return (void*) ((uint32_t) (addr+3) & ~0x3); } [/c] Jetzt passts auch mit dem RAM ;-)
-
Thread
Alternative zu sprintf
verwenden (19 + die abschließende 0). Man würde wohl auch SendUartData() so implementieren, daß es mit C-Strings klarkommt und sich die explizite Längenangabe sparen. Und natürlich kann man in diesem speziellen Fall das sprintf() auch einfachst durch etwas handgeschriebenes ersetzen. Das wird zwar längerer
Foobar schrieb im Beitrag #7383076: [c] > uint8_t slen = sizeof("Time: nn:nn:nn:nnn\n"); > char *TxData = alloca(slen); [/c] Für diesen Fall kann man übrigens auch schreiben: [c] char TxDat[sizeof("Time: nn:nn:nn:nnn\n")]; [/c]
-
Thread
Altes EPROM auslesen Intersil 6654A (2xCE) mit Arduino
der zu initialisierenden Elemente angegeben Du verwechselst Initialisieren mit Deklarieren. [c] int bla[2]; [/c] deklariert ein Array vom Typ int mit zwei Elementen. [c] int bla[2] = { 1 }; [/c] deklariert ein Array vom Typ int mit zwei Elementen und initialisiert das erste davon
Armin schrieb im Beitrag #7397655: > Strings sind nicht in ASCII. Zeig doch mal (per C&P, nicht in Deinen eigenen Worten).
-
Thread
ARM Assembly: Warum nop?
0x696e695f 80074fc: 0074 .short 0x0074 80074fe: bf00 nop 8007500: ff00000c .word 0xff00000c [/pre] Das sind Daten, keine Befehle. Das erste dürfte der String "drv0_init\0" sein. Wofür die weiteren 0x00 0xbf 0x0c 0x00 0x00 0xff sind, erschließt sich mir so direkt nicht
Jörg W. schrieb im Beitrag #7227260: > 0x00 0xbf 0x0c 0x00 0x00 0xff Nur 0xbf 0x0c 0x00 0x00 0xff Weil der 0x00 am anfang noch zu dem String gehört. Null terminated string brauch am ende den 0, sonst weiss man nicht wo es endet. Der NOP kann dann
-
Thread
Herauslesen eines bestimmten Elements aus der Liste (C#)
Hallo! Ich komme gerade nicht weiter. Ich habe eine Liste, nennen wir sie mal "listedLines", die folgendes enthält... BO_ 300 EngSpeedContr: 1 EngineTest BO_ 100 EngineData: 4 EngineControl BO_ 201 ABSdata: 3 ABS BO_ 199 WheelInfoIEEE: 8 ABS BO_ 200 WheelInfo: 8 ABS Nun möchte ich aus der Liste, nur die Namen, sprich das zweite Element: EngSpeedContr EngineData ABSdata WheelInfoIEEE WheelInfo herauslesen und in ein File schreiben. Mir fehlt gerade der Ansatz, weil ich das über "ElementAt(2)" probiert habe und es nicht klappt. Kann mir da jemand was anderes empfehlen?
-
Thread
Verständnisfrage zu Strings im SRAM
Ok. Folgendes: [C] void fooX(void) { char sText[20] = "19Zeichenlangertext..."; printf(sText); } [/C] belegt 20Byte Stack. Schließlich wird die Variable mit dem String auf dem Stack erzeugt. Die Variable wird also bei jedem Funktionsaufruf mit diesem String initialisiert. [C] void fooX(void) { printf("19Zeichenlangertext..."); } [/C] belegt 20Byte RAM. Und zwar für immer, da der String zu Programmstart aus dem ROM in das RAM befördert wird
-
Thread
Nullen von float Wert ermitteln
Justin S. schrieb im Beitrag #7397411: > Und Wandlung in einen String ist ebenfalls "heftige Kost" Wenn aber (aus welchen nicht nachvollziehbaren Gründen auch immer) die Anzahl der Nullen in genau diesem String interessant ist z.B. weil da steht [c] printf("Die Zahl %f enthält %d Nullen", f, n); [/c] dann bleibt einem nichts andere übrig, als genau die Nullen in genau diesem String zu zählen...
-
Thread
String als Password Wandlung
, der für Stringverarbeitung brauchbar wäre. Wenn schon, dann [c] char login[6]; [/c] aber ob ein Array der Größe 6 ausreichend ist, kann ich nicht sagen. Da passen nur 5 Zeichen, in Kombination mit dem für Strings obligatorischen abschliessendem \0-Zeichen rein
diese 64 > als Vergleichsvariable Du kannst nicht einfach "die Variable" vergleichen: http://www.c-howto.de/tutorial-strings-zeichenketten-stringfunktionen-vergleichen-strcmp.html
-
Thread
der gcc, das const-Schlüsselwort und der Speicher...
muessten, so wie ich das vom 8051 kenne. Dort gibt es den "movc" Befehl, und wenn man "const" - Strings benutzt, muss man sich weiter keine Gedanken machen: die Sachen landen dann alle im eprom und gut isses." Von welchen 8051 Compiler sprichst Du denn ? Beim Keil C51 ist es definitiv nicht so
static const MENU MainMenu [] PROGMEM = { { MenuHdr0, MenuHdr20, Help }, <------ main.c 499 { RomZ } }; /*---------------------------------*/ avr-gcc -c -mmcu=at90s8535 -I. -g -Os -Wall -Wstrict-prototypes -std=gnu99 main.c -o uhr2/main.o main.c:499: warning: initialization discards
-
Thread
Zeichenempfang mit USART (HyperTerminal)
while( NextChar != '\n' && StringLen < MaxLen - 1 ) { *Buffer++ = NextChar; StringLen++; NextChar = uart_getc(); } // Noch ein '\0' anhängen um einen Standard // C-String daraus zu machen *Buffer = '\0'; } int main (void
' anhängen um einen Standard // C-String daraus zu machen *Buffer = '\0'; } [/C] mit dem hier [C] void uart_gets( char* Buffer, uint8_t MaxLen ) { uint8_t NextChar; uint8_t StringLen = 0; NextChar = uart_getc(); /
-
Thread
Basic und/bzw. vs - C Erfahrungsumfrage
iaoffline schrieb im Beitrag #2514215: > C hat schlicht weniger Befehle C hat /keine/ Befehle.
runs in four languages with the same effect. c The languages are C, Fortran, C Shell and Bourne Shell. c Written by Vadim Antonov, avg@hq.demos.su c*/ [/pre]
-
Thread
Mein µC kann nicht rechnen ?!
while (*s) { /* so lange *s != '\0' also ungleich dem "String-Endezeichen" */ uart_putc(*s); s++; } } [/c] Was mache ich da falsch? Vielen Dank für eure Tipps
} } [/C]
-
Thread
USART in Funktion
so: [c] void Licht (char *String88Ein, uint8_t SpeicherDimmwert) { usart_write_PC(String88Ein); } [/c] Dann spuckt er mir einen Fehler aus: undefined reference to `usart_write_PC'
Mmmhh...leider hat's doch noch nicht geklappt: So: [c] void Licht (char *String88Ein, uint8_t SpeicherDimmwert) { usart_writePC(String88Ein,SpeicherDimmwert); } [/c] oder so: [c] usart_writePC(String88Ein,SpeicherDimmwert
-
Thread
uart progmem: invalid initialiser
haben will, also zb [c] uart1_puts_p( "ok" ); // der String "ok" soll im Flash liegen [/c] dann geht das klarerweise so nicht. Ich kann den String nicht direkt im Funtionsaufruf angeben. Ich müsste also schreiben
anlegen zu müssen, auf die ich mich dann im uart1_puts_p beziehen kann, kann ich gleich einfach [c] uart1_puts_P( "ok" ); [/c] schreiben und das Makro erledigt den Rest. Der String "ok" wird im Flash angelegt und die Funktion uart1_puts_p wird darauf aufgerufen. Was ist daher an [c]
-
Thread
uart senden und empfangen im atmega8
i; char c; char* s; char string[length+1]; while(1) { s=string; i=0; do { c=UART_Getc(); if (c!='\r') { *s=c;
Danke. Ich war sogar Blind jetzt klappt. [c] void UART_Gets (char* string, unsigned int Length) { uint8_t i; char c; char* s; //char string[Length+1]; s=string; i=0; do { c=UART_Getc();
-
Thread
mit USART auf bestimtes Zeichen warten
USART_Transmit(xAngStr[3]); Schreib dir als allererstes mal eine Funktion, mit der du einen String ausgeben kannst. Dieses ständige Rumhantieren mit einzelnen Charactern ist ja nicht zum aushalten. [C] void USART_Transmit_String( const char* String ) { while( *String ) { USART_Transmit( *String ); String++; } } [/C] Jetzt probierst du diese Funktion mal aus: [C] int main() { .... while( 1 ) { USART_Transmit_String( "Hallo" ); } } [/C] Wenn das soweit
-
Thread
Ansteuerung eines DOGM-LCD mit Atmega8 Hardware SPI
PORTB = (1 << DDB6); // high } } int main(void) { init_LCD(); char* string = "Hallo Welt :-)"; print_LCD(string); while (1) { asm volatile ("nop"); } return 0; }[/c] Und Leute,... seid gnädig mit mir! für mich ist das wirklich
_delay_ms(50); print_LCD(string2); _delay_ms(50); print_LCD(string3); _delay_ms(50); print_LCD(string4); _delay_ms(50); } return 0; }[/c] hat jemand eine Idee dazu?
-
Thread
Datentyp Stringübertragung UART Peter Fleury - ATMega8
// Noch ein '\0' anhängen um einen Standard // C-String daraus zu machen *Buffer = '\0'; } [/c] Brauch ich das alles, um einen String einzulesen? Vielen Dank schon mal für eure Hilfe!!!! Gruß, Steffen
'char' ../UARTtoLCD.c:40: error: variable-sized object may not be initialized ../UARTtoLCD.c:40: warning: unused variable 'anzeigeb' ../UARTtoLCD.c:43: error: expected ';' before 'lcd_string' ../UARTtoLCD.c:50: warning
-
Thread
Display Menü LCD 4x20
::menu(string n) { count = 0; name = n; } void menu::add_entry(entry *a) { entrys.push_back(a); count++; } bool isnum(string a) { for (int c = 0; c < a.length(); c++) { if (
= NULL); private: menu *next; string text; int id; }; #endif [/c] [c] // sample main.cpp #include<iostream> #include<vector> #include<string> using namespace std; #include"menu.hpp" main() { menu *menu0 = new menu
-
Thread
Arduino Programm wird nicht compiliert. Bootcamp.hpp aus C't
properties, size_t len, size_t index, size_t total) { payload[len] = '\0'; String strTopic = String(topic); String strPayload = String((char * ) payload); if (strTopic == "example1/led") { if (strPayload == "off" || strPayload == "0" || strPayload == "false") digitalWrite
In der aktuellen c't gibt es ab Seite 158 einige Hinweise auf Übersetzungsprobleme, die bei "basecamp" und Co. auftreten können.
-
Thread
LCD 0 anzeigen uint16_t
} } lcd_xpos+=6; } void lcd_writestring(const char *string) { do { lcd_writechar(*string); } while (*string++); } [/c] Und hier noch die main.c wo ich das ganze aufrufe: [c] #define F_CPU 3686400UL #include <avr/
auch immer die Null-Terminierung mit aus." > > Wie kann ich das umgehen ? Indem du die writeString Funktion so veränderst, dass sie das abschliessende '\0' Zeichen eines jeden Strings nicht mit ausgibt. [C] void lcd_writestring(const char *string) { while (*string) lcd_writechar(*string
-
Thread
Umwandlung eines Strings (hex) in Long Long int
Funktion, die mir aus 2 Zeichen eine Zahl macht. hier die Funktion: [c] // Umwandlung von 2 Zeichen eines strings in ein Byte unsigned char hex(unsigned char a, unsigned char b) { unsigned char c=0; if(a < 59){ c = 16 * ( a - 48); // wenn a eine zahl
} [/c] Jetzt hole ich mir die ganzen Zeichen aus dem String und schiebe sie in meine Variable: [c] frequenz = 0ULL; frequenz += (unsigned long long)hex(display_text[6], display_text [7])
-
Thread
UART String einlesen
//Maximaler Zeitabstand zwischen zwei Zeichen string[i] = USART_ReveiveTimeDelay(1); [/C] Kein Mensch kann 1000 Zeichen in der Sekunde tippen, du verlangst hier zuviel. Timeouts macht man anders. Spars dir hier aber: Einen Benutzer treibt man nicht
nicht 1000 Zeichen in der Sekunde! Doch das tust du. Du gestehst deinem Benutzer gerade einmal [C] string[i] = USART_ReveiveTimeDelay(1); [/C] 1 Millisekunde Timeout Zeit zu. > Bei meinem Terminalprogramm gibt der Benutzer zuerst seinen ganzen > Befehl in einen Zeile und drückt dann
-
Thread
Attiny85 ADC Eingangswiderstand - wie hoch
die Codezeilen aus den unteren Tests hinein // : Serial.println("Spannungsteiler: " + String(an0) + " - Poti: " + String(an4)); } [/c] **Test 1:** es wird nur der Spannungsteiler (ohne C2) an A0 gewandelt. [c] : // an4 = analogRead(A4); // Poti an0 = analogRead(A0); // Spannungsteiler
Spannungsteiler einlesen if (!i--) { i = 4600; Serial.println("Spannungsteiler: " + String(an0) + " - Poti: " + String(an4)); } } [/c] > Kann der Spannungsteiler den 10nF schneller nachladen als der Sample-C > ihn entlädt? Nein, das klappt nicht, das ist das Ergebnis: [pre]
-
Thread
Datenübertragung MC <-> PC mit C#
abarbeitet. Die Verzögerungen liegen im mehrstelligen Sekundenbereich. Hier der Programmteil im C#-Programm der die Daten empfängt [c] private void spoUSB_DataReceived(object sender, SerialDataReceivedEventArgs e) { int Wert;
Ich lese mit 500.000 Baud 8-bit AD-Werte, mit C# hab ich das so gelöst, ohne Event: [c] SerialPort s = new SerialPort("COM4", 500000); int i = 0; int[] data = new int[SIZE]; s.Open();
-
Thread
TIMER2_OVF_vect Interrupt Problem
immer). > aber okay > TIMSK2 =0x00; Nein. Das ist die Maske, nicht die Interruptflags. [c] TIFR2 = 0xff; [/c] Oder wenn du es ,,politisch korrekt'' machen willst: [c] TIFR2 = (1 << OCF2B) | (1 << OCF2A) | (1 << TOV2); [/c]
while ((ASSR & (1<<TCR2BUB)) != 0); sleep_cpu(); } } return(0); }[/c]
-
Thread
Vergesslicher, ungeduldiger atmega bei UART
[i]); i++; }; strcpy(sensor, "");// String leeren _delay_ms(500); sensorold = sensorbin; } } } [/c]
obwohl die erste komplett reicht. Martin W. schrieb im Beitrag #4702896: > strcpy(sensor, "");// String leeren [c] sensor[0] = '\0' [/c] ist hier etwas eleganter. Man muss nicht unbedingt immer mit Funktionen auf Variablen schießen - auch wenn sie in moderneren C-Compiler-Umgebungen intern abgebildet
-
Thread
Warum springt der Debugger hier hin?
char *progmem_s ) { register char c; while( (c = pgm_read_byte(progmem_s++)) ) uart1_putc(c); }/* uart1_puts_p */ Programm: ISR(TIMER2_OVF_vect) { time++; int h=0; char b[3]; PORTC=time; itoa(h,b,
char *progmem_s ) { register char c; while( (c = pgm_read_byte(progmem_s++)) ) er springt eigentlich direkt in die while Zeile! Ich weiß einfach nicht wieso er das macht! uart1_putc(c); }/* uart1_puts_p */ Gruß Tommy
-
Thread
UART String senden/empfangen
Das hier [C] char* string[]; [/C] ist keine Speicherfläche, in der man einen String beliebiger Länge abspeichern kann. Du musst deine Ansprüche zurückschrauben. Beliebige Länge geht nicht. Setz dir eine Obergrenze
Bei Strings sollte man sich ueberlegen ob man den C-Furz durchziehen will, dh mit einem Null am Ende, oder ob man die Laenge am Anfang uebertragen soll.
-
Thread
Arduino RAM sparen mit PROGMEM und strcpy_P()
ganz konkrete Detailfragen, die eben nicht klar beantwortet werden. Zunächst zwei Code-Beispiele in C: [c] void doSomething( char fall ) { char command[45] = "Dies ist ein zu modifizierendes Textgerippe\n"; // verändere jetzt etwas am String command, bevor er weiterverarbeitet wird ...
, Cmd ); // verändere jetzt etwas am String command, bevor er weiterverarbeitet wird ... } [/c] Fragen dazu: 1) Stimmt es, dass beim 1. Programm der String vor main() zur Laufzeit ins Ram kopiert wird und dann beim Aufruf der Funktion
-
Thread
Interrupt Problem mit UART bei Atmega8535
Die LED soll angehen, wenn "CP001201" beim µC ankommt? Da musste erstmal nen String-Vergleich machen. C kennt keinen Datentyp "string". Da müsstest Du die Funktion strncmp aus der string.h benutzen.
www.mikrocontroller.net/articles/FAQ#Wie_funktioniert_String-Verarbeitung_in_C.3F
-
Thread
Wieviel Präprozessorei ist sinnvoll?
int #define public short c;}c;typedef int BufferedReader;char*F="JF>:>FB;;BII"; #define return {return #define static f(x){N=(N+x)%6,y--?f(0),f(1),f(4),f(1):++Y[(I=O+N[F]-66) #define String #define System c #define this if
auch dieser Link relevant zu dem Thema: https://stackoverflow.com/questions/9096201/concatenate-string-in-c-include-filename
-
Thread
USB: VID erwerben
Darstellung der verschiedenen Logos. Zwei Wortmarken allerdings darfst Du auch nicht verwenden, "USB Type-C" und "USB-C".
passenden Treiber mit. Rufus Τ. F. schrieb im Beitrag #5765442: > Zwei Wortmarken > "USB Type-C" und "USB-C". "Typ-C USB"? Oder "Typ-C USB-Connector"? Wir sollten uns einfach mal umsehen wie es die Chinesen machen. Die haben sogar einen Chip im Angebot der so günstig ist, das man sich die
-
Thread
Zeiger auf String in Flash - warning incompatible pointer type
‘main’: demo_lcd_test.c:55:1: warning: passing argument 3 of ‘lcd_write_string_p’ from incompatible pointer type [enabled by default] lcd_write_string_p(0,0,&titel_0); ^ In file included from demo_lcd_test.c:9:0: ./demo_lcd.h
schrieb im Beitrag #4846902: > Meine Absicht war, einen Zeiger auf den Anfang des 0-terminierten > Strings zu uebergeben. Also so: [c]lcd_write_string_p(0,0,&titel_0[0]);[/c] Das zeigt auf das erste Byte und nicht falsch wie hier: [c]lcd_write_string_p(0,0,&titel_0);[/c] Das zeigte auf den String
-
Thread
Serielle Kommunikation mit Arduino
p_brake=0" wirds zwar korrekt zurückgegeben aber ich kann damit nichts vergleichen (mit "strcmp(inString, "p_brake=1")") d.h. es passiert nicht. Hab dann herausgefunden, dass er nicht die gesamten strings oder so einließt und habe dazu u.a. das hier getestet: [c] #define MAXSTRING 5 char inString
Kaj schrieb im Beitrag #3683799: > Peter L. schrieb im Beitrag #3683483: >> if ( !strcmp(inString, "start") ) > Weißt du was da steht? Natürlich weißt du es nicht... > Da steht: > [c] > if( strcmp(inString, "start") != 0 ) > [/c] > Das heißt soviel wie: wenn der empfangene String *nicht*
-
Thread
32-Bit-µC: Möglichst viel uint8_t verwenden?
Das Ärgerliche daran ist, daß es derart in Mode gekommen ist, daß viele Programmierer meinen, in C jetzt echte neue Integertypen zu haben und die Gedankenlosigkeit geht so weit, daß selbst für Textzeichen uint8_t verwendet werden. Als ob ein String "Ottokar" zum Integer-Rechnen gedacht sei. Und
C-Standard-Lib hast Du gar nichts, noch nichtmals stdio.h. Wenn Du stdint.h ablehnst, dann sei wenigstens so konsequent und mache auch um die stdio.h, string.h und alle weiteren einen großen Bogen.
-
Thread
Verstehe diese Fehlermeldung nicht
aber >eine kopie in putstring. Genau das ist das Problem. Das const wird verworfen. Wenn Du [c] void putString( const char *str ) [/c] definierst, dürfte die Warnung weg sein.
übergebenen String, dann dokumentierst du das auch im Funktionskopf: [C] void foo2( char* String ) { // mach was mit dem String // das kann auch soweit gehen, dass der String verändert wird } [/C] Und
-
Thread
#define Frage
[c] #define ultraschall_StarteMessungSRF04(PORT, TriggerPulse_PIN) {PORT |= (1<<TriggerPulse_PIN); _delay_us(12); PORT &=~ (1<<TriggerPulse_PIN);} [/c] Wenn ich die {} weglasse dann sagt der Compiler
schreibe? Das sind genau 3 Befehle, mit 3 Parameter. Also statt eine Definitionszeile sowas: [c] void(uint8_t PORT, uint8_t TriggerPulse_PIN, uint8_t delayTime_tillSTART_us) { . . . } [/c] Außerdem kriege ich dann probleme wenn ich einen String PORTA als Argument bekomme, dann muss ich
-
Thread
EEPROM gibt nur 122 zurück
( Buffer ); long_delay(500); } } [/c]
auslesen()' mit dem hier ersetzen 'auslesen2()' und dieses in dein Programm einfügen. (vor Main) [c] #include <stdio.h> void auslesen2(void) { set_cursor(1,1); sprintf_P( ITOA_Buffer, "Counter=%d", counter); lcd_string( ITOA_Buffer ); } [/c] Wenn die Ausgabe richtig läuft,
-
Thread
Wie wandelt ich Dez in Hex um?
einen String zu bauen, mußt du erstmal Speicher dafür haben. Du könntest es etwa so machen: [C] char stringtext[4]; // Platz für 3 Zeichen + Stringterminierung sprintf(stringtext, "%c%c%c", BufferUart[0],
Wie wäre es denn mit: itoa (int zahl, char *string, int radix ); Info: http://www.goblack.de/desy/sc12chip/c/bibliothek/itoa.html