-
Thread
Sonderzeichen LCD HD44780 kompatibel
das constexpr-Schlüsselwort. Als erstes sollte klar sein, dass ein String wie "°C" aus 2 oder 3 Byte bestehen kann, je nachdem ob der Quelltext in ANSI (CP1252) oder UTF-8 gespeichert ist. Standardmäßig nimmt gcc solche Strings /buchstäblich/, und das Ergebnis hängt von
bevorzugt werden, aber wer weiß das schon? Jetzt geht's ans Eingemachte: Wie konvertiert man einen String? In C geht das nicht. Hier wohl nicht die beste / eleganteste Methode, aber so habe ich's erst mal gelöst. Noch im Namensraum hd44780::a00: template<size_t N> struct str{ byte a[N] {
-
Thread
Variable kopieren
Variable ist, sonst musst du strcpy bemühen. Wenn sichergestellt ist, dass i <= 9, dann kannst du [c]char *name1="n.txt"; name1[0] = i+'0'; [/c] schreiben. Wenn nicht, itoa und strcat. [[String-Verarbeitung_in_C]]
Glaub ich nicht. Dein Code ist voller Fehler. Tu dir doch selber einen Gefallen und kauf dir ein C-Buch. In der Zwischenzeit kannst du die absoluten C-String Grundlagen hier [[String-Verarbeitung_in_C]] erst mal nachlesen. > char *name1; > char *datname=" .txt"; datname zeigt auf
-
Thread
"Geisterwerte" in einer Variable trotz Initialisierung
> Naja und eine Frage bleibt... Ja, "1" ist ein String :-o besser wäre [c] add_zahl(49, '1'); // Übergabe von ASCII-Wert und der Zahl als char [/c] Oder (wenn der Kommentar stimmen soll) [c] uint16_t add_zahl (char zahl, char* ausg){ // Zahl an den Zwischenspeicher hängen : lcd_string(ausg); ???? was ist der Uebergabewert an lcd_string()? ein Pointer? : add_zahl(49, "1"); // Übergabe von ASCII-Wert und der Zahl als char Pointer [/c]
-
Thread
string terminierung überprüfen
Forum zuständig sind, bis jetzt war mir das Forum sehr hilfereich. Also ich möchtegern einen String überprüfen . problem:wenn ich meine Abfrage als [c]if((Command[0] == 'm') [/c] funktioniert das programm ganz super. aber bei prüfung mit dem Zeile: [c]if((Command[0] == 'm') && (Command[8] == '\0'))[/c] funktioniert nur für die erste zweimal eingetippte Befehle und danach bekomme ich immer "error" obwohl mein Befehl mit m anfägt. PS: jeder meiner String ist mit einem '\0' terminiert. [c] int
-
Thread
Unbekannte Zahl in AT+ Antwort lesen und konvertieren
[c] int val; char str[64]; strcpy(str, usart1_buffer); val = atoi(str); [/c]
Ich kann zwar jetzt kein C, aber von der Logik her ist das doch einfach : - die Größe des Array abfragen - in einer Schleife bis zum vorletzten iterieren (letztes ist ja "\r") - in einem String aneinanderpappen Basic: s
-
Thread
Kleine Frage zu Makros
MMC_CD with pull-up */\ SPIx_CR1 = _BV(9)|_BV(8)|_BV(6)|_BV(2); /* Enable SPI1 */\ } [/c]
müssen die erst umkopiert werden. Ich werde dann Grafik/Beschriftung und Daten voneinander trennen. Strings sind mir in C zwar etwas ungewohnt aber Einarbeitung tut not. struct info { char* text; // oder char text[20] ? .... } wird wohl mit *info.text = "Hallo Welt"; zu füttern sein, wobei
-
Thread
ATMega8 als Zähler
einfach mit zaehler-48 versucht Wozu -48? Steck zaehler in itoa hinein und du bekommst einen String, der ASCII mässig der Zahl in zaehler entspricht. Fertig. Am besten machst du dir für diese Operation, einen int ausgeben, eine Funktion [C] void lcd_puti( int zahl ) { char buffer[10];
lcd_string("/"); lcd_puti( pulse ); .... [/C]
-
Thread
C: Größtmögliche Zahl von uint8_t
Verwenden kann man meistens vermeiden. Das obere Beispiel kann auch folgendermassen geschrieben werden: [c] if(!a--) a = 100; [/c] Oder so: [c] if(a-1>a) a = 100; a -= 1; [/c]
oberen Code einen flüchtigkeitsfehler gemacht, ich meinte statt [c] if(a-1>a) a = 100; [/c] natürlich folgendes: [c] if((uint8_t)(a-1)>a) a = 100; [/c]
-
Thread
Hilfe bei Disassembler 68000 Binary
braw 0x706 5c4: 201f movel %sp@+,%d0 5c6: 2c5f moveal %sp@+,%fp 5c8: 4e73 rte 5ca: 0c40 0016 cmpiw #22,%d0 5ce: 6646 bnes 0x616
6c0: 6000 068e braw 0xd50 6c4: 6000 07c2 braw 0xe88 6c8: 6000 08be braw 0xf88 6cc: 6000 0036 braw 0x704 6d0: 6000 0e0a braw 0x14dc 6d4
-
Thread
CodeVision AVR Pointer auf fkt()
=”This string is also placed in FLASH”; /* Pointer to a char string placed in EEPROM */ eeprom char *ptr_to_eeprom1="This string is placed in EEPROM"; char eeprom *ptr_to_eeprom2="This string is also placed
etwa so [c] void (flash *Init_ptr)( void ) = Init; // void init( void ); [/c] oder so [c] void (eeprom *Init_ptr)( void ) = Init; // void init( void ); [/c]
-
Thread
Strings vergleichen wenn Sonderzeichen enthalten sind
0x00,0x01} usw. ist meines erachtens zu unständlich. in VB würde ich schreiben: !!! VB Code !!! if String = chr(0) & chr(1) then {tue dies und das} geht sowas auch in C ???? Gruß DIAN
> also schlußfolgere ich daraus, dass C hier an seine Grenzen stößt ? > ist eben doch nicht alles möglich in C ? Wenn der Fahrer nicht fahren kann ist natürlich zuerst das Auto schuld.
-
Thread
Ich komme mit AVR Studio nicht klar
//#include <stdlib.h> //#include <string.h> [/c] Und immernoch alles gut. Dann rudere ich ein wenig zurück [c] //#include <avr/io.h> //#include <stdio.h> //#include <stdlib.h> #include <string.h> (obwohl nicht verwendet) [/c]
Stephan schrieb im Beitrag #3551286: > #include <string.h> (obwohl nicht verwendet) [c]#include <string.h> //(obwohl nicht verwendet)[/c] ;) Wie sieht denn der Rest vom Programm aus?
-
Thread
UART Bridge des mySmartUSB MK2
stehen. Hab vor der Zeile nochmal PORTD = 0x02; geschrieben... er bleibt weiterhin hängen. :( [c]void USART_Init(void) { UBRR0 = 129; PORTD = 0x02; lcd_string("Start"); UCSR0B = (1<<RXEN0)|(1<<TXEN0); lcd_string("Ende"); UCSR0C = (1 << UCSZ01)|(1 << UCSZ00)|(1 << USBS0); // Asynchron
Folgendes Programm lässt 800 ms "Hallo Welt" anzeigen, danach "Start", es gibt keinen Neustart. [c]#include <avr/io.h> #include <util/delay.h> #include "lcd-routines.h" void print(char *string) { lcd_clear(); lcd_home(); lcd_string(string); } void USART_Init(void) { uint8
-
Thread
Verschlüsselung- kann man das so machen?
braucht ein moderner Computer 254 Möglichkeiten > durchzuprobieren? Mit einem 254 Zeichen langen String kann man nur 254 Möglichkeiten codieren? Faszinierend.
Warum bastelst Du dir nicht noch nen kleinen xMega dazu welcher dir den String mit AES verschlüsselt?
-
Thread
dumme frage esp8266
verbindest den PC zu dem Accesspoint (also dem ESP-Modul). Beim ESP startest du einen Server auf port 80 [c] AT+CIPMUX=1 AT+CIPSERVER=1,80 [/c] Dann gibst du im browser auf dem PC die IP-Adresse vom ESP-Modul ein: => http://192.168.0.30:80 Beim ESP wartest du nun auf den eingehenden String "GET / HTTP
und wenn du ihn bekommst schickst du einfach deine messdaten per "AT+CIPSEND=<laenge_des_messdaten_Strings>" und dann feuerst du deinen String durch
-
Thread
AVR Daten aus SRAM in HTML Code einfügen
schon verlauten lies, C wäre besser, aber ich sage immer... Wenn der Compiler von C einen Programmcode erzeugen kann, den der ATmega versteht und auch das macht was er soll, dann muß es auch in Assembler möglich sein. Denn
liest aus dem SRAM den Wert aus und gibt diesen über die UART aus. Danach geht es ganz normal im String weiter.... Hast du es so gemeint? Habe ich das so richtig verstanden? Wenn ja, dann gibt es aber ein kleines Problem. Denn es werden ja immer 2 Bytes aus dem String gelsen und man müßte sicherstellen
-
Thread
char und int in string umwandeln
machst Du in einer Schleife eine Division durch 10 mit Rest. Den Rest schreibst Du in Deinen ASCII-String an die entsprechende Stelle, wobei Du noch den Wert des ASCII-Zeichens für 0 dazuaddieren musst. Also z.B. [C] unsigned int wert; char string[6]; for(unsigned char i = 0; i < 5; i++) { string
Wo das Problem beim Umwandeln von "char" zu "string" liegen soll, ist mir definitiv klar, da es in C keine Strings sondern nur Ketten von Chars gibt. (Ich gehe jetzt mal davon aus, daß Du mit C arbeitest...) Zum Umwandeln von "int" in Zeichenketten
-
Thread
ASCII Code in String eingeben
Wie kann man in C in einem String ein Zeichen als ASCII Code eingeben ? Bsp: Ich möchte auf einem LCD einen Text mit Umlauten o.ä. ausgeben wie z.B. Außentemperatur Leider liegt das 'ß' auf dem LCD an einer anderen
steht. > Außerdem suche ich noch einige Infos zu #define wie man > z.B. aus [C] #define port portd #define bit 5 sbi (port, bit); [/C] > folgendes machen kann: [C] portd_5=1; [/C] Wüsste ich nichts, außer vielleicht einem Codegenerator (in einer Scriptsprache wie
-
Thread
ATmega8 Reset/ Array Löschen / Laufzeitverhalten
etwas 'auseinander genommenen' Version auch wunderbar in einer Statemachine unterbringen. [c] ... while( 1 ) { char c = next Character from Uart if one exists switch( state ) { case ExpectCommand: if( c = 'P' ) { state = ExpectPWMNumber
Arrays vorliegt. Das ist eine ganz normale Zuweisung. oh, sorry mein fehler. Ich hatte [c] uint8_t zwischenzustand_array [ZWISCHENZUSTAND_ARRAY_SIZE] = { 0 } [\c] für mich gelesen.
-
Thread
Problem mit Pointern
müsste es denn "sauber" lauten? Sauber? Sauber übernimmt lcd_display nicht einfach nur einen String sondern ein [C] void lcd_display(const char data[4][20] ,uint8_t center); [/C] Dein Problem ist hier, dass du einen wilden Mischmasch aus 2D Arrays mit 1D Arrays veranstaltet hast, der nur
zwei Teilstring miteinander verbinden? > In php gibt es ja dafür den Punktoperator, ich kann aber in C nichts > dazu finden! Du brauchst euin C Buch. Ernsthaft http://www.mikrocontroller.net/articles/FAQ#Wie_funktioniert_String-Verarbeitung_in_C.3F
-
Thread
Aus einzelnen Zeichen einen String machen
Es währe auch interessant welche Sprache Du benutzt? Die GCC (GNU Compiler Collection) kann C, C++, Objective-C, Fortran, Java, and Ada verarbeiten. Fehlt nur noch Assembler für die verschiedenen Platformen. Volker
Die Programmiersprache ist C und die (bis zu) 17 Werte sind als Integer in einem Array gepseichert. Dieser HEX Integer werden über eine Funktion als DEZ umgewandelt und sollen jetzt zu einem String zusammengefasst werden, um diese
-
Thread
Fehler Behebung in Bascom
manuche, darf ich mal fragen, was du mit folgendem bewirkst/bewirken willst? Const GRANTED As STRING 'String!! Granted = Access Granted Const Denied As String Denied = Access Denied If Zaehler = 3 And Gueltig = 1 Then PORTB= GRANTED 'Portb=String????
Ach ja, Const GRANTED As STRING 'String!! Granted = "Access Granted" den Text, den du dem String übergeben willst mußt in " " setzen... Bastian
-
Thread
lokale Variable nimmt Übegabewert nicht an
da das Lägenbyte nicht ankommt, Fehler, Zeile 74/81, crc16.c 050 Fehlercode an PC: EBADCRC (defs.h), Zeile 295, main.c 003 nochmal das Längenbyte aus dem String vom PC, Zeile 296, main.c [/pre] Wie gesagt, das Problem tritt immer nur beim 1. Mal auf. Also
193 uart0rcvcmpl = 1; 194 } 198 } [/c] Der Zähler uart0incnt zählt die eingehenden Zeichen, die über UART0 reinkommen. Kein Zeichen da, uart0cnt = 0. In dem String, der reinkommt, steht an 2. Stelle die Anzahl der noch folgenden Bytes
-
Thread
AT89C2051 und Keil µVision
@Lars: Ich habe vergessen zu erwähnen das mein Programm in C vorliegt,sorry. Manfred
automatisch erstellt, aus den Angaben in der Device-Datenbank. Ohne Angabe von RAMSIZE im Linker-control-String wird auch nur 128Byte benutzt. Versuch doch mal bei File/Device-Database mit ADD den 89C2051 neu zu erstellen. Die Befehle sind in der Doku. erleutert. Kannst auch ein anderes Device als Vorlage
-
Thread
Komischer UART
*/ return 0; } [/c] einzelne Zeichen verschicken strings hingegen gehen nicht: [c] void uart_puts (char *s) { while (*s) { /* so lange *s != '\0' also ungleich dem "String-Endezeichen" */
delay rausgeschmissen und immernoch das gleiche interessant ist auch folgende Codeveränderung [c] void uart_puts (char *s) { while (*s) { /* so lange *s != '\0' also ungleich dem "String-Endezeichen" */ uart_putc(*s); s++; } uart_putc('X'); } [/c] bewirkt
-
Thread
dumme Frage zu Makro
. Etwa: [c] template<typename T> T minimum(T a, T b) { return (a < b) ? a : b; } template<> std::string minimum<std::string>(std::string a, std::string b) { return (a.size() < b. size()) ? a.size() : b.size(); } [/c] Hier wird dann eben die Ausnahme abweichend für std::string formuliert: statt die lexikographische Ordnung wird die Stringlänge benutzt.
-
Thread
Datenübertragung (SPI) ich kapiere es einfach nicht
Mit zwei Arduinos und I2C ist das Problem für Anfänger einfacher zu lösen: http://www.bajdi.com/i2c-communication-between-2-arduinos/ SPI geht auch ;-)
der Slave-Transmitter garnicht anders, er muß Daten verlieren. Nimm daher besser die UART oder I2C. Bei I2C ist ein Datenverlust völlig ausgeschlossen, die Hardware wartet immer, bis der langsamste Slave fertig ist (SCL-Stretching).
-
Thread
Anzeige verschiedener Inhalte auf LCD
{i=1;} itoa( i, Buffer, 10 ); lcd_string( Buffer ); lcd_setcursor(8, 4 ); //PB7 lcd_string("PB7 = "); if(!(PINB&(1<<PB7))) {i=0;} else {i=1;} itoa( i, Buffer, 10 ); lcd_string( Buffer ); } void ausgabe_c(void) { int
Das hier [c] if(!(PINB&(1<<PB5))) {i=0;} else {i=1;} itoa( i, Buffer, 10 ); lcd_string( Buffer ); [/c] ist ja wohl an kompliziertheit kaum noch zu überbieten. Was ist falsch an [c] if(!(PINB&(1<
-
Thread
PIC 32 Werte aus UART Interrupt in main() bringen
out_loop=0; while (out_loop < 9) /// { MM_STRING[out_loop] = UARTGetDataByte(XBEE_MODULE_ID); xbee_putchar(MM_STRING[out_loop]); // XBEE (MM_STRING[out_loop],out_loop); // XBEE
Routne in main sieht sehr vereinfacht ungefähr so aus: main() { xbee_write_ramstring(MM_STRING); // put the whoel string back on uart delay_ms(1000); }
-
Thread
Funktion: Berechnung WeekOfDay
117 time_zone = 100663296 [/c] Nun soll mit Hilfe der Funktion strftime diese obigen Werete in ein string umgewandlet werden: [c] char buffer[10]; strftime (buffer, 10, "%Y:%m:%d", &DateTime); [/c] Im Buffer steht dann
: > char buffer[10]; > strftime (buffer, 10, "%Y:%m:%d", &DateTime); 10 ist zu kurz für einen C-String. Da ist kein Platz für die '\0'
-
Thread
ESP8266 + Arduino will nicht senden
[c]String cmdSend= "AT+CIPSEND=" + String(getStr.length() + 4); //+4 steht für /r/n oder ähnliches[/c] Da liegt dein fehler denke ich. \r\n sind 2 zeichen, der ESP wartet also noch auf 2 weitere zeichen
Marc_s86 schrieb im Beitrag #4281238: > [c]String cmdSend= "AT+CIPSEND=" + String(getStr.length() + 4); > //+4 steht für /r/n oder ähnliches[/c] > > Da liegt dein fehler denke ich. \r\n sind 2 zeichen, der ESP wartet also > noch auf 2 weitere
-
Thread
Wie Start des Strings Verändern?
Hex-Zahlen hast und dort natürlich die Buchstaben ein Problem sein können. So würde es auch gehen [C] strncpy( temp, &buffer[4], 6 ); temp[6] = '\0'; int i = strtol( temp, NULL, 16 ); [/C] Diese Variante ist sogar besser, weil sich strncpy auch um den Fall kümmert, wenn du nicht 6 Zeichen für
buffer so groß sein könnte, dass er dir temp überlaufen wird. Auch das wäre eine Möglichkeit [C] char tmp = buffer[10]; buffer[10] = '\0'; int i = strtol( &buffer[4], NULL, 16 ); buffer[10] = tmp; [/C] welche das Umkopieren eines Teilstrings vermeidet, was ja eigentlich eine gute Sache
-
Thread
USART tx-timing Problem
{ uart_string[uart_str_count] = c; uart_str_count++; } else { uart_string[uart_str_count] = '\0'; uart_str_count = 0; uart_str_complete = 1; led1_blink; lcd_goto(3,7);// lcd_int(c);// lcd_int(uart_string[0]); lcd_int(uart_string[1]); lcd_int(uart_string[2]); lcd_int(uart_string[3]); lcd_int(uart_string[4]); wait; wait; wait; wait;
-
Thread
set_cursor() - Funktion legt LCD lahm
dtostrf(temperature, 2,2, temp); lcd_clear(); lcd_string(temp); OUT_PORT &=~ (1<<HEAT_OUT); }break; } cnt = 0; } _SEI(); } [/c] Und das ist der Code für die LCD-Funktionen: [c] // Ansteuerung
// für den Fall einer falschen Zeile } lcd_command(tmp); } // Schreibt einen String auf das LCD void lcd_string(char *data) { while(*data) { lcd_data(*data); data++; } } [/c]
-
Thread
Programm bearbeiten. wie?
regfile = "m8def.dat" $crystal = 16000000 $baud = 4800 Config Lcd = 16 * 2 Cls Cursor Off Dim C As Byte Dim I As Byte Dim Time As String * 6 Dim Av As String * 2 Dim Lat As String * 8 Dim Ns As String * 2 Dim Lon As String * 9 Dim Ew As String * 2 Dim Spd As String * 6 Dim Crs As String * 6 Dim Leng As Byte Dim Mrk As String * 2 Dim Xx As Bit Declare Sub Wait_for_string(byval S As String) Declare Function Read_string() As String Wait 1 Upperline Lcd "WAITING FOR DATA" Wait 3 Mrk = "-" Config Serialin
-
Thread
COM-Port, FT232 Kommunikation mit Integer?
muss jeden Wert einzeln erfragen, was auch so bleiben soll. Dazu schicke ich vom PC Programm einen String "b1" (für Sensor b und Channel 1).Der Atmega bekommt einen Interrupt, wertet den String aus und liefert den geforderten Sensorwert zurück. Dafür wandelt der Atmega den 16bit Integer in einen String
es scheinbar ein synchrones Protokoll ist. PC -> µC "b1\n" 3byte µC verarbeitet ? ms µC -> PC 1234\n 5byte USB Latenz ? ms PC verarbeitet ? ms dann geht es wieder von vorne los. Damit wird mal nie sinnvoll schnell werden
-
Thread
PIC18F4550 uart tx sendet dauerhaft, Break ingoriert der chip
Rainer schrieb im Beitrag #4186835: > return (EXIT_SUCCESS); Ersetzt das man durch [c]while(1);[/c] > char* command = string; Das kannst du dir sparen und direkt mit "string" arbeiten. > while (*command != '\n') { Das würde ich zur Sicherheit so machen [c]while (*command != '
length) { for (int i = 0; i < length; i++){ output[i] = uart_read(); //send_string(output[i]); } } char uart_data_ready(){ return RCIF; } [/c]
-
Thread
Verständinsproblem char
auf das /Titel/ zeigt, nämlich das 'S' an /lcd_string/ übergeben wird. /lcd_string/ erwartet aber wahrscheinlich eine char-Zeiger, also muss es so heißen: [c] lcd_string(Titel); [/c] Die obige Definition von /Titel/ legt einen String ("String
lcd_string(Titel); [/c]
-
Thread
RS232 String per Taste auslösen
AITRIP-Digispark-Kickstarter-Allgemeine-Micro-USB-Entwicklungsplatine/dp/B08H7VVFYZ/ref=sr_1_3?__mk_de_DE=%C3%85M%C3%85%C5%BD%C3%95%C3%91&keywords=digispark&qid=1637767013&qsid=257-6183033-8676741&sr=8-3&sres=B08H7VVFYZ%2CB08LKCSCFY%2CB019JSRWMW%2CB08B3N57ZP%2CB07B2DMZ2P%2CB096M6W3DN%2CB075CZM8LF%2CB08DR5T897%
www.amazon.de/AZDelivery-UART-TTL-Konverter-Jumperkabel-inklusive/dp/B08T24NML9/ref=sr_1_3?__mk_de_DE=%C3%85M%C3%85%C5%BD%C3%95%C3%91&keywords=uart%2Busb%2Badapter%2Bcp210&qid=1637767233&qsid=257-6183033-8676741&sr=8-3&sres=B08T24NML9%2CB07WX2DSVB%2CB0753GY7FR%2CB07CQTC8P2%2CB07RG77VWD%2CB07TXVRQ7V%2CB08L6BSYZN
-
Thread
CCSv4 const in Flash
msg_MainMenue1); Die Funktion PrintStr: ---------------------- void PrintStr(char *Text) { char *c; c = Text; while ((c != 0) && (*c != 0)) { SendByte(*c, TRUE); c++; } } Leider landen alle Strings im RAM statt im Flash. Was ist denn nur falsch? HILFE?
Strings." Quelle: http://www.c-howto.de/tutorial-strings-zeichenketten-nullterminiert.html D.h., mit {} wird die \0 erzwungen mit angehängt, ohne die Klammern werden sie bei der Definition (const) weggelassen
-
Thread
Hilfe bei qsort
befüllst du mal mit Pointern in der richtigen Reihenfolge for( i = 0; i < 4; ++i ) Index[i] = Strings[i]; Für den qsort brauchst du die Compare Funktion. Komplett sieht das dann so aus: [C] char* Strings[4] = { "abcd", "defg", "xc",
Index, Compare ); for( i = 0; i < 4; ++i ) printf( "%s\n", Index[i] ); return 0; } [/C] Wenn du nicht mit einem Pointer Index arbeiten möchtest, dann würde das so aussehen: [C] char* Strings[4] = { "abcd", "defg", "xc",
-
Thread
float to string mit ftoa - komische Ausgabe
Braucht ftoa irgendwas besonderes um den String richtig zu kreieren? [c] uint8_t Send_UART_FloatWithText(char* textbefore, float number, char* textafter){ char* numsend = "0.00000"; ftoa(number, numsend, 5); //value, string, resolution
schrieb im Beitrag #4965268: > char* numsend = "0.00000"; > ftoa(number, numsend, 5); //value, string, resolution, 5 Nachkommastellen fest String-Literale (hier "0.00000") dürfen nicht überschrieben werden. Definiere numsend stattdessen so: [c] char numsend[8]; [/c] Edit: Auch die
-
Thread
UART - Datenverlust
Serial0charmatch() Declare Sub Clearvars() Declare Sub Initsti() Declare Function Striptags(mydata As String) As String Declare Function Buildgpsstring(mc As String , Ga As String) As String Declare Sub Writeusb(mydata As String) Dim Incoming_data As String * 100 Dim Gps_string As String * 300 Dim
Serial0charmatch() Declare Sub Clearvars() Declare Sub Initsti() Declare Function Striptags(mydata As String) As String Declare Function Buildgpsstring(mc As String , Ga As String) As String Declare Sub Writeusb(mydata As String) Dim Incoming_data As String * 100 Dim Gps_string As String * 254 Dim
-
Thread
Stringvergleich bei UART
Hallo, ich versuche bei der Kommunikation mit einem ESP8266 den empfangenen String auszulesen und daraufhin etwas auszulösen. Mit Problem liegt in der C - Programmierung des AVR: [c] // ...Weitere Includes... #include "uart.h" char delimiter[] = ":"; char *token; char
} } while( rec != '\n' ); rec_conv[i] = '\0'; // Jetzt hast du einen gültigen String. [/c] Jetzt hast du hier einen gültigen String. Der Sender hat dir ja mitgeteilt, wann der String zu Ende ist. Was man noch einbauen müsste. Die Absicherung, das der Sender nicht zu viel schickt
-
Thread
CCS8 -- unsigned int zählt nicht über >32767
Stringende bildende '\0' in bestimmten Situationen weg, nämlich dann, wenn die Länge des zu kopierenden Strings (das zweite Argument) nicht kleiner ist als die als drittes Argument angegebene Anzahl von Zeichen. Beispiel: [c] char array[10]; strncpy(array, "01234567890123456789", 10); [/c] In diesem
Längenlimit bekommen. > Ärgerlicherweise sind die strl..-Funktionen nicht in jeder Variante der > C-Standardbibliothek enthalten. Es ist keine Standard-Funktion. Streng genommen dürfte sie gar nicht vorhanden sein - zumindest nicht im Header string.h. Daher kann es je nach Compiler auch sein, dass
-
Thread
UART läuft unter FreePascal nicht (Kein OutPut)
UARTSendChar(value: char); begin while UCSRA and (1 shl UDRE) = 0 do begin end; UDR := byte(c); end; procedure UARTSendString(value: ShortString); var i: Integer; begin for i := 1 to length(value) do begin UARTSendChar(value[i]); end; end; end. ---------------------
uses uart; begin UARTInit; repeat if UARTReadChar = #32 then begin UARTSendString('Hello World!'#13#10); UARTSendString('Ich bin ein Test deiner UART'#13#10); end; until 1 = 2; end.[/code] Der C Code wurde erstell mit Code::Blocks IDE 17.12, der Pascal Code
-
Thread
Bitmap to Hex mit Gimp
>Ebenso wenn ich nach String c# suche und den operator oder was auch >immer das ist "\". Such nach escape characters
bereits im C-String kodiert und Du kannst die Daten bereits im Programm nutzen.
-
Thread
Uhrzeitrechner
überschlagen 10 Werte pro Minute * 60 Minuten * 10 Stunden * mindestens 40 Byte pro Eintrag (da alles als String). Also 240kB+. Also nichts was man bei dem uC im RAM hält. Es wird also darauf raus laufen z.B. eine Datei pro Stunde anzulegen. Zum Beispiel mit Datum/Uhrzeit im Dateinamen. Immer wenn es 11 Dateien
bisschen zu groß wird ;) Pseudocode aus der RTCLIB Referenz (ungeprüft zusammengewurschtelt): [c] String zeit = rtc.now().timestamp(); //("2020-06-25T15:29:37") //Lesen mit String input="2020-06-25T15:29:37|37"; int index = input.indexOf('|'); const String check = input.substring
-
Thread
USART sendet nur kryptische Zeichen zurück
nextChar = UDR; if( uart_str_complete == 0 ) { // wenn uart_string gerade in Verwendung, neues Zeichen verwerfen // Daten werden erst in uart_string geschrieben, wenn nicht String-Ende/max Zeichenlänge erreicht ist/string gerade verarbeitet wird if(
; } } } //++++++++++ SEND +++++++++++ int uartPutChar(unsigned char c) { while (!(UCSRA & (1<<UDRE))) ; UDR = c; return 0; } void uartPutStr (char *s) { while (*s) { uartPutChar(*s); s++; } } [/c]
-
Thread
Wieso funktionieren Decompiler immer deutlich schlechter als Compiler?
der C Code den IDA z.B. rausschmeißt so anders aus als echter Source Code, warum ist dieser Pseudo C Code so anders?
mit. Wer zuerst C lernt, und dann C++ hat größere (innere) Hürden zu überwinden, als anders rum. Zeitfenster: Wenn du dir Mühe gibst.... Dann benötigst du für das lernen der µC Grundfunktionen (fast egal welcher