-
Thread
Fehler nach Einfügen einer Else-Anweisung
lcd_StringCenter(): [c] void lcd_stringCenter(const char* data, int row) { if ( sizeof(data) > 0 ) { int length = strlen(data); int column = 0; if ( length <= LCD_COLOUMS ) { column = LCD_COLOUMS / 2 - ( length + ( length % 2 ) ) / 2; }
, uint8_t coloumn, uint8_t row ) Das gleiche vermutlich mit lcd_setcursor(coloumn, row); sizeof(data) ist immer grösser 0. if ( data != 0 ) usw. Bring erstmal diesen Unsinn in Ordnung. Das wird dein Programm schon mal ordentlich eindampfen.
-
Thread
libusb & ATtiny85-20SU
return 0; } // Running a sync write test ret = usb_bulk_write(dev, EP_OUT, tmp, sizeof(tmp), 5000); if (ret < 0) printf("error writing:\n%s\n", usb_strerror()); // Running a sync read test ret = usb_bulk_read(dev, EP_IN, tmp, sizeof(tmp), 5000); if (ret < 0)
USB_ENDPOINT_IN, USB_REQ_GET_DESCRIPTOR, (USB_DT_STRING << 8) + index, langid, buffer, sizeof(buffer), 1000); [/CODE] libusb0-dll:err [control_msg] sending control message failed, win error: A device attached to the system is not functioning. Die IDE hat keine Probleme mit dem Gerät
-
Thread
ADC-Wert auf 4 7-Segmentanzeigen darstellen ohne viel Rechenleistung
{ uint32_t tab[] = {100000, 10000, 1000, 100, 10, 1}; uint32_t temp; int8_t i = 0, j , n = (sizeof(tab)/sizeof(tab[0])-nachkomma); if(l < 0) { l = -l; *s++ = '-'; } while((i < n-1) && (tab[i] > l)) { i++; } do { if(i == n) {*s++ = '.';}
-
Thread
Hinweis: C++ Core Guidelines
> >[c] char ch = 7; void* pv = &ch; int* pi = pv; // not C++ *pi = 999; // overwrite sizeof(int) bytes near &ch [/c] >Enforcement > >Use a C++ compiler. Ich wusste gar nicht das C++ Code generiert? Meines Wissens macht das der Compiler, und da kommts vor allem darauf an welchen ich
>>char ch = 7; > void* pv = &ch; > int* pi = pv; // not C++ > *pi = 999; // overwrite sizeof(int) bytes near &ch >>Enforcement >> >>Use a C++ compiler. > > Ich wusste gar nicht das C++ Code generiert? Meines Wissens macht das > der Compiler, Steht doch auch so da >>Use a C++ *
-
Thread
Initialisierung von Doppel Array verhindert Programmausführung
und das hier in die main Funktion, funktioniert das Programm virtual_LCD = malloc(SCREEN_HIGHT * sizeof(unsigned char*)); for (unsigned char idx = 0; idx < SCREEN_WIDTH; idx++) virtual_LCD[idx] = malloc(SCREEN_WIDTH * sizeof(unsigned char)); Nun meine Frage: was ist an diser Formulierung falsch
-
Thread
Stringlänge mit Präprozessor-Direktive bestimmen
man es aufruft, passiert was. Z.B. wenn man damit eine konstante Variable anlegt, kann man mit sizeof() deren Länge bestimmen (abschließende 0 zählt mit). Peter
Ansonsten würde auch gehen: #define TESTSTRING_LENGTH (sizeof(TESTSTRING)-1)
-
Thread
C Zeichenketten und Speicher
2; buffer = realloc(buffer, length * sizeof(char) + 1); assert (NULL != buffer); } buffer[index] = read; ++index; read = fgetc(input_file); } buffer[index] = '\0'; return buffer; } char **split(const
++number_tokens; tokens = realloc(tokens, number_tokens * sizeof(char *)); assert (NULL != tokens); } tokens[index] = malloc(strlen(token) + 1); assert (NULL != tokens[index]); strcpy(tokens[index], token); ++index; token =
-
Thread
Beispielprogramm für RFM12 433MHz Funk-Module
Überlegung schon mal: [c] void receive(void) { int test; rf12_rxdata((char*)&test,sizeof(int)); if(test > 0 && test < 10) { einer = test; } } [/c] Geht es in die richtige Richtung?
buffer[7]; rf12_rxdata((char*)&test,sizeof(uint16_t)); itoa( test, buffer, 10); uart_puts(buffer); uart_putc('\n'); } [/c] Und das ist das Ergebniss auf dem Terminal: - 9 1 1 8 \n 1 6 2 2 6 \n 3 2 6 1 0 \n
-
Thread
enum mit genau 1 Byte Datenverbrauch
zugehörigen Makefile festgelegt). Erzwingen kann man das auch mit einem compile-time assert auf ein sizeof() [c] _Static_assert (sizeof(enum foo) == 1, "this code must be compiled with -fshort-enums"); [/c] und ein paar Worten Dokumentation gleich daneben so daß wenn irgendwer in 12 Jahren den
-
Thread
Daten splitten für 7 Segment
zu arbeiten. Warum nicht? [c] int a = 1234; char ausgabe[4]; for( uint8_t i = 0; i < sizeof(ausgabe); i++ ){ ausgabe[i] = a % 10; a /= 10; } [/c]
und dann eben (Anleihe an PeDa) [c] int a = 1234; char ausgabe[4]; for( uint8_t i = 0; i < sizeof(ausgabe); i++ ){ ausgabe[i] = Muster[ a % 10 ]; a /= 10; } [/c] Ausgabe enthält dann schon das jeweilige Muster, dass du an deinen Treiber geben musst.
-
Thread
Pin einlesen und schieben
Das ganze würde so funktionieren: [c] for(int i=0; i<(sizeof(daten)*8); i++) { daten = (daten << 1) | PINXY; } [/c] MfG Marius
} } Ich glaube du meinst (ich weiß es aber nicht genau): daten:=0; for(int i=0; i<(sizeof(daten)*8); i++) { if(PINB & (1<<PINB5)) daten = (daten << 1) | 1; else daten = (daten << 1); } Dieser code schiebt einfach das, was am PINB5 anliegt nach links. Allerdings
-
Thread
[STM32F4] PWM mit variablem DutyCycle mit DMA generieren
*/ MX_GPIO_Init(); MX_DMA_Init(); MX_TIM3_Init(); /* USER CODE BEGIN 2 */ len = sizeof(buffer); buffer[0] = 26; buffer[1] = 26; buffer[2] = 26; buffer[3] = 26; buffer[4] = 26; buffer[5] = 26; buffer[6] = 26; buffer[7] = 26; //HAL_TIM_Base_Start(&htim3);
/ 16 Bit?) [/code] Code-Stelle 2: [code] /* USER CODE BEGIN 2 */ len = sizeof(buffer); // VERDACHT: Du erwartest len=8 ? // aber Du bekommst vermutlich len=32 ... // korrekt wäre: len = sizeof(buffer)/sizeof(buffer[0]); buffer[0] = 26; buffer[1
-
Thread
Raspberry Pi In C system() verwenden um Kommandobefehle auszuführen und Inhalt speichern
das Modell: [c] GPIO = fopen("/sys/class/thermal/thermal_zone0/temp", "r"); fgets(Daten, sizeof(Daten), GPIO); fclose(GPIO); printf("Temperatur ist:\n"); printf("%s", Daten); GPIO = fopen("/sys/firmware/devicetree/base/model", "r"); fgets(Daten1, sizeof(Daten1), GPIO); fclose
-
Thread
Pocket-PC, Windows CE, COM-Schnittstelle
NULL)MessageBox(text); else { DCB dcb; COMMTIMEOUTS WTimeOuts; dcb.DCBlength = sizeof (DCB); GetCommState(hFile,&dcb); dcb.fBinary = TRUE; dcb.BaudRate = 115200; dcb.ByteSize = 8; dcb.Parity = NOPARITY; dcb.StopBits = ONESTOPBIT; SetCommState(hFile,&dcb); memset(&WTimeOuts,0,sizeof(COMMTIMEOUTS)); SetCommTimeouts(hFile,&WTimeOuts); } } void CCAN_BTDlg::OnDisconnect() { CloseHandle(hFile); }
-
Thread
Problem mit while()
Noch ein Hinweis, je nach Zielsystem ist sizeof(double) = sizeof(float).
-
Thread
Komisches Zeichen wird im LCD angezeigt. Durch zusammenfügen von 2 Strings?
auch mal mitdenken. Setze hzString auf die maximale Stellenzahl von int16_t: [c] char hzString[sizeof("-32768")]; [/c] Aber wozu überhaupt atoi, wenn Du eh sprintf benutzt? Und malloc in ner Loop bricht dem RAM das Genick.
auch mal mitdenken. > Setze hzString auf die maximale Stellenzahl von int16_t:char > hzString[sizeof("-32768")]; > > Aber wozu überhaupt atoi, wenn Du eh sprintf benutzt? > Und malloc in ner Loop bricht dem RAM das Genick. itoa damit er aus hzInNumber(Frequenz) in ein String umwandelt. Damit
-
Thread
ESP32 von heltec mit Display
{ if (server.hasArg("ledpair")) { String ledpair = server.arg("ledpair"); for (int i = 0; i < sizeof(pairs)/sizeof(LEDPair); i++) { if (ledpair == pairs[i].code) { led1 = pairs[i].led1; led2 = pairs[i].led2; break; } } if (led1 >= 0 && led2 >= 0) { server.send(200, "text/plain", "LEDs are
-
Thread
Länge eines Arrays in c als Funktion ausgeben funktioniert nicht
als übergabe? wenn ich die arraylänge ohne funktionsaufruf ausrechne funktioniert die formel mit sizeof. [c] int cla[]={2,3,4,5,6}; //testarray int arraylen(int array[]) { int len=sizeof(array)/sizeof(array[0]); return len; } void main() { int ba; ba=arraylen(cla); } [/c]
-
Thread
WLAN / WIFI Modul für µC - Erfahrungen
5) != 0) ... if(s->inputbuf[1] == ISO_space) { strncpy(s->filename, http_index_html, sizeof(s->filename)); } else { if (reply_shmtl) { http_reply_create(&s->inputbuf[0]); strncpy(s->filename, http_reply_shtml, sizeof(s->filename)); } else { s->inputbuf[PSOCK_DATALEN(&s->sin) - 1] = 0; strncpy(s->filename, &s->inputbuf[0], sizeof(s->filename)); } } ... }
-
Thread
Effizienter Running Median
median_t sorted[NN]; timebased[idx++] = neu; idx %= NN; memcpy(sorted, timebased, sizeof(sorted)); qsort(sorted, NN, sizeof(median_t), cmpfunc); return (sorted[(NN - 1) / 2]); } [/c]
-
Thread
Akausales Verhalten von Atmega328p
'\0', (N_MAX_ROUNDS + 1) * N_BLOCK): [/c] oder einfacher: [c] memset(aesContext.ksch, '\0', sizeof (aesContext.ksch)): [/c] Ich habe nachgerechnet: Glücklicherweise stimmen die 240.;) Tipp: Suche nach weiteren Zahlenkonstanten im Source, überprüfe die Richtigkeit und ersetze diese maghischen Zahlen durch passende Preprozessor-Konstanten oder sizeofs. Eine falsch verwendete Zahl kann schon verheerende Auswirkungen haben.
-
Thread
ESP32 Arduino String Funktion - wo liegt der Fehler?
auf Gut Glück.... [c] char eingabe[40]; char name[16]; mystring.toCharArray(eingabe, sizeof(eingabe)); if (strstr(eingabe, "show")) { char *p = strstr(eingabe, ' '); if (pos != NULL) { strcpy(name, p); showTodayFile(&name); } } [/c]
memory : " + String(ESP.getFreeHeap() / 1024) + " kb"); debugln("Size of Data : " + String(sizeof(Data)) + "Bytes"); debugln("MAC Adresse : " + String(WiFi.macAddress())); debugln("---- Solar Daten ----------"); debugln("UBatt = " + String(Data.UBatt) + "V"); debugln("UBattAvg
-
Thread
C/C++ Socket Programmierung
liegen. In den betreffenden Zeilen [c] if( connect(this->sock, (struct sockaddr*) &addr, sizeof(addr)) == -1 ) { // ... and handle errors. throw TcpSocketException("Failed to connect to " + host + "."); }[/c] kann ich leider keinen Fehler finden. Mache ich vielleicht bei der
connection to given ip address and port ... if( connect(this->sock, (struct sockaddr*) &addr, sizeof(addr)) == -1 ) { // ... and handle errors. throw TcpSocketException("Failed to connect to " + host + "."); } return true; [/c] Liebe Grüße, Andreas
-
Thread
dynamisches Array in einer struct
sendet immer alle bytes der struct mit einem Zeiger. Die Anzahl der zu sendenden bytes wird mit sizeof ermittelt. [c] typedef struct{ uchar header; uchar command; uchar daten[?]; uint crc; } [/c] Kann man das irgendwie machen? Wenn ja wie Innitialisiert man solch einen Datensatz
hinter das Ende der Daten schreiben. Zudem funktioniert die Abfrage der Länge auf keinen Fall mit sizeof. Das Resultat für sizeof muß dem Compiler bekannt sein sein - was es per definition bei einem dynamischen Puffer nicht sein kann. Deswegen muß in den struct auch noch ein Längenfeld, also etwa so
-
Thread
Bootloader in c
void ) = 0x0000; /* Füllen der Puffer mit definierten Werten */ memset(hex_buffer, 0x00, sizeof(hex_buffer)); memset(flash_data, 0xFF, sizeof(flash_data)); /* Interrupt Vektoren verbiegen */ temp = GICR; GICR = temp | (1<<IVCE); GICR = temp | (1<<IVSEL); /* Einstellen
program_page((uint16_t)flash_page, flash_data); memset(flash_data, 0xFF, sizeof(flash_data)); flash_cnt = 0; flash_page_flag = 1; } uart_putc(XON); } break; /* Parse Checksumme */
-
Thread
GCC section für string
Variablen geht es: [c]#include <cstdio> #define EEPROM_STR(literal) ([] () -> const char (&) [sizeof(literal)] { static constexpr char str [] __attribute__((section(".eepromSection"))) = literal; return str; } ()) void test (const char* str) { puts (str); } int main () { test (EEPROM_STR
geht es: > > [c]#include <cstdio> > > #define EEPROM_STR(literal) ([] () -> const char (&) [sizeof(literal)] { > static constexpr char str [] __attribute__((section(".eepromSection"))) > = literal; return str; } ()) > > void test (const char* str) { > puts (str); > } > > int main (
-
Thread
Warnung bei volatile (AVR-GCC)
... sreg=SREG; /* Globale Zeit lokal kopieren */ cli(); memcpy(timedate,TimeDate,sizeof(timedate)); SREG=sreg; fprintf_P(&DevLCD,PSTR("%02u:%02u %02u.%02u.%02u"), timedate[0],timedate[1],timedate[2],timedate[3],timedate[4]); ... } Wahrscheinlich erscheinen die
Mit einem Typecast: memcpy(timedate, (void *) TimeDate, sizeof (timedate));
-
Thread
SAMC20: DMAC->CRC != srec_cat −crc32-l-e
uint16_t *)FLASH_ADDR) uint32_t crc32_val; uint16_t tmp_data = NVM_MEMORY[(NVMCTRL_FLASH_SIZE-sizeof(crc32_val))/2]; crc32_val = tmp_data; tmp_data = NVM_MEMORY[(NVMCTRL_FLASH_SIZE-sizeof(crc32_val)+2)/2]; crc32_val |= ((uint32_t)tmp_data<<16) & 0xFFFF0000; DMAC->CRCCTRL.reg = DMAC_CRCCTRL_CRCSRC_IO
DMAC->CRCSTATUS.bit.CRCBUSY = 1; flash_index++; if (flash_index >= ((NVMCTRL_FLASH_SIZE - sizeof(crc32_val))/2)) { crc = DMAC->CRCCHKSUM.reg; if (crc != crc32_val) { fehler(TEST_FLASH_FAIL); } DMAC->CTRL.bit.CRCENABLE = 0; DMAC->CRCDATAIN.reg = DMAC_CRCDATAIN_RESETVALUE
-
Thread
memcpy vs for-loop bei AVR
string.h> #include <stdint.h> float next_float (float f) { uint32_t i; memcpy (&i, &f, sizeof (i)); i++; memcpy (&f, &i, sizeof (i)); return f; } [/c] wird zum Beipiel: [code]next_float: subi r22,-1 sbci r23,-1 sbci r24,-1 sbci r25,-1 ret[/code]
-
Thread
nRF24L01 : Arduino zu Arduino und zurück?
radio.openWritingPipe(pipe); } void loop() { inbyte = inbyte+1; daten[0] = inbyte; radio.write(daten, sizeof(daten)); } [/vhdl] 1 Byte-empfangen: [vhdl] #include <SPI.h> #include <nRF24L01.h> #include <RF24.h> #define CE_PIN 53 #define CSN_PIN 48 const uint64_t pipe = 0xE8E8F0F0E1LL; RF24
radio.available() ) { bool done = false; while (!done) { done = radio.read( daten, sizeof(daten) ); Serial.print("X = "); Serial.println(daten[0]); } } else { Serial.println("No radio available"); } } [/vhdl]
-
Thread
UCSCR von ATmega32 wird nicht gesetzt
UCSRC = (1<<URSEL) | (1<<UCSZ0) | (1<<UCSZ1); char puffer[1024] = {0}; uart_gets(puffer, sizeof(puffer)); // Endlosschleife while(1) {} return 0; //wird nie erreicht } [/c] Die Baudratenbits und die Enable TX, RX Bits werden gesetzt, aber es werden einfach nicht die Bits
View) setzte, wird das auch ignoriert, bzw im nächstem Step wieder verworfen. uart_gets(puffer, sizeof(puffer)); ist die Funktion aus dem gcc Tutorial. Ich benutzte AVR Dragon, AVR Studio, JTAG und ATmega32 mit 16 MHz(Fuse Bits sind entsprechend gesetzt, als UBRR Wert habe ich 0xCF). Vielen Dank
-
Thread
Arrays kopieren in c
übrigens schon in fast jeder (oder jeder?) C-Standard-Library: [C]memcpy(ArrayZiel, ArrayQuelle, sizeof(ArrayQuelle));[/C]
übrigens schon in fast jeder (oder jeder?) > C-Standard-Library: > > memcpy(ArrayZiel, ArrayQuelle, sizeof(ArrayQuelle)); Nur mit dem kleinen, aber feinen Unterschied, daß memcpy bei Multibyte-Maschinen die Zugriffe so optimiert, daß die einzelnen Schritte die für die Hardware effizienteste Datenmenge
-
Thread
Verliere Daten/Bits beim shiften in C/STM32
Folgender Beispielcode liefert folgendes Ergebnis: [c] HAL_UART_Transmit_IT(&huart2, &tempOut, sizeof(tempOut)); tempOutRAW = tempOut / 16; HAL_Delay(1); HAL_UART_Transmit_IT(&huart2, &tempOutRAW, sizeof(tempOutRAW));[/c] [c] OUTPUT: 0b0001 0110 1100 0000 0b0000 0001 0000 1100 [/c]
-
Thread
MSP430- Auslesen von Kommazahlen ?
einen Wert von 90000 in eine unsigned Long Variable schreiben, aber es wird nur 33464." Ist sizeof (long) == 4? Wenn ja, dann hilft das hintanstellen eines großen 'L' an die Konstante: unsigned long wert = 90000L; Die Konstante ist sonst nämlich eine int-Konstante ...
leider keine Konstante, sondern eine Variable, welche im Programm verändert wird. Die Funktion sizeof liefert mir auch den korrekten Wert 4. Habe ein kleines Testprogramm geschrieben in dem alles problemlos läuft. Es liegt also nicht grundsätzlich am IAR Compiler. Für einen weiteren Typ bin ich
-
Thread
Problem mit Malloc
stdlib.h> int prims(int size) { int i=2,j=0; int *prim=0; prim =(int*) malloc(size* sizeof(int)); if( NULL == prim ) printf("Fehler bei Speicherreservierung!\n"); for(i;i < size;i++) { if(!prim[i]) { printf("%04i\n",i); for(j
#include <stdlib.h> int prims(int size) { int i=2,j=0; int *prim=(int*) calloc(size,sizeof(int)); if( NULL == prim ) printf("Fehler bei Speicherreservierung!\n"); for(i;i < size;i++) { if(!prim[i]) { printf("%04i\n",i); for(j
-
Thread
struct list_head Funktionalität auf Cortex-M4 nutzen
{ "get", &moduleIO_get } }; const Module moduleIO { "IO Module", &moduleIO_functions, sizeof(moduleIO_functions)/sizeof(moduleIO_functions[0]) }; [/c] modules_def.h: [c]#include <stddef.h> #include "module.h" extern const Module modules [3]; static const size_t numModules = 3;
-
Thread
Probleme mit Variablen in Funktion
CAN-Data-Struct */ frame->data[8] = { 0 }; if(stat==1) { nbytes = read(skt, frame, sizeof(*frame)); if (nbytes < 0) { printf("can raw socket read ERROR\n"); return -1; } // paranoid check ... if (nbytes < sizeof(
-
Thread
Endlose schleife
Daten 1. Aber ich brauche bestimmt den ersten Zeitstempelwert. for(;;) { fread(&datastruct,sizeof(datastruct),1,fp); if(datenberich ueberschritten)break; fread(Daten 1); fread(daten 2); usw.. } y=Daten 1; // hier will ich den wert vom Daten 1 was am anfang ausgelesen ist ich hoffe,dass
Daten aus meiner File gelesen haben. In der Leseschleife? > for(;;) > { > fread(&datastruct,sizeof(datastruct),1,fp); > if(datenberich ueberschritten)break; >fread(Daten 1); >fread(daten 2); > usw.. > } > y=Daten 1; // hier will ich den wert vom Daten 1 was am anfang ausgelesen
-
Thread
[C++] Struktur "durchgehen" mit Pointer (ohne Elementnamen)
char*) parameter; cout << (float)(*((float*)strukt)) << endl; // nächstes Element strukt += sizeof (float) cout << (int)(*((int*)strukt)) << endl; // nächstes Element strukt += sizeof (int) ... aber warum sollte man _so_ etwas tun ???????? Stefan
-
Thread
viritual Stack
stackpos = 0; int initstack() { if(stack) cleanstack(); stack = malloc(STACK_BLOCK_SIZE*sizeof(int)); if (!stack) return 0; stacksize = STACK_BLOCK_SIZE; stackpos = 0; error = 0; return 1; } void cleanstack() { free(stack); stack = NULL; } int push(int num) {
stacksize) { stacksize += STACK_BLOCK_SIZE; stack = realloc(stack, stacksize*sizeof(int)); if (!stack) return 0; } stack[stackpos++] = num; return 1; } int pop() { if (!stackpos) { error = 1; return 0; } return stack[--stackpos]; } [/c]