-
Thread
Differenzierfilter
hast du an UART Funktionen zur Verfügung? Da ist sicher auch eine dabei, mit der man sich einen String ausgeben lassen kann. (Ich nenn die mal UART_String) [C] #define ASCII_DUMP ... #ifdef ASCII_DUMP char line[80]; #endif while(1) { if(new_sample == 1) { CS_state
. Aber es hängt davon ab, ob du den Compiler auch lässt. Hast du das Filter zb in einem eigenen C-File ausgelagert [C] signed long diff(signed long *data, unsigned char n) { .... } [/C] und dazu ein Header File [C] #ifndef FILTER_H_INCLUDED #define FILTER_H_INCLUDED int diff(
-
Thread
LCD_Formarierungsalgorithmus-sprintf
)); lcd_string(Buffer); zaehlerLCD += 6; } _delay_ms(50); } [/C]
, so schauts dann aus: [c] #include <stdio.h> #include <stdint.h> #include <avr/io.h> #include <string.h> #include <util/delay.h> #include <string.h> #include <avr/signal.h> #include <avr/pgmspace.h> #include <avr/interrupt.h
-
Thread
Atmega32 als Ethernet Client, WIE? (HW: AVR-Net-IO)
Hier mal ein Beispiel: Die Daten im xpl_hartbeat_string werden im UDP Telegramm zum Port 43903 gesendet. Ziel-IP ist eine Broadcast Adresse. Die Daten stehen in eth_buffer. const char xpl_hartbeat_string[] PROGMEM = "xpl-stat\n{\nhop=1\nsource=heizung.hbeat
Hallo @all, passend zum Thema suche auch ich ein Stück Code für mein AVR-NET, dass einfach einen String per UDP an einen Server zu senden soll. Ich will ein paar Werte einlesen (Temperatur etc.) und diese dann in einem String zum Server senden. Ohne Anfrage vom Server einfach jede Stunde einmal Senden
-
Thread
Globale Variable - undefined reference
Hallo Leute, ich sitze hier schon eine Weile dran: [c] //main.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sub.h> void app_main() { strcpy(string_array, "Hallo"); printf("%d\n", zahl ); printf("%s\n", string_array ); } [/c] [c] //sub.h #ifndef SUB_H #define SUB_H extern int zahl; extern char string_array[]; #endif [/c] [c] //sub.c #include <sub.h> void a_task() { int zahl = 5; char
-
Thread
Befehle aus String-Zeichenketten extrahieren
: [c]/* Wird nur betreten wenn ein String uebertragen wurde */ void uart_rx_handler(void) { /* Schnipp */ rx_string[0] = 'm'; rx_string[1] = 'v'; rx_string[2] = ','; rx_string[3] = '1';
break; } }[/c] Das ist natuerlich nur ein Ausschnitt aus der gesamten uart_rx_handler-Funktion. Auch die explizite Zuweisung des Inhhalts des char-arrays "rx_string" ist "symbolisch" zu verstehen. So kann der String
-
Thread
Präprozessor: String für #include zusammenbauen
Hallo zusammen, ich habe einen Haufen Header-Dateien, die Lookuptables enthalten, und deren Name identisch mit der darin definierten Variable ist. Ich will nur eine davon einbinden und auch einer Variablen zuweisen. Sprich sie werden so genutzt: [c] //#include "abcdefg123.h" //char *bitmap = &abcdefg123; #include "abdefg123.h" char *bitmap = &abdefg123; //#include "abcdef123.h" //char *bitmap = &abcdef123; //#include "abcdefg124.h" //char *bitmap = &abcdefg124; ... [/c] Lieber wäre es, wenn ich mit Präprozessormagie nur eine Konstante anpassen müßte. Ungefähr so: [c]
-
Thread
Struct-Array im EEprom sortiert ausgeben
Sortierung von Index (welches im SRAM) liegt, hat daran ja nichts geändert. Daher kann hier [C] int Compare( const void* Arg1, const void* Arg2 ) { char* pString1 = *(char**) Arg1; char* pString2 = *(char**) Arg2; return strcmp( pString1, pString2 ); } [/C] der strcmp
void uart_puts( const char* text ) { char c; c = *text; // Zeichen holen while( c != '\0' ) { // war das schon das letzte Zeichen des Strings? uart_putc( c ); // Nein: Zeichen über uart_putc ausgeben text+
-
Thread
Umwandlung von langen Dezimalzahlen als String in Hex
Dezimalstellen) funktionieren (für größere Zahlen müssen nur die Datentypen geändert werden): [c] #include <stdio.h> #include <stdint.h> /* dec: ASCII-String mit Dezimalzahl * bin: Puffer für Binärzahl * maxbin: Puffergröße in Bytes * return: Anzahl der Binärbytes, die Binärzahl
); for (i=0; i<nbin; i++) printf("%02x ", bin[i]); printf("\n"); return 0; } [/c] Das Ergebnis wird – entsprechend der AVR-Konvention – im Little-Endian-Format gespeichert. Aber auch das kann bei Bedarf geändert werden. Beispiel: [pre] $ dec2bin 3117396039019 6b 95 48
-
Thread
printf für andere Funktionen
Patrick B. schrieb im Beitrag #1762545: > sprintf(lcd_string_buf,"\fConnected with PC\nWaiting for > command\n/data"); > lcd_write(lcd_string_buf); Wozu brauchst du ganz konkret bei dieser einen Ausgabe den sprintf? [C] lcd_write( "\fConnected with PC\n" "Waiting for command\n" "/data" ); [/C] lcd_write gibt einen String aus. Du hast einen String.
-
Thread
Virtual Com Port Driver STM32 Port zuweisung
Evtl. kanst du auch einfach nach dem Array [c]uint8_t Virtual_Com_Port_StringSerial[VIRTUAL_COM_PORT_SIZ_STRING_SERIAL] =[/c] schauen. Ich haben dort einen festen Wert eingetragen und bei mir bekommen die Controller immer den gleichen COM Port
Ich hätte jetzt die einfachere Methode von Mike R. genommen. [c] uint8_t Virtual_Com_Port_StringSerial[VIRTUAL_COM_PORT_SIZ_STRING_SERIAL] = { VIRTUAL_COM_PORT_SIZ_STRING_SERIAL, /* bLength */ USB_STRING_DESCRIPTOR_TYPE,
-
Thread
stringToBinary gesucht
. Im simplen Fall: [c] receivedVal = SPI.transfer(val); [/c] Du willst also Strings in Zahlen wandeln: [c] #include <stdlib.h> int atoi(const char *nptr); [/c] leo
Die Frage ist auch auch welchen String du eigentlich hast. Arduino kennt ja auch Strings als Klasse.
-
Thread
Sonderzeichen in konstanten String
es gibt noch eine weitere Stolperfalle. Man kann diese Sonderzeichen problemlos direkt in einen String schreiben ala "Das ist schön!" für ein Standard-LCD-> "Das ist sch\xEFn!" Doch hier lauert McMurphy. In einem String wie "Ich bin am Drücker" würde man intuitiv als "Ich bin am Dr\xF5cker" schreiben. Allerdings interpretiert der Parser nicht F5 als Char, sondern F5C, weil ja der nächste Buchstabe ein C ist. Da das nicht mehr in 8 Bit passt gibts ne Warnung und es kommt auch Müll raus. Also immer schreiben "Ich bin am Dr" "\xF5" "cker" MfG Falk
-
Thread
Wie programmiert man Grafiken "richtig" in C
, 0xFC, // q 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08, // r 0x00, 0x48, 0x54, 0x54, 0x54, 0x20, // s 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20, // t 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C, // u 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C, // v 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C, // w 0x00, 0x44, 0x28, 0x10, 0x28, 0x44, // x 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C, // y 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44, // z 0x00
-
Thread
String Übergabe an asm-funktion
Hallo Ich brauche eine Funktion die auf takt-genau fuktioniert, deshalb versuche ich sie in asm zu programieren es ist aber teil eines C-Programms. Die Funktion-Prototyp ist: void getdata(unsigned char *p); Die Funktion soll 600 Sampels mit AD-Wandler machen und sie in einem buffer abspeichern. Das Problem ist eben das Speichern. Ich habe mir dazu eine globale Variable deklariert: volatile unsigned char data[600]; Es ist zwar eine globale Variable, wie ich aber an sie in einer asm-Funktion heran kommen soll, habe ich überhaupt keinen Plan. Deshalb habe ich der Funktion einen
-
Thread
Arduino, Serial und 'spezial Tasten', wie?
{ uint8_t char_counter = 1; uint8_t c; for (;;) { while (Serial.available() > 0) { Serial.print("Daten verfügbar : "); c = Serial.read(); Serial.println("[ 0x" + String(c, HEX) + String(" ], d") + String(c) + String(", ") + String((char)c)); } } } [/c] Kleine Bemerkung: Ich möchte nicht 'Serial' neu programmieren (ISR usw.). Danke für Tipps und Hinweise.
-
Thread
Konvertierung unsigned int --> unsigned char*
test1 und test2 gleich sind. Folglich sind die Inhalte ebenso gleich. Woran könnte dies liegen? [c] unsigned char* test1; unsigned char* test2; test1 = Convert(0x12345678); test2 = Convert(0x23456789); [/c] Funktion [c] unsigned char* Convert(unsigned int value) { unsigned char
dest[3] = (value& 0x000000ff) ; } [/c]
-
Thread
USART & Mega128
könntest den string einzeln ausgeben. also putchar1(string[0]); putchar1(string[1]); putchar1(string[2]); denn putchar wird bei der initialisierung mit codevision vom USART1 declariert. ist halt ein größerer
Das mit strlen(..) ist ein unnötiger Aufwand: // -------------------------- unsigned char c; while (c = *string++) putchar1(c); // -------------------------- Pseudocode, also bitte nicht hauen wenns nicht exakt so klappert.
-
Thread
Unicode Sonderzeichen und strlen() und sprintf() Funktionen
kümmert sich hierum ja der Compiler. Das nächste Problem wären dann die Funktionen mit denen die Strings verarbeitet werden. Diese Funktionieren dann ja auch nichtmehr, da diese von 1-Byte pro Zeichen ausgehen. Ich habe hier schon recherchiert und multibyte String Funktionen gefunden. Ich möchte aber
Wertebereich für die nötigen Sonderzeichen nutze. Beispiel: [c]#define DISPLAY_UE "\xAA" /* hier den richtigen Wert eintragen */ const char * const MeinText = "K" DISPLAY_UE "he machen M" DISPLAY_UE "he";[/c] Etwas mühsam, funktioniert aber. Du schreibst aber
-
Thread
Microchip TCP IP Stack HTTP Server
ok also mal hier der code: [c] //#include "stdlib.h" //#include "string.h" #include "TCPIP Stack/TCPIP.h" // ***************************************************************************** // ****************************
// For buffer overrun protection. // Set to longest length of above two strings. [/c] Hier der generierte C-Code aus dem MPFS Tool: [c] /*************************************************************** * MPFSImg2.c * Defines an MPFS2 image to be stored in program memory
-
Thread
LCD Display___
(m3,puffer3,10); itoa(m4,puffer4,10); lcd_setcursor(0,1); lcd_string("x="); lcd_setcursor(2,1); lcd_string(puffer1); lcd_setcursor(0,2); lcd_string("y="); lcd_setcursor(2,2); lcd_string(puffer2); lcd_setcursor(7,1); lcd_string("
puffer2alt....) { //do nothing } else{ lcd_clear(); lcd_setcursor(0,1); lcd_string("x="); lcd_setcursor(2,1); lcd_string(puffer1); lcd_setcursor(0,2); lcd_string("y="); lcd_setcursor(2,2); lcd_string(puffer2); lcd_setcursor(7,1); lcd_string("x=-"
-
Thread
Hex in String umwandeln
macht das Ausgebegerät (indem es die entsprechenden Pixel ein und ausschaltet). Für das Programm im µC ist das immer einfach nur die Zahl 66. > > > ascii_lookup(0x61); > Print(string); Gewöhn dir eine andere Nomenklatur an: Unterscheide zwischen einzelnen Zeichen und Strings. einzelne Zeichen werden einfach nur 'Zeichen' genannt. Ein String ist in C eine Abfolge von Zeichen (die in einem Array gespeichert ist) und mit einem '\0' Zeichen abgeschlossen wird. Mir ist immer noch nicht klar, was denn eigentlich deine Fragestellung
-
Thread
Welche Include für substr() bei WinAVR?
Um den C-String s auf x Zeichen zu limitieren, schreibst du einfach [c] s[x] = '\0'; [/c]
schicke mit [c]lcd_string(day[0]);[/c] schreibt er mir das ganze Display voll "Montag Dienstag ..." trotz dieser \0 dartrax
-
Thread
Suche eine kleine LCD library für den ATTiny26
Im Grunde brauch ich nur eine Ausgabe von Strings und vielleicht eine für int. Das ganze natürlich in C.
strom % 100 ); Bin jetzt immerhin von 9kB auf 6kB runter gekommen! Ich benutze in meiner lcd.c auch noch stdlib für itoa, kann(soll) ich das auch noch rausbekommen? Hier mal meine Ausgabe für int am lcd: void lcd_putint(int value) { char string[4]; itoa(value, string,
-
Thread
Lookup als "String" übergeben
Hi... Ist möglich das label "Buchstabe" für lookup als string zu übergeben? Irgendwie klappt es nicht.. Bsp. Dim Buchstabe as string * 1 Dim Hexwert as String * 4 Dim Feld as Byte Buchstabe = "S" Feld = 1 Hexwert = lookup(Feld , Buchstabe) End S: Data &H3C , &H00 T: Data &H60 , &H18
-
Thread
Problem mit PWM (while) und Uhr
weiter. Wie muss die Anweisung lauten das die Uhr während dem Handeln auch weiterlauft? [c] if (stunden==21 && minuten ==59 && sekunden==10){ while(a>0){ //OCR1A = a; OCR2 = a; set_cursor(10, 1); lcd_string("runter"); sprintf(ausgabestring
Herunterdimm-Schreife aus, die Du noch so umfrunzelst, dass während des _delay_ms(2000) nicht nichts passiert: [c] ... set_cursor(10, 2);lcd_string(ausgabestring); for (abroesm = 0; abroesm < 20; ++abroesm) { MachDatMitDeUhrzeitAufsDisplay(); _delay_ms(100); } a--; ...
-
Thread
Verständnisproblem bei UART Übertragung
while (!(UCSR0A & (1<<UDRE0))) { } UDR0= data; } void USART_putstring(char* StringPtr) { while(*StringPtr != 0x00) { USART_send(*StringPtr); StringPtr++; } } void USART_init(void) { UBRR0H = (uint8_t)(BAUD_PRESCALLER>>8); UBRR0L = (uint8
[/c] Hier will ich quasi jedes Zeichen selber ausgeben ohne diese in eine String zu verketten. Funktioniert fast. Als Ausgabe steht nämlich nur "ab" da und das "c" fällt weg. Selbst mit einem _delay_ms
-
Thread
qtouch - sekt oder selters
0x00; return i; } int main(void) { while(1) { lcd_init(); lcd_string("Sensekey:"); lcd_data(sense()); lcd_setcursor(0,2); { char Buffer[20]; itoa(sense(), Buffer, 10); lcd_string(Buffer); } } } [/c] Was mache ich falsch
Hilfe Johannes int main(void) { while(1) { sense(); lcd_init(); lcd_string("Sensekey:"); lcd_setcursor(0,2); { char Buffer[20]; itoa(sense(), Buffer, 10); lcd_string(Buffer); } } } [/c]
-
Thread
gcc-avr: sprintf_P kracht (mit 3 oder mehr Parameter)
20070525. Das Gerät hat Command-Line-Interface, da hantiere ich ziemlich viel mit printf und ROM-strings rum. warum soll[c]sprintf_P(&PrnBuf[0], FMT_TABLEHEADER);[/c]wunderbar laufen und[c]sprintf_P(&PrnBuf[0], FMT_NAMEVALUE, value); /* name=%d */[/c]das System abstürzen? Es gibt ausreichend
section .progmem.data,"a",@progbits 133 FMT_TABLEHEADER: 134 0000 2A2A 2A2A .string "*********\r\n" 134 2A2A 2A2A 134 2A0D 0A00 135 .global FMT_NAMEVALUE 138 FMT_NAMEVALUE: 139 000c 2050 4152 .string " PARAM1=%d\r\n" 139
-
Thread
Probleme mit Initialisierung von Variablen mit Wert 0
jedem Funktionsaufruf nochmal kopiert werden, kommt drauf an, wie du die Variablen definierst. Das "string literal" (Das was in den Anführungszeichen steht) hat statische Lebensdauer. Wenn du einen Zeiger darauf als lokale Variable anlegst (const char* c = "Hello World"), wird nur der Zeiger einmal pro Funktionsaufruf erzeugt und zerstört. Nur wenn du es als Array anlegst (char c[] = "Hello World"), wird kopiert. > FLASH: > Wenn ich hier was sparen möchte, dann kommt wohl nur der Verlagern der > Strings in das EEPROM in Frage ... Ob das im Sinne des Erfinders ist ? In
-
Thread
"Mini-Webserver" ESP8266/ArduinoIDE
guten Tag. > > Welchen Einfluß hat bitte diese Warnung beim Ablauf des Programmes: > > Gruss C Code als C++ compiliert?
Plan, aber die Zeit... Falls was unklar ist, eben fragen. Source ist sicher das Gelbe vom Ei, was C/C++ usw. angeht, eigentlich kann ich das garnicht (wirklich richtig). Gruß aus Berlin Michael
-
Thread
Umwandlung integer Zahl in einen String (Hilfe)
buffer[1] = (zahl/1000) %10 + 0x30; Also ich möchte eine x belibeige Integerzahl in einen String umwandeln und ihn am einem Grafigdisplay ausgeben das ganze möchte ich in Assembler realisieren so das auch von C aufgerufen werden kann. Die Übergabe einer Dezimalzahl in C nach Assembler erfolgt
und +48 für ASCII Umwandlung s[++i] = '\0'; //String Ende [/C]
-
Thread
GCC Präprozessor macro '__FILE__' abkürzen
verschiedenen asserts letztendlich zentral über einen einzigen Funktionsaufruf implementiert sind: [c] cyg_assert_msg( const char *psz_func, const char *psz_file, cyg_uint32 linenum, const char *psz_msg ) __THROW { ... diag_write_string("ASSERT FAIL: "); write_thread_id(); diag_write_string(trim_file(psz_file)); write_lnum(linenum); diag_write_string(trim_func(psz_func)); diag_write_char(' '); diag_write_string(psz_msg); diag_write_char('\n'); ... } [/c]
-
Thread
Problem bei negativen Temperaturen mit Temperatursensor DS18S20
bei Temoeraturen statt -1°C -28°C an. Für -2°C -27°C usw. An meinem eigenen Code zum Ansteuern der Anzeige liegt es wohl nicht, da diese stimmt, sofern ich die Termperaturvariable fest auf bsw. -3°C setze. Der Fehler muss
positive Temperaturen auch wie > gewünscht, jedoch zeigt das Thermometer bei Temoeraturen statt -1°C > -28°C an. Für -2°C -27°C usw. Denken wir mal kurz nach: Temp Anzeige -1 -28 -2 -27 -3 -26 ... ... Also Korrektur: if (temp < 0) temp = -29 -
-
Thread
char in int umwandeln
Sebastian R. schrieb im Beitrag #5699675: > atoi() oder atof()? Würde ich auch sagen, falls dein String wirklich nur die Zahl enthält. Wie sieht der String aus, den du erhälst?
atoi möchte als Parameter ein C-String haben und gibt das Ergebnis als Rückgabewert zurück. Wenn die Payload nur aus dem Zahlenwert besteht reicht [c] int wert; wert = atoi((char *)payload); [/c] Funktioniert auch bei atof
-
Thread
Probleme mit Stringlänge
Hallo, ich habe folgende Funktion: [c] void EA_DOGM163_String( const char *Data ) { while( *Data != '\0' ){ EA_DOGM163_Write_Data ( *Data++ , DATA ); } } [/c] Folgendes geht und geht nicht, ich lande im Reset_Handler meines STM32F030 in Coocox wenn es nicht geht: EA_DOGM163_String( "1" ); // geht EA_DOGM163_String( "12" ); // geht nicht EA_DOGM163_String( "123" ); // geht nicht EA_DOGM163_String( "1234" ); // geht nicht EA_DOGM163_String( "12345" ); // geht ...6 // geht
-
Thread
Aus Ascii mach Integer mach Ascii gleich Null??
Folgender kleiner Aufbau: Die Daten eines GPS- Empfängers werden vom Atmega8 empfangen und zu einem String zusammengeflickt. Anschließend wird der String zerpflückt und Teile daraus in Integer umgewandelt, damit der uC z.B. Geschwindigkeit besser (/überhaupt) handlen kann. Um zu kontrollieren, ob
Zeichen stösst welches nicht mehr zur Zahl gehören kann. atoi will einen Pointer auf den Anfang des Strings, bei dem die Zahl beginnt. Bei dir ist das: die Adresse von Line[7] "Adresse von" schreibt sich in C als & Also: atoi( &Line[7] ); Kauf dir ein C-Buch und arbeite auf dem PC die
-
Thread
avrdude.conf, wo finde ich die Argumente?
Flashen via SPI geht problemlos. > > Mit USBTreeView kann man das Fake auch erkennen. Der Device String ist > "USB2.0-Ser!". Das Original meldet sich mit "USB Serial" > . Das kann ja alles sein.... Die Fehlermeldung deutet auf andere Probleme hin: Attila C. schrieb im Beitrag #7820240
Attila C. schrieb im Beitrag #7821083: > "Funktionierende Kommandozeile"? Was ist das? Wo finde ich das? Bei dir fehlt -C am Anfang der Parameters versuch mal -C"C:\Users\attil\Downloads\avrdude-v8.0
-
Thread
Atmega328p: Uart 7 data bits 1 stop bit
sendString_p(const char* charOfString){ //send string from flash register char c; /* while *charOfString != '\0 */ while ( (c = pgm_read_byte(charOfString++)) ) { sendChar(c); } }[/c]
-
Thread
Bascom GPS-Signal einlesen
framesize = 32 Config Portd.5 = Output Config Portd.6 = Output Config Portd.0 = Input Dim S As String * 82 Dim G As String * 6 Dim T As String * 2 Dim Geschw As Integer On Urxc Onrxd Enable Urxc Enable Interrupts Main: Print "$PSRF103,05,00,01,01*25<CR> <LF>" Print "$PSRF103,00,00,00,01
Dieser Teil wird wohl nie ausgeführt, weil String S nie *exakt* gleich string "K" ist. [pre] G = Right(s , 6 ) T = Left(g , 2) Geschw = Val(t) If Geschw < 1 Then Portd.5 = 1 Else Portd.5 = 0 If Geschw >= 1 Then Portd.6 = 1 Else Portd.6
-
Thread
t6963c Falsche Zeichen auf dem Display
SET_DATA_AUTO_READ 0xB1 #define T6963_AUTO_RESET 0xB2 #define T6963_DATA_WRITE_AND_INCREMENT 0xC0 #define T6963_DATA_READ_AND_INCREMENT 0xC1 #define T6963_DATA_WRITE_AND_DECREMENT 0xC2 #define T6963_DATA_READ_AND_DECREMENT 0xC3 #define T6963_DATA_WRITE_AND_NONVARIALBE 0xC4 #define T6963
0xC1 #define T6963_DATA_WRITE_AND_DECREMENT 0xC2 #define T6963_DATA_READ_AND_DECREMENT 0xC3 #define T6963_DATA_WRITE_AND_NONVARIALBE 0xC4 #define T6963_DATA_READ_AND_NONVARIABLE 0xC5 #define
-
Thread
UART: Daten zum AVR senden
ihex, binary) FORMAT = ihex # Target file name (without extension). TARGET = main # List C source files here. (C dependencies are automatically generated.) SRC = $(TARGET).c SRC += lcd.c SRC += uart.c # List Assembler source files here. # Make them always end in a capital .S.
spaces, enclose it in quotes. EXTRAINCDIRS = f:/Programme/AVRlib # Compiler flag to set the C Standard level. # c89 = "ANSI" C # gnu89 = c89 plus GCC extensions # c99 = ISO C99 standard (not yet fully implemented) # gnu99 = c99 plus GCC extensions CSTANDARD = -std=gnu99
-
Thread
Arduino Mega für Programm nicht richtig aus
EEPROM.read(address + 2)<<16); value |= (EEPROM.read(address + 3)<<24); return value; } [/c] wenn man das so weiter führt kann man minimum 50% der globalen variablen wegwerfen. in jedem Status setzt du die 3 strings immer zurück. Wenn man die auswertung in eine extrafunktion auslagert
stati insgesammt deutlich kürzer und wiederholen sich stellenweise sogar -> weniger code die 3 strings .. [c] if (Serial2.available() > 2) { Empfangen = Serial2.readStringUntil(':'); Empfangen1 = Serial2.readStringUntil(':'); Empfangen2 = Serial2.readStringUntil(':'); } [/
-
Thread
DCF-Empfänger keine Auswertung möglich
kann ich mir das Signal auch nicht wirklich ansehen. Habe meine Funktionen jetzt mal vereinfacht [c] while (1) { if(true == secondOver) { itoa(lowPegelAnz, tempChar, 10); uart_sendString("low:"); uart_sendString(tempChar); uart_transmit(' '); itoa(highPegelAnz, tempChar, 10); uart_sendString("high:"); uart_sendString(tempChar); uart_transmit(' '); uart_sendString("\r\n"); lowPegelAnz = 0; highPegelAnz = 0; secondOver = false; } }[/c] [c]
-
Thread
Fat und ffwrite
aber leider zuviel. > > Dann wirst du vermutlich selber an der ständigen Verlängerung > des Strings schuld sein. strcat() verwendet? Danke für deine Nachricht. nein das habe ich nicht. der string kommt aus der itoa funktion und die schließt den string doch selbst mit "endzeichen" ab?! Die ffwrites
auch ohne Option MMC_OVER_WRITE ffseek (file.length); // Schreibt String. ffwrites(str); .... [/c] einfach den ffseek weg und der ffwrites beginnt die Datei von vorne weg zu beschreiben. Und das war ja doch das Ziel der Übung, oder nicht.
-
Thread
4Bit LCD, restliche Portpins Problem
O.k.; das ist jetzt dann aber schon ein Problem :-) "Keine Ahnung von C" haben und gar nicht in C programmieren ist ein kleiner Unterschied :-) In C wird das üblicherweise so gehandhabt, das includes mit spitzen Klammern also <xyz.h> includes von einer Entwicklungsumgebung
lcd_data rjmp lcd_flash_string_1 lcd_flash_string_2: pop ZL pop ZH pop temp1 ret
-
Thread
Atmega stürzt ab, bleibt hängen
den ersten Blick unglücklich gelöst ist: Du rufst aus deinem Uart-Receive-Interrupt heraus "write_string_dogm" auf. Unglücklich in zweierlei Hinsicht: - Durch die Aufrufkette hinter "write_string_dogm" packst du dir nochmal einen ganzen haufen Worte auf den ohnehin schon vollen Stack - write_string_dogm
Geschwindigkeit kostet? Die einzige Funktion die mir ins Auge sticht ist: char bufferString[60]; sprintf(bufferString,"%c%#3x>%#2.2x>%#2.2x>%#2.2x %#2.2x %#2.2x %#2.2x %#2.2x %#2.2x %#2.2x %#2.2x%c",2,LesezeigerCAN->id,LesezeigerCAN->rtr,LesezeigerCAN->length, LesezeigerCAN->data
-
Thread
HEX Zahlen über UART STM32
Sieht für die Einstellung der RTC so aus [c]stimestructure.Hours = 0x14; stimestructure.Minutes = 0x20; stimestructure.Seconds = 0x00;[/c]
ok wenn es bcd ist, dann kann man es auch ganz einfach machen [c] char* Stunde = "14"; stimestructure.Hours = ( Stunde[0]-'0' ) << 4 | Stunde[1] - '0' [/c]
-
Thread
Nur ganze Zahlen? Wie Fliesskoma?
super, dann würde sich auch ein anderes Problem lösen, Wie kann ich an einen Bestehenden Wert noch C schreiben, also 23.1 C. Das wäre ja dann hier irgendwo: [c] display_ptext( TempW,4,15); [/c] habe schon probiert mit & Zeichen also TempW & " C" ... geht aber nicht so.
0 ? "-%d.%01d" : "%d.%01d"; //(d= Digit daher 1 Kommastelle = 01d / . oder , sprintf(string, sformat, abs(di.quot), abs(di.rem)); return string; } char s[20]; display_ptext( sitofix2(s, 1234), 4, 13); // <-- muss sitofix2 heissen. [/c]
-
Thread
wie aktiviere ich ASM-Ausgabe in STM32CubeIDE?
erzeugt zwar eine Assemblerdatei, passt aber schlecht in die meisten Build-Umgebungen / Makefiles die -c erwarten und eine .o erzeugen. Mit -S bekommt man dann Assembler Code in der .o. Besser geht zusätzlich -save-temps was auch mit -c funktioniert, und auch ohne -c, -S und -E. Den Dateinamen, unter
Harald K. schrieb im Beitrag #7689703: > Da ist der "echte" Assemblerquelltext mit den jeweiligen C-Sourcezeilen > als Kommentar doch deutlich wertvoller, oder? Kommt drauf an... Die Optimierung würfelt den C-Code derart durcheinander, dass der Zusammenhang kaum ersichtlich ist und der C-Code
-
Thread
Webserver: Software wie am besten realisieren?
Kann man nicht HTML-Seiten in separater Datei im Projektpfad speichern und mit dem C-Code darauf zugreifen? Die Implementierung einer HTML-Datei im C-File ist extrem unübersichtlich, wenn im String z.B. " Zeichen enthalten sind. Die muß man ja alle mit \" ersetzen. Ich würde die Zeichen
Ditus schrieb im Beitrag #6964962: > Die Implementierung einer > HTML-Datei im C-File ist extrem unübersichtlich, wenn im String z.B. " > Zeichen enthalten sind. Die muß man ja alle mit \" ersetzen. Ich würde > die Zeichen der Datei Zeichen für Zeichen auslesen und bei einem "