-
Thread
Zahl umdrehen?
, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8, 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8, 0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4, 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4, 0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC, 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC, 0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2, 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2, 0x0A, 0x8A, 0x4A, 0xCA,
-
Thread
Strings im Flash am LCD ausgeben
Texte jetzt aber mit LCD_Out (Optionen); ausgeben will, bekomme ich folgende Warnung: main.c:444: warning: passing arg 1 of `LCD_Out' discards qualifiers from pointer target type Funktioniert die direkte Ausgabe eines Strings vom Flash ans LCD anders als so? Vielen Dank jetzt schon mal
Programmspeicher_.28Flash.29 http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Vereinfachung_f.C3.BCr_Zeichenketten_.28Strings.29_im_Flash
-
Thread
GPS- Signal über RS232 einlesen (Atmega 644)
Normalerweise ja mit a[2], > geht aber ja nicht wegen meiner Routine. Richtig, weil deine Routine einen String will. Normalerweise baut man eine String Ausgabe so auf, dass die auf eine Zeichenausgabe zurückgreift. Denn ein String ist ja nichts anderes als eine Abfolge von Zeichen. Also kann man einen String
machen. Man kann eine Funktion schreiben, die ein einzelnes Zeichen ausgibt, indem sie es in einem String verpackt und dann den String ausgibt. [c] void unsigned char write_character_to_edip (unsigned char DevAddr, unsigned int x_pos,unsigned int y_pos, char c) { char buffer[2]; buffer[0]
-
Thread
Keil Hardfault STM32 Jlink
angeben. Ungetestet :) Ja, oder man nimmt dann gleich die string-Klasse ala: [c]my_text << "Hallo";[/c] Aber das wäre dann wohl zu einfach für dich oder? mfg
raten: [c]char str[MAX]; snprintf(str, MAX, "bla bla"); [/c] mfg
-
Thread
AVR GCC - Einfache Stringmanipulation
damit einzelne virtuelle Oszillatoren, deren Frequenz dann jeweils in ein DDS eingelesen wird. [c] void show_vfo(int vfo_num) { char *vfo_str = "VFO "; *(vfo_str + 4) = vfo_num + 65; lcd_put_string(x0 + 2, y0 + 2, vfo_str, 1, DARKBROWN, LIGHTGREEN); } [/c] Angezeigt werden
[c]char *vfo_str = "VFO ";[/c] deklariert einen Pointer auf ein (u.u. nicht beschreibbares String-Literal) Probier stattdessen mal: [c]char vfo_str[] = "VFO ";[/c] Dies deklariert einen beschreibbaren
-
Thread
Initialwert von globalen Variablen zur Laufzeit verwenden
447 1bf bm01a.elf 312 0 105 417 1a1 bm01.elf Die Variante bm01a ist der C-Code. bm01 ist der C++-Code. Das liegt eben daran, dass Du das Array nicht aus dem flash initialisierst, wie bei mit etwa durch den _pgm-String. Die fehlenden zwei Byte kommen daher, dass ich den
Wilhelm M. schrieb im Beitrag #6067728: > Die Variante bm01a ist der C-Code. bm01 ist der C++-Code. Welcher C-Code und welcher C++-Code? > Das liegt eben daran, dass Du das Array nicht aus dem flash > initialisierst, wie bei mit etwa durch den _pgm-String. Und
-
Thread
sprintf ohne '\0'
Ich habe einen C-String, der mit irgendeinem Text befüllt ist. In diesen will ich formatiert hineinschreiben (an eine beliebige Stelle). D.h. ich würde sprintf oder Konsorten dafür benutzen. Leider wird mir ja von
4, "%3d", spg ); sreplace( text, 15, "%3d", strm ); [/c] und das "spreplace" soll mit einem Format String arbeiten, aber das Ergebnis an eine definierte Stelle in den String einbauen. Ja, könnte man machen. Muss man aber selber programmieren. Elegant
-
Thread
LCD Display Off - On - Befehl
Normalerweiße werden die Zeichen weiß dargestellt. Liegt dies eventuell an meinem Code? Auszug: [c]if(flag_ls == 1) { flag_ls = 0; LED_PORT ^= 1<<LED0; lcd_clear(); lcd_setcursor(0,1); sprintf(buffer, "%d", second); lcd_string(buffer); }[/c]
; lcd_clear(); lcd_home(); while(1) { lcd_clear(); lcd_string( "Zahl: "); sprintf(buffer, "%4d", i); lcd_string(buffer); i = i + 1; if( i == 9999 ) i = 0; _delay_ms( 100 ); } } [/C] und dann das ganze ohne den lcd_clear
-
Thread
String-Array löschen
ist hier input ein Array mit der Länge 1. Da passt nur ein Zeichen rein. Wenn das dazu dann noch ein C String mit Nulltermination darstellen soll, passt da nur ein leerer String rein (sprich, nur das Nullbyte). > > //Codeausschnitt > zahler2=0; > do > { > USART_Receive(); > USART_Transmit(
C99). Tipp: Mach die USART_Transmit Funktion so, dass sie ein Zeichen ausgibt (Argument uint8_t), und eine weitere Funktion USART_Transmit_String(uint8_t*) oder so, die dann die Schleife implementiert
-
Thread
Atmega8L8 geht mal, mal nicht
adcval = ADC_Read(channel); sprintf(kanal, "%d" ,channel); send_string("c");//99 send_string("X");//88 send_string(kanal);//0=48 1=49 send_string("Y");//89 sprintf (text, "%u", adcval); send_string(text);
Interrupt. Hallo, ok, die Ausgaben sind bzw. waren, um zu sehen ob der Interrupt funktioniert, [c]"channels= atoi(&uart_string[1]);" [/c] ist das einzige was ich hier benötige, das andere fliegt nach dem Test raus. Blockkondensatoren-> ? hab ich genau so verbaut wie im Schaltbild angegeben: http
-
Thread
Unique ID auslesen STM32F4Discovery
(0x1FFF7A10) [..] [/c] STM32Cube_FW_F4_V1.3.0/Projects/STM324x9I_EVAL/Applications/USB_Device/MSC_Standalone/Src/usbd_desc.c: [c] /** * @brief Create the serial number string descriptor * @param None *
Wenn dann richtig: [c] if (StringEqual(user_id,"Dispol")) { account_balance = 10 * abs(account_balance); } [/c]
-
Thread
String-Ausgabe via UART, kurze Frage zum C Code
Du solltest string nicht auf 0 setzen: [c]for (;; string++)[/c] Alles in allem etwas quer, aber sollte passen.
Nachtrag: [c] unsigned int uart_puts(char *string) { for (; *string != '\0'; string++) { uart_putc(*string); } return (0); } [/c]
-
Thread
strcat Problem Nullbyte
: datei=="text.txt" fflush(stdin); strcat(pfad,datei); stream=fopen(pfad,"r"); [/c] Diese letzte Zeile wird nicht ausgeführt, da schon davor bei strcat ein falscher String entsteht. Mein Debugger (GNU GCC Compiler) sagt, dass pfad nach strcat so aussieht: [c]pfad=="C:\\meinPfad
schrieb im Beitrag #1979745: > Im Programm steht natürlich \0. WO steht das in dem Programm? In C-Strings macht "\0" keinen Sinn, da das den String vorzeitig beenden würde. Und das \0 ganz am Ende macht der Compiler von sich aus, und auch sicher korrekt. Und, oben hab ichs schonmal geschrieben
-
Thread
GCC und Raspberry Pi
&parts[0] ist die Adresse des Pointer auf den String. Nicht die Adresse des Strings. Compilerwarnung igmoriert?
den Delimitern haben willst: Wenn du ein Leerzeichen meinst, dann schreib auch 'Leerzeichen'. [c] command[strlen(command)-1] = ' '; [/c] Was es allerdings für einen Sinn haben soll, die String-Terminierung noch mal zu beschreiben, erschliesst sich mir nicht. An der Stelle command[strlen(command
-
Thread
C Pointer frage..
variable global über der main funktion definiere, findet er die variable nicht mehr in einer anderen c datei. die funktionen in der angefügten c datei kann ich aus der main funktion aufrufen aber ich kann die globalen variablen nicht aus der c main datei nutzten. könnte das an dem makefile liegen?
Schreib dieses "extern" mal in die andere C-Datei: extern unsigned char test;
-
Thread
Benutzt ihr sprintf()? Gute Alternative?
Formatstings "%d" oder "%H". In manchen Anwendungen findet man einige hundert derartiger Strings. Nun, ich selber benutze printf und Konsorten eigentlich garnicht. Wozu auch? Bei Delphi auf dem PC hat man sowas nicht nötig und auf nem µC löse ich Textausgaben bereits beim Schreiben auf. Siehe conv.c bei der Lernbetty. Immerhin ist jeder wenigstens einigermaßen sinnvoll geschriebene Ausgabekonverter besser als jede printf Implementierung, weil der String-Interpreter nicht erforderlich ist. W.S
-
Thread
ESP32-Wroom32 und Arduino / C-Code verursacht reset
) { requestDoc["Modus"] = "Off"; } [/c]
ChargingType sieht man den Typ nicht. Könnte ein enum sein. Unten bei der Response ist es klar: [c] responseDoc["Modus"].as<String>() [/c] N. M. schrieb im Beitrag #8068359: > Bei der Wandlung der Response ist es das gleiche.
-
Thread
AVR für wenig Geld im LAN
,3)==0)[/c] Weiter oben muss natürlich noch die Deklaration des Zeitstring-Buffers eingefügt werden: char time_string_Buffer[10]; Vielleicht kann's ja noch jemand gebrauchen...
/rtl8019.c SRC += networkcard/enc28j60.c #SRC += httpd.c telnetd.c ntp.c lcd.c udp_lcd.c wol.c SRC += httpd.c ntp.c lcd.c udp_lcd.c #SRC += http_get.c analog.c sendmail.c SRC += http_get.c analog.c
-
Thread
sekundenzähler mit timer
bitte mal die Dokumentation zu den Ausgabefunktionen an. puts gibt grundsätzlich einen Character-String aus. Und der übergebene Datentyp ist ein Zeiger auf das erste String-Element, also ein "char*". Die Bibliotheksfunktion lcd_putsf erwartet anscheinend aber einen im Flash befindlichen String, so dass
Interrupt Handler und im Hauptprogramm verwendet wird, nicht volatile deklariert ist. Mach aus dem [c] int zaehler = 0; [/c] mal ein [c] volatile int zaehler; [/c] Das "= 0" kannste weglassen, da globale Variablen sowieso automatisch mit 0 initialisiert werden.
-
Thread
Flowcode contra "C"
Werbung: : Verbesserte und neue Eigenschaften der Version Flowcode 3 sind: 16-Bit-Arithmetik, Strings und String-Manipulation, .... : Sowas kann C schon von Anfang an. Wenn du nur mal schnell für 1 einziges Mini-Projekt ein Programm hinmalen willst, mag diese "modernste grafische Programmiersprache
eine Art Flow-Code sich in bestimmten Bereichen bestimmt durchsetzen wird :-) Programmiere mit C, C# C++, Assembler, LabView. Gerade LabView ist eine sehr mächtige grafische Programmiersprache die auch seine Berechtigung hat. Gruß Gerhard PS: Lerne C die hilft dir bei allen Lebenslagen
-
Thread
GPS Daten Umrechnen und ausgeben (float to string)
gerechnet wurde Nun möchte ich die Float wieder per RS232 zum PC Senden die habe ich so versucht: [c] string[0] = (ufLatitude / 100); string[1] = (ufLatitude / 10); string[2] = (ufLatitude / 1); string[3] = '.'; string[4] = (ufLatitude / 0.1); string[5] = (ufLatitude / 0.01); string[6] = (ufLatitude
es sein das hier die Optimierungen von GCC eine rolle spielen? Nein. Aber es kann sein, dass du C lernen solltest. Mach dir eine Funktion [C] void uart_putc( char c ) { while (!(USR & (1<<UDRE))) ; UDR = c; } [/C] und dann noch eine [C] void uart_puts( const char* string )
-
Thread
UART-Senden fehlgeschlagen
werden, damit das Ganze auch formal zu einem C-String wird. > soll er es auf den Port > ausgeben. Was soll er auf den Port ausgeben? Einen String kannst du nicht auf einem Port ausgeben. Ein String besteht aus mehreren Zeichen. (OK. Man
Ich sagte doch, du benötigst ein char-ARRAY um dort den String zwischenzuspeichern. Wenn du mit String - Verarbeitung in C auf Kriegsfuss stehst, dann solltest du den Ankauf von Literatur in Erwägung ziehen. Das sind absolute C-Grundkenntnisse. Solange du
-
Thread
Kann ich µC con Amtel/AVR in c++ programmieren?
baut C++ ja auf C auf ... da hast'e dich gleich eingearbeitet ... Gruß
Lukas S. schrieb im Beitrag #2702288: > der grund dafür wäre das ich nur in c++ programmieren kann aber die Frage ist ob dieses C++ überhaupt für den µC geht. std::string kannst du schon mal vergessen. Auch für NEW muss du dir selber etwas einfallen lassen. Und wenn du C
-
Thread
UART AT90CAN128-16AU von ALVIDI
*******************************************************************/ /***** FUNKTION SEND_STRING *************************************************/ void send_string(char *string){ while(*string != 0){ //display the string up to the endlabel send_char(*string); //give
********************/ void send_int(unsigned int zahl){ char string[10]; //declaration of char array to save the string itoa(zahl, string, 10); //convert integar -> string send_string(string); //send the string } /********************************
-
Thread
Falsche Anzeige nach Spannungsverlust
// Schreibe $ an erster Stelle des Strings k = k + 1; } } return 0; } [/c] und die verwendeten Funktionen: [c] // Hilfsfunktion zum Initialiseren des LCD-Displays void _E (void) { E_HIGH; delay_us(5
} // Letztes Zeichen einlesen if (bed == 1 && Ch == '$') { [/C] mach hinten an den String EXPLIZIT das \0 Zeichen rein und du hast es mit einem gültigen String zu tun, den du mit strstr untersuchen kannst [C] // Letztes Zeichen einlesen if (bed =
-
Thread
Modulo und uint32_t funktioniert nicht
text.format("Spannung = %d,%d Volt \n",spannung/10,spannung%10); konsole.sendString(text); } } app; [/c] was mache ich falsch? :/ Grüße Jahat
text.format("Spannung = %d,%03d Volt \n",spannung/1000,spannung%1000); konsole.sendString(text); } } app; [/c] MFG Falk
-
Thread
Text als char array in funktion übergeben.
//AUFRUF: WriteGeneralText(0x05,"Text zum Anzeigen"); [/c]
Andreas Ferber schrieb: > Karl heinz Buchegger schrieb: >>> String Literale sind nicht konstant. >> Doch, eigentlich sind sie das schon. > > Nö, sind sie nach ANSI-Standard nicht, Hmm. OK. Ich nehms zur Kentniss. Wieder ein Detail in dem sich C von C++ unterscheidet
-
Thread
Array und String
={98,129,23,0,23,98,987,111,129,430}; . . . So weit so gut. Ich würde diese gerne über ein String z.B. 'ABBAB' ansprechen. Das heißt, das entsprechende Array soll dann z.B an PortC (ich weiß das ein Int nicht in ein Port passt, ist auch nicht das problem) nach und nach mittels schleife ausgegeben
Vielleicht möchte er -gesteuert durch den "ABBBA"-String- Werte aus beiden Arrays extrahieren, so in diesem Sinne: for (i = 0; i < 10; i++) { if (String[i] == 'A') printf("%d ", A[i]); else printf("%d ", B[i]); }
-
Thread
ESP8266 - WiFi "stoppt" seinen Betrieb - kein Crash - keine Funktion mehr
aus meinen Code raus: [c] String SSEWrapper::toStringIp(IPAddress ip) { String res = ""; for (int i = 0; i < 3; i++){ res += String((ip >> (8 * i)) & 0xFF) + "."; } res += String(((ip >> 8 * 3)) & 0xFF);
Speicherverwaltung besser unter Kontrolle. Denn die Standard C Funktionen für char[] allokieren nicht im Hintergrund Speicher, wie es die String Klasse tut. Ohne die String Klasse kannst du allerdings nicht mehr ganz so einfach einen String (bzw eine Zeichenkette
-
Thread
frage zu defines TRUE/FALSE
Schlaumaier schrieb im Beitrag #6717339: > Ich habe einfach ein String mit 1 Bytes deklariert und dann > den Inhalt bit-mässig aufgelöst. Klar. Man kann auch Assembler verwenden, das geht auch und c-hater ist dann glücklich. Wenn dir PASCAL nicht zusagt, betrachte
#6719761: > aus "Bundeskanzler" die Wurzel Hab's mir eben ausgerechnet, das gibt: "3fxl31k.15g8" [c] > Math.sqrt(Number.parseInt("bundeskanzler", 36)).toString(36) "3fxl31k.15g8" [/c]
-
Thread
WinAvr pointer Übergabe verändert char Array
Zeichen, per Pointer an die Funktion string_to_dec_value übergeben. Diese Funktion ist noch völlig leer: [c] unsigned int string_to_dec_value(char *inputStr) { return 0; } [/c] Und trotzdem kommt nur Müll raus, wenn ich
garnicht gesendet hatte.... Ich möchte noch anmerken, das die Empfangsroutine und die Funktion string_to_dec_value in der Datei "uart.c" stehen und auch dort das Array "char uart0_tx_buffer[255];" definiert ist. Die Hauptschleife befindet sich in der "main.c" und das Array ist mit "extern char uart0
-
Thread
Struktur größerer µC Programme
Programms. Hab mir das im Ansatz so vorgestellt: die Daten vom Terminal werden empfangen und in einem String gespeichert. Ist die Eingabe abgeschlossen soll der String ausgewertet werden. Die Struktur der Befehle wollte ich wie unter DOS mach (Befehlsname Parameter). Die einzelnen Befehlsnamen wollte ich
ersten 2 oder 3 Zeichen signifikant sind. Ich mache den Vergleich also immer mit der Länge des Strings in der Tabelle. Auch ignoriere ich Groß- und Kleinschreibung. Ich habs aber bisher nur beim 8051 in C gemacht bzw. in meinem AVR Bootloader in Assembler. Wäre aber mal interessant zu sehen,
-
Thread
Float to Int?
(" Temp2:"); set_cursor(6,2);lcd_string(" ");set_cursor(6,2); dtostrf(temperatur_ist_NTC, 7, 2, Buffer ); lcd_string( Buffer );lcd_data(223);lcd_data('C'); /* set_cursor(0,4);lcd_string(" ");set_cursor(0,4); itoa(OCR1A, Buffer, 10 ); lcd_string( Buffer );*/ } } return 0; }[/c]
-
Thread
AVR Libc & GCC: utoa() liefert Ziffern falsch rum?!
auf einem ATtiny26 zu machen. Wie gewohnt wollte ich dabei zwei uint8_t mit der Funktion utoa() in Strings umwandeln. Zu Testzwecken habe ich l und r mit 0 vorbesetzt und in der while einfach hochzählen lassen. [c] while(1) { l++; r++; char left[4]; char right[4]; utoa
(1e6 / 9600); // bit duration if(c & 1) PORTA &= ~(1 << PA7); // data bit 0 else PORTA |= (1 << PA7); // data bit 1 or stop bit c >>= 1; } } void sputs(char *string) { while(*string) { sput
-
Thread
Bit Array in C
0x80"[(Bit) & 0x07]) Oh, das ist eine interressante Notation um kleine Tabellen zu adressieren [c] My_output = "Hallo Welt"[my_pointer++]; [/c] Landet diese kleine Tabelle bzw. der String eigentlich im Progmem oder Datamemory?
&0x07))) [/c]
-
Thread
C lib für SSD1305
dies hat dazu geführt, dass VCOMH 15V gesehen hat. Zudem hab ich von paralleler Ansteuerung auf I2C gewechselt, leider kommt kein Acknoledge zurück, hab nun mal ein Ersatzdisplay bestellt. Um aber nichts unversucht zu lassen, hier mal die I2C Ansteuerung [c] #include <stdlib.h> #include <string.h
"); break; case I2C_MASTER_ERR_ARB_LOST: usprintf(error,"arb_lost"); break; default: usprintf(error,"error %x",mongobilli); break; } RIT128x96x4StringDraw(error, 10,10,10); } [/c] Sieht
-
Thread
Probleme beim Empfang über UART: Abhilfe FIFO?
falls diese Frage sich für manch anderen etwas dümmlich anhört. Ich möchte gerne 70 Zeichen lange Strings empfangen ( Gerät--> uC ---> Hyperterminal). Allerdings empfange ich nur jeden zweiten String. Es scheint, dass mein Programm einfach nicht schnell genug ist, diese Strings weiter zu versenden. Ich
Deutsch: es wird nicht unnötig gewartet... Und das passiert jetzt aber in deinem Code immer noch: [c] void send_char(unsigned char data) { while (!(UCSR0A & (1 << UDRE0))); // warten und Däumchen drehen... UDR0 = data; } void send_string(char *string) { while(*string)
-
Thread
friendlyarm toolchain
arm-linux-as -> arm-none-linux-gnueabi-as lrwxrwxrwx 1 root root 26 Jul 24 2010 arm-linux-c++ -> arm-none-linux-gnueabi-c++ lrwxrwxrwx 1 root root 25 Jul 24 2010 arm-linux-cc -> arm-none-linux-gnueabi-cc lrwxrwxrwx 1 root root 30 Jul 24 2010 arm-linux-c++filt -> arm-none-linux-gnueabi-c
arm-none-linux-gnueabi-ar arm-linux-as arm-none-linux-gnueabi-as arm-linux-c++ arm-none-linux-gnueabi-c++ arm-linux-cc arm-none-linux-gnueabi-cc arm-linux-c++filt arm-none-linux-gnueabi-c++filt arm-linux-cpp
-
Thread
Arduino Serielle Schnittstelle Fehlersuche
Als Arduino Fan möchte ich dazu auch mal was sagen: [c] while (Serial.available()) { // tuwas }[/c] Ansonsten fummelst du da mit String Objekten rum. Das bedeutet dauernde "dynamische Speicherverwaltung". Problematisch! Der String Instanz kann
Probier mal so: [c] String Input=""; // Input von Serieller Schnittstelle boolean stringComplete = false; // whether the string is complete String Befehl="NOP"; // Befehl aus Input int
-
Thread
Was füllt mein .data segment?
) .rodata 0x00800070 0x35 main.o *(.rodata*) .rodata.str1.1 Vermutlich ein String oder mehrere, definiert in Zeile 42 von main.c
Gebrauch von String-Konstanten. Was weiß ich, etwas wie: [c] send_uart("Das ist ein String"). [/c] Das würde nicht ins RAM kopiert werden, das meinte ich.
-
Thread
string mit header versehen ohne kopieren
. schrieb im Beitrag #4764750: > ich verstehe die Konstrukte mit memmove und realloc nicht. Der String > der Reinkommt kann damit nicht bearbeitet werden, der zwischenpuffer > (per malloc geholt) braucht es nicht. Da der "String der reinkommt" mit malloc angefordert wurde, kann auf diesen String
ist vollkommen zerstört) b) es unterstellt, dass der String beim Aufrufer immer am Anfang des Malloc-Bereichs liegt. c) wenn der Original-Bereich zu klein ist, wird der String zweimal kopiert. Und selbst dann muss die Library geändert werden, da der
-
Thread
LCD ansteuerung mit einem ATMega16 und I2C
---------------------------------------------- Formatierung (mehr Informationen...) [code] [c]C-Code[/c] [avrasm]AVR-Assembler-Code[/avrasm] [code]Code in anderen Sprachen, ASCII-Zeichnungen [math]Formel in LaTeX-Syntax[/math] [[Titel]] - Link zu Artikel [/code] ------------------------
Ah, ok, da ist nur der Kommentar falsch [c] //Enable auf 1 setzen _data |= (1<<LCD_EN); writeOut(LCD_PORT, _data); [/c]
-
Thread
rfm22b Empfänger läuft nicht
neuen Strings eine Null. (das ist natürlich sinnlos wenn du nur 3 Zeichen überträgst, dann stehen an den Stellen 3 bis 15 nur Müll) [c] uint8_t meinArray[17]; uint8_t i = 0; for(i = 0; i<16; i++) { meinArray[i] = block.data[i]; } meinArray[16] = 0; // Null (String-Terminierung) [/c] Wenn du die Zahl 16 in dem Code durch eine Variable ersetzt welche die Länge deines Strings enthält (z.B. 3), dann funktioniert das auch mit einer variablen Zeichenkette.
-
Thread
AVR Inline Optimierung kaputt?
Problem … /das/ habe ich nicht, aber das Problem hier hätte ich halt schon: [pre] $ cat umlaut.c #include <string.h> #include <stdio.h> int main(int argc, char **argv) { if (argc < 2) return 0; for (int i = 0; i < strlen(argv[1]); i++) { switch (argv[1][i]) { case '
", temp); [/c]
-
Thread
NMEA von GPS-Modul mit PIC18f8520 auswerten, klappt nicht richtig.
= string[1]; PORTB = uart_rd; asm sleep; } [/c]
(); while( c != '$' ) c = waitForChar(); // hab ihn, jetzt den Satz lesen bis zum '*' c = waitForChar(); i = 0; while( c != '*' && i < sizeof(string) - 1 ) { string[i++] = c; c = waitForChar
-
Thread
sizeof() funktioniert nicht bei Array im EEPROM
nicht. Dann hast du irgendwo einen Fehler gemacht. Es gibt keinen Grund, warum [C] void send_eemem_string( const char* eString ) { char c = eeprom_read_byte( eString++ ); while( c ) { uart_send_byte( c ); c = eeprom_read_byte( eString++ ); } } [/C] nicht
EEMEM ="0 - Relais ausschalten\0"; usw... char help_6[] EEMEM ="h - Hilfe\0"; void send_eemem_string(char a[], uint8_t l) { // funktioniert ! /* char c = eeprom_read_byte( a++ ); while( c ) { uart_send_byte( c ); c = eeprom_read_byte( a++ ); } */ // mit \0 funktioniert
-
Thread
Mit I2C(TWI) das Display EA DOGM204-A ansteuern
Michael R. schrieb im Beitrag #5383075: > Für I2C wäre es gut zu wissen mit welcher Umgebung (welcher uC, welche > Sprache) du arbeitest. Ich arbeite mit einem ATMEGA32 und ATMEL Studio mit der Sprache C.
Hallo, in der dogm204w.c steht #include "avr_i2c.h" i2c_write_byte(0, 0, 0x06) dies scheint bei der Library von Peter Fleury nicht vorhanden zu sein. Kann mir jemand hier weiterhelfen?
-
Thread
SPI Komunikation
Ich denke, du solltest dringend zuerst auf einem PC die Sprache C lernen, dann C++, dann die Besonderheiten von Arduino. Das hier macht nie und nimmer das, was du erwartest: [c] char Paket_zum_Master [50] = "...; String Send_Paket; Send_Paket = "neuer Text
schreibst Du ein Zeichen hinter die Variable, d.h. in einen ungültigen Bereich. Ich kenne mich mit C++ nicht aus, aber in C kopiert man Strings mit strcpy(). Und die Länge ermittelt man mit strlen(). Schau mal ins Manual zur <string.h>. sizeof() gibt Dir nur Anzahl Bytes einer Variablen, in diesem
-
Thread
strtok aus Galileo Computing C von A bis Z
im buch 'C von A bis Z' steht folgendes geschrieben: --------------------------------------------- [c]#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 255 char *eingabe(char *str
eingabe("Nachname"); printf("%s, interssanter Nachname\n", ptr); return EXIT_SUCCESS; }[/c] Der Funktion eingabe() wird hierbei als Argument die Adresse eines Strings übergeben. In der Funktion werden Sie aufgefordert, einen Namen einzugeben. Die Anfangsadresse des Strings geben Sie mit
-
Thread
C: Kann man mittels #define einen Wert zurück geben?
: [c] p_myarray = static unsigned myArray[256]; myFoo(myArray, 256) [/c] Wenn DU etwas zurück haben willst, brauchst Du schon eine Funktion.
Nachdem der gcc ja auch C++ kann, wäre es zumindest eine Überlegung > wert? In C++ gibt es dafür std::array