-
Thread
Strings allgemein
Hallo, aus Delphi bin ich gewohnt, einen String so zu erstellen un zu verwenden: var test: string; ... test := 'hallo'; test := 'welt'; ... Final steht also 'welt' in test. Wenn ich das jetzt in C machen will, ist mir nicht ganz klar,
// Initialisierung: // Double "Quotes" für Strings // Single 'Quotes' für einzelne Chars char test[10] = "hallo"; // String kopieren (zuweisen) // normalerweise in ANSI-C: strcpy(test, "welt"); // Für AVR-GCC, damit "welt" direkt aus dem
-
Thread
Was ein C++-"Guru" so ueber Geschwindigkeit erzaehlt.
Optimal war (damals) der C-Compiler für die NS32000-Serie. Das wurde dann direkt durch die CPU mit dem Befehl MOVSi (Move String 1 to String 2) gemacht und fertig. Solche Op-Codes sind mir bis heute leider nicht
> Wer lesen kann:-) Für avr-gcc gilt ähnliches. Zwar nicht für die Newlib, aber für die AVR-LibC, die wohl von mindestens 99% der Anwender eingesetzt wird. AVR-LibC enthält Assembler-Optimierte Algorithmen. Nicht nur für Bytegeschiebe sondern z.B. auch für float-Arithmetik oder int <-> String
-
Thread
#define übergreifend
. Also braucht er 5 Bytes: [c] char string[5] = "abcd"; [/c] oder einfacher [c] char string[] = "abcd"; [/c] Soll keine abschliessende 0 angehaengt werden, muss man leider schreiben: [c] char string[4] = {'a', 'b', 'c'
[c] char c[4] = "abcd"; [/c] definiert man sich im Grunde ein Bytefeld bekannter Länge, in dem bestimmte Werte stehen. c als String aufzufassen, wäre vom Konzept her recht fatal. In so einem Fall sind
-
Thread
[AVR][ATMega328] UART Receive und Echo mit Fleury Lib
uart_putc(*s++); }/* uart_puts */ [/c] Das verstimmt mich nur noch mehr...hmpf Könnnen denn überhaupt mehrere Nullbytes mit normalen UART Routinen dann empfangen werden, oder endet dann immer der String? Ich habe die Empfangsroutine
kann man natürlich machen. Da bei dir aber das 0x8D dieselbe Rolle spielt, die in einem String der Bytewert 0x00 spielt, kannst du auch die Techniken der Stringprogrammierung adaptieren. Im Grunde hast du sowas ähnliches wie einen String, nur das der eben mit 0x8D terminiert ist. [C] void
-
Thread
Array fixer Länge an Funktion übergeben
) ); } int main( void ) { // C89 //String3_s string3; //strcpy( &string3.ch[0], "AB" ); // C99 String3_s string3 = { .ch = "AB" }; func( string3 ); } } [/c] Ausgabe: fjhf@hjhgjk:~/test$ ./
Manni schrieb im Beitrag #3256754: > //strcpy( &string3.ch[0], "AB" ); Das geht auch lesbarer: [c] strcpy(string3.ch, "AB"); [/c]
-
Thread
Eigener Versuch eines UART-Puffers
einmal selber umsetzen. Nur: Der Code läuft (natürlich) nicht, mal wieder die Frage warum. [c] // IM HEADER DEFINIERT: void transmit_string(volatile uint8_t * uart_tx_flag, char * uart_tx_buffer[], char data[3]); // IN EINER C FILE DEFINIERT: /* Transmit a String */ void transmit_string
Laufzeit, >>wenngleich das hier nicht wichtig ist. Es würde dann Sinn machen, wenn man hier [c] void transmit_string(volatile uint8_t *uart_tx_flag, char *uart_tx_buffer[], char data[3]) { if (&uart_tx_flag==1) // check whether last string has been sent completely
-
Thread
Flash Speichers des ATMega328P ist voll? Mit 12,7 kb??
die beim AVR-GCC ohne Überredung eben dort landen. Liegt an Harward vs. Neumann. So wird der String im FLASH abgelegt und nur zu Weiterverarbeitung ins RAM geladen: [c]#include <avr/pgmspace.h> int foo () { char string_im_ram[40]; strcpy_P (string_im_ram, PSTR ("Hallo Welt")); }[/c] Eventuell hat die LCD-Lib ja eine lcd_printstr_P() Funktion, die direkt aus dem FLASH liest. Wenn nicht ist die nicht schwer zu bauen. Das Makro PSTR() sorgt dafür das das String-Literal im FLASH
-
Thread
Menüstruktur aufbauen in C mit Unermenüs
(0); LCDGrafikSetCursorMode (0); LCDGrafikSetCursor (0); LCDGrafikPutString (1,2,"Anzeige 1"); // Untermenüeintrag Zeile 1 ab Spalte 2 LCDGrafikPutString (2,2,"Anzeige 2"); // Untermenüeintrag Zeile 2 ab Spalte 2 LCDGrafikPutString (3,2,"Einstellungen"); // Untermenüeintrag
LCDGrafikPutCharExtended(4,1,0x82); // Pfeil nach rechts vor Untermenu in Zeile 4 break; case 4: c=0; // Variable c wird auf 0 zurückgesetzt break; } break; } // while (1) } // main Besten Dank für jede Hilfe.
-
Thread
strlen bei mehrdimensionalen Strings
Hallo Bruno was spricht hiergegen: [c] char xxx[4][6] = {{"as"},{"asdf"},{"fdas"},{"qwer"}}; int iLength; iLenth = strlen(xxx[0]); [/c]??? aber vorsicht die funktion gibt die länge des strings zurück, bedenke das noch eine NULL am ende jedes string steht. gruß Dennis
-
Thread
PIC läuft durch String viel zu langsam
mir! Ich bin am Verzweifeln... main.c [c] #include <htc.h> #include <pic18f4550.h> #include <string.h> #include "usart.h" // main.c void main(void); void delay( int ms ); char usartbuffer[25] = 0; int usartcount = 0; void
gets low return RCREG; // Retrieve data from reception register } return 0; } [/c] main.c [c] #include <htc.h> #include <pic18f4550.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "usart.h" #define FREQ 18432000 // Frequency = 12MHz #define
-
Thread
avr und c: lcd-anzeige und nutzung von variablen
[c] int out = 5; lcd_string(out); [/c]
str[16]; utoa(Temp, str, 10); lcd_string(str); [/c]
-
Thread
C Programm memory out of bounds
Möglichkeiten, sich in's Knie zu schießen. Es sind aber effektiv wirklich nur unwesentlich mehr als in C... Naja, die häufigsten Fehler dürften der allseits beliebte "off by one" beim Manipulieren an Strings oder Arrays sein. Aber auch Rechenfehler bei Pointer-Arithmetik werden immer wieder gern gemacht
Was erhoffst du dir von [c] TWSR = (0<<TWPS1)|(0<<TWPS0); [/c] ? << a ist das gleiche wie mal 2 hoch a. Da steht also [c] TWSR = 0 | 0; [/c] bzw. [c] TWSR = 0; [/c]
-
Thread
STM32 CUBEMX und Printf() über UART
schätze nicht, ich weiß genau, wie viel Puffer ich benötige. Ah, wie viel braucht man denn hierfür? [c]sprintf (buffer, "Hallo %s, deine Note ist %f. Du hast %zu Bytes Speicher verbraucht.\n", userName, mark, memsize);[/c] Wenn das Ergebnis immer vollständig sein muss, nimmt man std::string o.ä. sprintf
len; } [/c] Bei diesem Code dürfen die Strings nicht grösser sein, als der Puffer. Du könntest zu grosse Strings in mehrere Teilstücke zerlegen. Mit ein bisschen Nachdenken kannst du diesen Ansatz auf zwei
-
Thread
PIC C18 C-Compiler Problem
funktionierten folgende aufrufe für meine USART-Senderoutine usart_puts problemlos: ... unsigned char string={"Hallo"}; usart_puts("Hallo"); usart_puts(string); ... hier der code der USART-Senderoutine für einen String void usart_puts(unsigned char *pointer) { while(*pointer != 0){
Und wenn du deine konstanten Strings wie "Hallo" auch in einer Stringvariablen ablegst? Carsten
-
Thread
string beladen
strcat( Output, Number ); strcat( Output, ",0000*\n" ); fat32_writestringtofile( Output ); [/C] http://www.mikrocontroller.net/articles/FAQ#Wie_funktioniert_String-Verarbeitung_in_C.3F http://www.mikrocontroller.net/articles/FAQ#Wie_kann_ich_Zahlen_auf_LCD.2FUART_ausgeben.3F
Na, zb so [C] char output[256]; int i = 5; sprintf( output, "Hallo %d Welt", i ); [/C] sprintf funktioniert wie printf, nur wird das Ergebnis (der zu erzeugende String) im ersten Argument abgelegt
-
Thread
Komplizierte Konstrukte auflösen ohne Tempoeinbußen
Huhu! Ich habe beispielsweise sowas hier: [c] StringReq::Char::Paint::R_new[ObjPos] = StringReq::Char::Paint::R_fgrnd[ObjPos] * (StringReq::Char::Paint::alpha_last[ObjPos] * 16) / StringReq::Char::Paint::R_bkgrnd[ObjPos]
_t NextToTransfer; DATA data[GUI_MAX_STRING_QUEUE_OBJECTS]; } StringReq; [/c] und dann sowas in der Art: [c] DATA& actData = StringReq.data[ObjPos]; System::SetPixel( actData.FrameBuffer , actData.CursorPosition + (
-
Thread
Fehlerhafte Adressierung von lokalen Arrays bei tinyAVR(R) 0-series
Wann wird die > Schleife beendet? Danke.void uart_puts_rom(const uint8_t *dataPtr) > { > uint8_t c; > for (c=pgm_read_byte(dataPtr); c; ++dataPtr, c=pgm_read_byte(dataPtr)) > uart_putchar(c); > } Zum Einen ging es hier nie darum, einen String aus dem Flashrom anzuzeigen, denn dieses funktionierte
==> ist etwas 0, wenn ja dann, wenn nicht, dann... In meiner Schleife wurde in die Variable c eben ein Zeichen des Strings eingelesen. Bei den Strings in C handelt es sich (meistens) um sogenannte Ascii-Zero Strings. D.h. das Ende eines Strings wird mit einem Char mit dem Wert 0 markiert. Steht
-
Thread
Neue Frage zu Union in C
unsigned char tag : 3; }; }S_M_H_Time; [/c] sollte gehen
Heiko L. schrieb im Beitrag #5426066: > Ich finde es schon komisch, dass der C++-Way-to-do-it ist, eine > C-Funktion zu verwenden... Die meisten C Bestandteile sind auch in C++ sehr wichtig. Für Funktionen und arithmetische Berechnungen hat C++ auch keinen Ersatz, nur Erweiterungen
-
Thread
c code: Priorität & Lebensdauer Variable im Funktionsaufruf
https://de.wikibooks.org/wiki/C-Programmierung
// für \0 bei Strings .. [/c] Das andere werde ich nochmal durch und abarbeiten, danke bisher!! btw: Die Compiler Meldung hatte ich tatsächlich. Danke Klaus, ich blättere schon - mir ist es wichtig die richtige
-
Thread
kein definiertes Verhalten in der ISR
funktioniert Oh mein Gott! Da die Priorität von == über der von && liegt, wird zuerst der Teilausdruck [c]0x02 == T_SET[/c] ausgewertet. Wg. [c]#define T_SET 0x02[/c] ist der Teilausdruck stets wahr. Es bleibt übrig: [c]if(P2IES && 1)[/c] was zu [c]if(P2IES)[/c] vereinfacht wird. Ich habe selten so
Arduino Fanboy D. schrieb im Beitrag #6218240: > Mich erschrickt gerade, dass ein C-Hasser mit mir, einem C++ > Befürworter, einer Meinung ist. Pass auf, dass er sich jetzt nicht umbenennt in "C++ Hasser" :-D
-
Thread
Nochmals Frage zu UART
Guten Abend ! Wie lang darf denn ein String maximal sein, welchen ich an den µC (Attiny2313) per UART senden darf ? Meine ISR Routine packt alle empfangen Bystes in ein char Array und das solange bis ein ! ankommt, wenn das ! ankommt ist
eines Befehls zu kennzeichnen ist eine Sache. Aber in deinem Programm solltest du auf die übliche C-Konvention zurückgreifen: Jeder String hat als letztes Zeichen ein '\0'. Dort endet der String. <weiterschau>
-
Thread
Array Probleme
Was du da schreibst ist reichlich verworren. Aber schau dir mal zum Thema 'Wir funktionieren Strings in C' mal folgendes an: http://www.mikrocontroller.net//articles/FAQ#Wie_funktioniert_String-Verarbeitung_in_C.3F Das sollte einiges klären.
c ist eine Variable. strcat erwartet als Argument aber einen Zeiger auf einen String (also wenn überhaupt, dann "&c" anstatt "c", aber da c kein String ist, geht der Rest dann wegen des fehlenden Nullterminators
-
Thread
Uhr mit RV-3029-C2
0x03); i2c_stop(); uart_puts( dtostrf( Stunden, 1,0,string ) ); uart_puts(":"); uart_puts( dtostrf( Minuten, 1,0,string ) ); uart_puts(";"); zur Anzeige nutze ich HTERM. da ich die Uhr nur
(); uart_puts( dtostrf( Stunden, 1,0,string ) ); //Senden an USART (VERSUCH) uart_puts(":"); //trennen mit ":" uart_puts( dtostrf( Minuten, 1,0,string ) ); //Senden an USART (VERSUCH) uart_puts(";"); while(1) { i2c_start
-
Thread
Raspberry Pi 2 Mono .Net MySqlConncetor Fehler!
: Could not load file or assembly 'MySql.Data, Version=6.8.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d' or one of its dependencies. File name: 'MySql.Data, Version=6.8.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d'
Aber nochmal zurück mit welcher Sprache sollte man den auf dem Pi programmieren ??? C,C++ Phyton was ist am gängigsten? Habe beruflich halt viel mit C# zu tun...
-
Thread
Problem mit ltoa
jemand andere geeignetere Begriffe dafür? Zurück zum Thema Hier noch einmal der fehlerhafte Code: [c] char text [12]; // String ltoa (-234567, text, 10); lcd_puts(text); // put string to display [/c] und hier eine im ATtiny26 funktionierende Lösung: [c] char text [12]; // String ltoa (-234567, (char*)((int)text & 0xff), 10); lcd_puts(text); // put string to display [/c] Gruß Joachim
-
Thread
C18 -> XC8 Migration
die Antwort. Das ist wohl richtig das ist sicherlich in keinem Dokument festgelegt. Der Vorgänger C18 sowie eine Vielzahl anderer C-Compiler wie Keil usw. hat dies ohne Beanstandung so gemacht. Ich habe es jetzt so umgesetzt. [c] sprintf(str_Temp, "%.1c", unc_Taste); puts1USART(str_Temp);
brauche ihn auc nur sehr selten Hin und wieder war der eben sehr praktisch. Mein Fähigkeiten bei Strings sind etwas eingetrübt. Ich würde ganz gerne einen Sring aus verschiednen Variabelen zusammen bauen. [c] dt.Tag dt.Monat dt. Jahr dt.Stunden dt.Minuten dt.Sekunden str_DateTime = dt.Tag
-
Thread
String mit Liste vergleichen
Wie geht denn ein "switch" über eine liste von strings? In C zumindest muss der ausdruck eine zahl sein. Der compiler optimiert die suche nach dem treffenden case dann selbst (log(n)). Die schnellste implementierung dürfte ein scanner / zustandsautomat
Also strcmp :-) http://www.mikrocontroller.net/articles/FAQ#Wie_funktioniert_String-Verarbeitung_in_C.3F
-
Thread
char String Null im Array verhindern
) und Co. sind dann jedenfalls nicht mehr anwendbar. Befehl[] ist dann nur noch ein Array und kein C-String mehr. Also: Zeig bitte die Verwendung. Darauf kommt es an.
{"AT+"}; > > Nein, bitte lese ein Grundlagenbuch zu C. Wer so rumtönt, sollte sich erstmal selbst mit den Grundlagen beschäftigen. [C] char Befehl[3] = {"AT+"}; [/C] macht genau das, was er sich vorstellt. Es ergibt einen String ohne das abschließende
-
Thread
keil array => string
(aChar[iI]=='\n') { // jetzt aus den vorhergehenden Zeichen den String erzeugen.?.?.? } }[/c]
warten oder soll sie mitteilen, dass nichts da ist. Ich nehme mal den einfachsten Fall: sie wartet [C] ... char NextString[20]; unsigned char i; char c; i = 0; c = getCharacter(); while( c != '\n' ) { NextString[i++] = c; c = getCharacter(); } NextString[i] =
-
Thread
AVR Comiler Optimazation Crasht den Controller (ATMEGA328P)
? process_command() command_in hat nicht zwingend einen '\0' als letztes Zeichen ('\n' ist für c-strings eine ganz normales Zeichen). Die Stringfunktionen verlassen sich aber darauf, dass ein String mit '\0' endet. strcasestr hört damit nie auf, außer es findet zufällig eine null auf seinem Weg
Errorstring zusammenbauen, und an einer einzigen Stelle ausgeben. Also irgendwie so (pseudocode): [c] if (...) { error_msg = "..."; } if (...) { error_msg = "..."; } if (...) { error_msg = "..."; } if (error_msg) { uart_puts(error_msg); } [/c] Bzw. den String an den
-
Thread
c pointer / array problem bei GLCD
Das gleiche habe ich auch gerade im Manual gelesen... dort steht aber noch folgendes: [c] Placing a string into ROM const char cstring[6]={"hello"} Creating pointers to constants const char *cptr; cptr = string; [/c] Leider funktioniert das bei mir nicht... Er sagt für die Zeile
Hallo, da kann ich mit dem Compiler fühlen. Besser ist [c] ... const char *cptr = string; [/c] Tschü Dude
-
Thread
C: Alternative zu switch case "mit Lücken"
Art des Wertes, die Funktion zur Umrechnung und die Funktion zum Zusammenbasteln des übersetzten Strings festgelegt. Ich könnte also einfach eine Struktur definieren: [c]struct comm { uint8_t len; uint8_t *val; f_ptr calculate_val; f_ptr output_string; }; struct
des Wertes, die Funktion zur Umrechnung und die Funktion zum > Zusammenbasteln des übersetzten Strings festgelegt. > > Ich könnte also einfach eine Struktur definieren: > [c]struct comm { > uint8_t len; > uint8_t *val; > f_ptr calculate_val; > f_ptr output_string
-
Thread
Analyse NMEA Datensatz klappt nicht so richtig - Rechnenleistung schuld
Unwahrscheinlich. Da kann der Controller noch nebenbei Kuchen backen. Wenn mich meine rudimentären C-Kenntnisse nicht trügen, gehst du davon aus, das alle Werte in einem NMEA-String auch gesetzt sind. Hier mal 2 reale Strings: $GPRMC,125124.993,V,5023.2549,N,01107.3971,E,,,180505,,*1A $GPRMC,124516.031
... Zum testen kannst Du ja mal folgendes versuchen: [c] char uart_string[MaxSatz + 1][UART_MAXSTRLEN + 1]; //char uart_string_copy[UART_MAXSTRLEN + 1]; [/c]
-
Thread
C: Variadische Funktion (printf)
Hallo zusammen, ich bin mal wieder bei einer C-Anfängerfrage gelandet: Ist es erlaubt, "printf" einen Parameter mitzugeben, der gar nicht interpretiert wird? Also so: [c] int i = 0; printf("Ätsch!",i); [/c] Unabhängig davon, ob die Antwort
in der µC-Programmierung. W.S.
-
Thread
Quelltext: Lesestoff gesucht
"var" eingeführt welches ich *manchmal* gerne nutze. Beispiel: [c] Map<String,Map<String,User>> groups = db.getGroupedUsers(); // keys= groupName, userName for (var group : groups.entrySet()) { for (var user : group.entrySet()) { ... } } [/c] Hier ist offensichtlich, welchen Datentyp "var" hat. Die vollstänsig ausgeschriebene Version bringt mir keinen Erkenntnisgewinn, ist aber wegen der langen Zeilen schwerer lesabr: [c] Map<String
-
Thread
Bit setzen in C Gesperrt
Guten Morgen! ich verwende den Keil C-Compiler für 8051. In Assembler kann man mit SETB und CLR auf einzelne Bits zugreifen. Gibt es in C dafür eine Entsprechung? Ich habe folgendes versucht: PortC|=1<<5; //Bit 5 setzen leider
C++ ist nicht wirklich besser als C und Java wird eher wenig für Windows-GUI/Desktop-Anwendugen benutzt. > Du bist hier in einem µC Forum, also kurz gesagt C und ASM. Ja und? Deswegen darf man sich
-
Thread
SD Modul und Beschleunigssensor gleichzeitig nutzen?
bestimmt gibt es in einem Arduino Forum Hilfe dazu. Es macht also durchaus Sinn einen großen String einmal auf die Karte zu schreiben. Da der Verursacher des Problems anscheinend der dataString ist, wäre dieser kleine Test möglich : [c] String dataString; dataString = String(year(),DEC); Serial.println(dataString); dataString = year(); Serial.println(datastring); [/c] http://arduino.cc/en/Tutorial/StringConstructors Es wäre Interessant was dort ausgegeben wird.
-
Thread
Für was gehört der Pointer ?
Das hier [c] char *menu_strings[MENU_ITEMS] = { "First Line", "Second Item", "3333333", "abcdefg" } [/c] baut im Speicher diese Struktur auf [code] menu_strings +-------+ +-+-+-+-+
2D Array von chars machen können [code] char menu_strings[4][12] = { "First Line", "Second Item", "3333333", "abcdefg" }; menu_strings +-+-+-+-+-+-+-+-+-+-+-+-+ |F|i|r|s|t| |L|i|n|e|\| | +-+-+-+-+-+-+-+-+-+-+-+-+ |S|e|c|o|n|d| |I|t|e|m|
-
Thread
Struct wird immer mit Fehler übersetzt. Compilerproblem?
man noch viel mehr Typen; da ist auch nicht alles voller _t's. Das ist mehr so eine Angewohnheit von C-Programmierern, für die es etwas besonderes ist wenn man mal was anderes als void* oder int nutzt... Bsp.: C++ hat std::string, Java hat Java.lang.String, Ruby hat String... kein String_t in Sicht
Dr. Sommer schrieb im Beitrag #5609985: > Bsp.: > C++ hat std::string, Java hat Java.lang.String, Ruby hat String... kein > String_t in Sicht. Ich denke, in Standard C steht das _t für typedef. Es gibt ja z.B. einerseits char, andererseits wchar_t
-
Thread
MAX6675 am ATmega128
t temperature; while(1) { temperature = get_max6675_temp(); temp_to_string(temperature, temp_str); lcd_string(temp_str); for(i = 23; i; i--) { _delay_ms(10); } } } [/c] hth. Jörg ps.: ich hab da doch tatsächlich was vergessen ;) [c] int16
das Datenblatt lesen ;) */ } [/c] Wenn das nicht hilft, probier mal was passiert, wenn du folgendes machst: a) > lcd_string("test123"), statt dem erzeugten string b) > temp_to_string(0, temp_str);//(oder andere Zahlen unter
-
Thread
c=a+b an LCD anzeigen?????
das geht? Glaube ich nicht, werde ich mal ausprobieren. Vielleicht so: sprintf (buffer, "Die Nr. C ist: %d", c); //erzeugt einen string im RAM lcd_puts (buffer); //schreibt diesen string aufs Display
das geht. Weil ich die Funktion "lcd_puts (buffer); " nicht genau kenne. Mein Ausdruck ist ein Ansi C Ausdruck, der gut funktioniert.Wenn man einen String will, kann man +x030 addieren. Solche LCD - Gschichtl'n schreibe ich mir lieber selber. Gegen printf () hab ich was - unheimlich großer Code.
-
Thread
LCD Ansteuerung
ps = 0xE2; break; case '°' : ps = 0xDF; break; case 'µ' : ps = 0xE4; break; } #endif [/c] ich erhalte immer japanische Zeichen wenn ich versuche: [c] lcd_data('ä'); [/c] oder [c] lcd_string("äöüß"); [/c] auszugeben. Ich vermute ich habe noch keine Verbindung zu der
> case 'µ' : c = 0xE4; break; > } > } und wo wird das möglicherweise ersetzte Zeichen ausgegeben? Die Funktionen bilden hierarchische Levels! Level 2: lcd_string weiß, dass es sich um einen String
-
Thread
UART an ATMEGA328P-MMU
define F_CPU 8000000ul #include <avr/io.h> #include <util/delay.h> #include <string.h> void uart_putc(unsigned char c) { while(!(UCSR0A & (1<<UDRE0))) { ; } UDR0 = c; } void USARTsend(char *s) { while(*s) { uart_putc(*s); s++; } } int
; zahler++; } else { uartString1[zahler] = '\0'; zahler = 0; USARTsend(uartString1); uart_putc('\n'); memset(uartString1,0,20); } } ... [/c]
-
Thread
Empfangenen asci string als c-code ausführen
interessante Frage: Ist es möglich, den Controller dazu zu bewegen, dass er einen via UART empfangenen String, (z.B. die Daten \n terminiert) als C-Code ausführt? Wie realisiere ich dies? BSP: ich bek. vom Terminal oder 2. µC in den rxbuf: "period = 100;\n\r" wie kann ich den µC zwingen, als C-Code
dass eine zeitliche Periode verändert wird, meinetwegen jetzt 100ms betragen soll, dann will ich dem µC das seriell mitteilen. (ATMEGA32) Wenn ich dann umständlich einen String formatiert schicken muss, dann wieder umständlich diesen string zerlegen und in integerwerte umwandeln muss, um variablen zu
-
Thread
char einem String hinzufügen
Marc van den Broek schrieb im Beitrag #2756989: > Da ich c nur in den AVR's verwende und von C keine Ahnung habe suche ich > etwas passendes. Dein Fehler besteht IMHO darin, dass du dich zu früh auf 'C auf mit dem AVR' konzentrierst. C ist eine genormte
auch > unter XP) Ich kenn das Buch nicht. Aber das hört sich nach einer allgemeinen Einführung in C an. Genau das was du erst mal brauchst. Erst mal die Grundlagen der Sprache lernen. Arrays, Strings, Funktionen, Strukturen. All das ist Standard-C (funktioniert also überall gleich), ist aber dein Handwerkszeug
-
Thread
uController-USART-String
>Der Funktion WriteUARTStringPC ()kann kein String übergeben werden. Was heisst das genau? Fängt der uC an zu quitschen oder was? :-)
daselmo schrieb im Beitrag #2650767: > Der Funktion WriteUARTStringPC ()kann kein String übergeben werden. Kann schon, du tust es nur nicht. [c] WriteUARTStringPC(Line[0]); //<-- [/c]Line[0] ist kein String, sondern nur das erste Zeichen in einem Array. Aber auch wenn
-
Thread
sprintf ersatz? ( c code )
} } else buffer[nI++] = '0'; buffer[nI] = 0; //'buffer' now contains the string version of 'v' [/c] auch da: braucht die libgcc das ist schlecht [c] char *itoa(int num) { static char buff[20] = {}; int i = 0, temp_num = num, length = 0; char *string =
+ (num % 10); num /= 10; } buff[i] = '\0'; // can't forget the null byte to properly end our string } else return "Unsupported Number"; return string; } [/c] und auch da https://github.com/mludvig/mini-printf Fehler: "signal caught in writing whirl file" und chan werde ich noch
-
Thread
Programmierung mit Bascom
sitzt *VOR* dem PC ! du hast *nicht* verstanden was du programmierst kleine starthilfe: Dim C41 as string *2 ' GROSSES A Dim C61 as string *2 ' kleines a ist nur ein tip, aber poste mal dein programm, alles andere ist wieder "Glaskugelraten" vlG Charly
dafür. Prinzipiell kannst Du aber deine Subs a_gross oder a_klein benennen und Deine Strings dann äquivalent a_gross_string a_klein_string Ich hätts mit Data und Restore gemacht, aber so gehts auch ... nur aufwändiger
-
Thread
Variable mit merkwürdigem Verhalten
Das [c]unsigned int quantity_readout;[/c] gehört in die .c, *nicht* in die .h in die .h gehört dann ein [c]extern unsigned int quantity_readout;[/c]
wird folgendes gemacht: /* supply price -> int to string */ supply_price_string[0]=(supply_price_int/1000)+48; supply_price_string[1]=46; supply_price_string[2]=((supply_price_int%1000)/100)+48; supply_price_string[3]=((supply_price_int%100)/10)+48;
-
Thread
Was passiert, wenn man als Funktionsparameter statt einem prog_char* ein char* übergibt?
[1C]÷[01]Î[01] usw.) Mit einem globalen [c]const char eintest[] PROGMEM ={"%s \n"};[/c] und einem [c]xprintf(eintest,"String"); [/c] funktioniert es hingegen wie gewünscht, da der String jetzt im
C++ oder Java, die ich in C oft vermisse. In anderen Kontexten ist es sinnvoller, wenn die PGM-Strings eine .toString-Methode haben, die implizit aufgerufen wird, wenn die Funktion einen "normalen"