-
Thread
STM32 USB CDC Objetkt in Kompilat mehrmals vorhanden
memory * @retval None */ void *USBD_static_malloc(uint32_t size) { static uint32_t mem[(sizeof(USBD_CDC_HandleTypeDef)/4)+1];/* On 32-bit boundary */ return mem; } [/c] Diese Funktion wird aufgerufen um Speicher für den USB-CDC-IF Stack zu alloziieren. [c] ... pdev->pClassData = USBD_malloc(sizeof (USBD_CDC_HandleTypeDef)); if(pdev->pClassData == NULL) ... [/c] So und jetzt Hosen runter, wer würde so etwas programmieren? Ich finde das mehr als umständlich. Klar kann man so eine Integration
-
Thread
C-Frage zu einem Warning in einer if-Anweisung
Du musst die Variablen umkopieren: [c] unsigned long nm, ip; memcpy(&nm, netmask, sizeof(netmask)); memcpy(&ip, myip, sizeof(myip)); if ((dest_ip & nm) == (ip & nm)) { DEBUG("MY NETWORK!\r\n"); } else { DEBUG("ROUTING!\r\n"); memcpy(&dest_ip, router_ip, sizeof(router_ip)); } [/c] Keine Sorge, der Compiler kennt memcpy und merkt schon, dass er gar nichts kopieren muss. Die memcpy werden wegoptimiert.
-
Thread
Array wird nicht kleiner, obwohl in Funktion definiert
tut nicht. Nix wird genullt. Bekomme aber eine Warnmeldung vom Compiler: warning: argument to ‘sizeof’ in ‘memset’ call is the same expression as the destination; did you mean to dereference it? [-Wsizeof-pointer-memaccess] memset(addresses, 0, sizeof( addresses) ); @Peter II & @(easylife)
Johannes A. schrieb im Beitrag #4750528: > memset(addresses, 0, sizeof( addresses) ); mache mal memset( &addresses, 0, sizeof( addresses) );
-
Thread
char String Null im Array verhindern
Funktionen besser verwendbar. Eine Frage noch: char Array[]={"x"} Wenn ich die Funktion sizeof(Array) verwende, dann müsste sie mir als Ergebnis "2" zurückgeben, richtig?
Array schrieb im Beitrag #4750289: > Wenn ich die Funktion sizeof(Array) verwende, dann müsste sie mir als > Ergebnis "2" zurückgeben, richtig? Wobei es Du sizeof oder strlen meist nicht brauchst. Bei Strings oder Streams ist ein for i oder ein memcpy selten
-
Thread
Arbeiten mit C und H Dateien
[c] #include <stdio.h> #define dword unsigned long int main () { printf ("%ld\n", sizeof (dword)); return 0; } [/c] Ergebnis auf 32-Bit-Linux: [code] $ cc a.c && ./a.out 4 [/code] Ergebnis auf 64-Bit-Linux: [code] $ cc a.c && ./a.out 8 [/code] Sinn und Zweck der
define dword unsigned long #define dword unsigned long int main () { printf ("%u\n", sizeof (dword)); return 0; } [/c] [code] $ cc -Wall -Wextra a.c && ./a.out 8 [/code] Kein Fehler, keine Warnung. > Klaro jetzt? Ich verstehe Deine Betonkopfhaltung durchaus. Ich selbst
-
Thread
for(;;) bedeutung?
Zeichen liegen, die ein String sein sollen. Bei char s[10]; strncpy(s, "0123456789abcdef", sizeof s); liegt kein \0 drin, und bei strlen(s) wird es dann interessant.
A. K. schrieb im Beitrag #4762196: > strncpy(s, "0123456789abcdef", sizeof s); > liegt kein \0 drin, und bei strlen(s) Offensichtlich ist Dir ja klar, daß die nicht-n-Funktionen heikel sein können, deswegen nimmst Du zurecht strncpy? Wieso nimmst Du dann aber nicht auch
-
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
C Programmierung ppm Ausgabe Hilfe
); printf("note 2:...."); fgets(adressen.note2, sizeof(adressen.note2), stdin); printf("note 3:...."); fgets(adressen.note3, sizeof(adressen.note3), stdin); printf("Vorname Schueler2...."); fgets(adressen.vorname, sizeof(adressen.vorname
printf("note 3:...."); fgets(adressen.note3, sizeof(adressen.note3), stdin); printf("Vorname Schueler3...."); fgets(adressen.vorname, sizeof(adressen.vorname), stdin); printf("Nachname:...."); fgets(adressen.nachname, sizeof(adressen.nachname
-
Thread
ATTiny85 - Software UART Probleme
position++; } else { if(position == 8){ //end of transmission if(charNo == sizeof(str) - 1){ charNo = 0; } else { charNo++; } position = -1; PORTB |= (1<<PINB3); //Stop Bit HIGH needPause = 1; } else{
-
Thread
Beeinflussung von ADC Messungen
vw_wait_tx(); // Wait until the whole message is gone memset(daten, 0, sizeof daten); // Inhalt der Variblen (char) löschen //Schlafen gehen for (int i = 0; i < 1; i++) { //Hier schläft er jetzt 8 Sekunden 450 ist eine ca Stunde goToSleep
-
Thread
ESP8266 hängt, ich denke es liegt an meinem Code
wCLIENTCFG *wConf){ int readwifi = spi_flash_read((wConfAddr*SPI_FLASH_SEC_SIZE), (uint32*)&wConf, sizeof(struct wCLIENTCFG)); #ifdef DEBUG if(readwifi == SPI_FLASH_RESULT_ERR){ os_printf("\nRead wifi setting failed...\n"); } else { os_printf("(12) - read wifi Config from flash
-
Thread
STM32 komisches Verhalten bei include und leerer Funktion
Hm.. besagte Zeilen sehen beide so aus: [c] uint8_t u8Max = (uint8_t) ( sizeof(scEsc_SysTick.apfct) / sizeof(scEsc_SysTick.apfct[0]) ); [/c] mit: [c] volatile struct { void ( *apfct[8] ) (void); } scEsc_SysTick; [/c] Ich habs geändert
-
Thread
C++ Definitions Zwickmühle
Suchst du etwas wie: [c] int x[] = {1,2,3,4}; int x_count = sizeof(x)/sizeof(*x); // ist 4 [/c]
und der Größe gefüllt wird. Am Besten per Makro unterstützt: [c] #define SET_MENU_ADM(x) x,(sizeof(x)/sizeof(x[0]), #x typedef struct { MenuEntry *p; int n; const char *MainTitle; }TMenuAdm; TMenuAdm SettingsAdm = {SET_MENU_ADM(Settings)}; [/c] Zwei Vorteile: -
-
Thread
CAN Bus fifo
, char* bytes); CANObj data; //schreiben: Länge=DLC + CAN_ID + RTR ringBufferWrite(data.dlc+sizeof(uint32)+sizeof(char), (char*)&data);
Guido schrieb im Beitrag #4733624: > ringBufferWrite(data.dlc+sizeof(uint32)+sizeof(char), (char*)&data); Korrektur bzw besser: ringBufferWrite(data.dlc+sizeof(data.CanId)+sizeof(data.rtr),(char*)&data); Der macht dann nichts weiter, als ab Adresse &data eine
-
Thread
Struktur auf Adresse (Zeiger) schreiben
Sizeof?
Ja, das war es. Danke. Hätte ich selbst drauf kommen müssen. Schließlich nutze ich das SIZEOF seit einer Woche fast täglich ;D. Liegt wohl an der Uhrzeit... Danke euch beiden
-
Thread
Include in C - first use in this function
function) int readConf = spi_flash_read(wConfAddr*SPI_FLASH_SEC_SIZE, (uint32*)&wifiClientConf, sizeof(struct wCLIENTCFG)); [/code] das bedeutet ja, dass er diesen Struct nicht finden kann. Wenn ich in die Datei "wifi.c" das hinzufüge: [c] ... #include "config.h" ... [/c] und noch mal die
> int readConf = spi_flash_read(wConfAddr*SPI_FLASH_SEC_SIZE, > (uint32*)&wifiClientConf, sizeof(struct wCLIENTCFG)); > > das bedeutet ja, dass er diesen Struct nicht finden kann. Nein, das bedeutet, dass die Variable /wConfAddr/ dem Compiler unkbekannt ist. Über /wCLIENTCFG/ meckert er hier
-
Thread
OOP in C - Problem mit Funktionspointern
wird ein konstructor - gebilde gebaut werden geraet_t *netzteil; netzteil = malloc ( sizeof( geraet_t )); Licht(netzteil , AN); oder durch fp* + macros.. netzteil->licht(1);
-
Thread
Menü mit Funktionspointer via Array of Struct
sollte stattdessen 0 sein. Stimmt zwar, aber die Begründung ist falsch. Das geht auch, wenn sizeof(int) != sizeof(NULL) ist. Je nach Definition von NULL sollte aber eine Warnunung vom Compiler kommen. http://www.cplusplus.com/reference/cstdlib/NULL/
-
Thread
Befehlssatz der bo8-CPU - was ist gut, was ist schlecht
Das liegt sicher daran, daß das zwar aussieht wie C, aber in Wirklichkeit b(one) ist. Es gibt kein sizeof und der Compiler selbst unterscheidet bei Symolen nur 2 Zeichen. Wenn man "Rechner-Technik" neu erfindet, dann wenigstens konsequent alles von gaaaannnzzz vorne.
-
Thread
internen RC Osci syncronisieren
Zählumfang erhöhen brachte keine Besserung. Array of uint16_t [99] anlegen oder malloc(100 * sizeof(uint16_t)). TCNT2 in Normal Mode. In PCINT0_ISR nur TCNT2 ins Array reinschreiben und Pointer ++ Wenn Pointer > 99 Auswerteroutine aufrufen. Erst in der Auswerteroutine werden die Überläufe
-
Thread
strlen(.) oder sizeof(.)-1
Jochen schrieb im Beitrag #4727186: > Was ist denn besser? ordentlicher ist strlen, schneller ist sizeof
Jochen schrieb im Beitrag #4727199: > Peter II schrieb: >> ordentlicher ist strlen, schneller ist sizeof > > Habe ich vermutet, da der Compiler vermutlich schon das sizeof()-1 > ausrechnet und als festen Wert in den Code einträgt. Ja, natürlich wird sizeof() _immer_ zur Compilezeit ermittelt. Aber
-
Thread
include in include (oder wo sonst?)
Konstantennamen anzupassen (z.B. bei Dir in "eeprom_read(EE_PAGE_LIDARPARAMS, (char *)param_ptr, sizeof(lidar_param_t));) ). Bei Deiner Lösung (Scope auf alle Konstanten in der EEPAGES.h offen für alle Module) muss ich allerdings nur einen Fehler machen, bei meiner Lösung zwei. Ich sage nicht,
Konstantennamen > anzupassen (z.B. bei Dir in > "eeprom_read(EE_PAGE_LIDARPARAMS, (char *)param_ptr, > sizeof(lidar_param_t));) > ). Das wäre dann aber auch "ein Fehler in der Anwendung des Patterns". ;-) Grundsätzlich soll gelten: wenn eine Konstante in nur einer Datei benutzt werden darf, soll sie
-
Thread
Warum werde ich beim Programmieren nicht besser?
werden soll. Wenn ich so was sehe wie: (*(*ang_zeiger).chef).chef = (struct ang_info *) malloc(sizeof(struct ang_info)); dann kann ich das beim besten Willen nicht begreifen. Nicht mal ansatzweise verstehen, was da los ist. Habt ihr Tipps für mich?
#4723408: > Wenn ich so was sehe wie: > (*(*ang_zeiger).chef).chef = (struct ang_info *) malloc(sizeof(struct > ang_info)); Benutze doch mal den Debugger. Dann siehst du, was die Software aus der Befehlszeile macht und das Schritt für Schritt. Struct, Malloc und Sizeof stehen ja im Tutorial und
-
Thread
Frage zur Betriebsspannung messen
eingestellt hat ADCSRA |= (1<<ADEN); //ADC aktivieren delay(150); ID=3; memset(daten, 0, sizeof daten); ADCSRA |= (1<<ADSC); //Messung starten while (bitRead(ADCSRA, ADSC)); //warten bis Messung beendet ist //Ergebnisse des ADC zwischenspeichern. Wichtig: zuerst ADCL auslesen, dann
vw_wait_tx(); // Wait until the whole message is gone memset(daten, 0, sizeof daten); // Inhalt der Variblen (char) löschen //Schlafen gehen for (int i = 0; i < 1; i++) { //Hier schläft er jetzt 8 Sekunden 450 ist eine Stunde //goToSleep
-
Thread
wieder mal ft800
(255,255,255); FTImpl.Finish(); } void loop() { char buf[30]; memset (buf, 0, sizeof(buf)); snprintf(buf, sizeof(buf)-1, "%d", millis()); FTImpl.DLStart(); FTImpl.Clear(1,1,1); FTImpl.ColorRGB(255,255,255); FTImpl.Cmd_Text(240, 138, 31, FT_OPT_CENTER
-
Thread
PIC18F46K80 USART C18
{ //gets1USART(str_USART,12); gets1USART(str_USART,sizeof(str_USART)); //*B10+23,2C inkl. Newline LCD_PRINTF(2,6, (const MEM_MODEL rom char *)"%.7s", str_USART + 4); //*B10+023.2C -> z.b. +023.2C
-
Thread
buffer in variabel speichern aber wie?
// read up to 128 byte int c = stream->readBytes(buff, ((size > sizeof(buff)) ? sizeof(buff) : size)); // write it to Serial USE_SERIAL.write(buff, c); test = buff;
delay(10000); } [/c] es geht um folgenden bereich [c] int c = stream->readBytes(buff, ((size > sizeof(buff)) ? sizeof(buff) : size)); // write it to Serial USE_SERIAL.write(buff, c); test = buff; [/c] wie bekomme ich buff
-
Thread
Shift-Operation im Makro mit UND
Verschieben um eins. Oder (ungünstig ohne Barrel-Shifter) das Verschieben mit: [c] for (i = 0; i < sizeof (uint32_t); i++) { if (irgendwas & (1<<i)) { setze_bit_auf_1(); } else { setze_bit_auf_0(); } } [/c] Aber auch da läuft das i nur bis 31 und nicht
Verschieben um eins. >Oder (ungünstig ohne Barrel-Shifter) das Verschieben mit: >for (i = 0; i < sizeof (uint32_t); i++) Da fehlt wohl ein *8, denn die Schleife ist nach 4 Durchläufen beendet. { > if (irgendwas & (1<<i)) Ich bin ein Fan von Bitmasken, vor allem auf dem AVR. Ist deutlich
-
Thread
Analoger Messwert nach Sleep falsch
//delay(50); ID = 1; //a++; keep_ADCSRA = ADCSRA; memset(daten, 0, sizeof daten); // Inhalt der Variblen (char) löschen digitalWrite(strom, HIGH); digitalWrite(PIN_LED, HIGH); delay(450); sprintf(daten, "%d,%d", ID, analogRead
Auf der Empfängerseite habe ich folgende Zeile vergessen [code] memset(StringReceived, 0, sizeof(StringReceived)); [/code] Manchmal sucht man einfach an der falschen Stelle :-) Danke für eure Hilfe Viele Grüße Torsten
-
Thread
STM32F4 UART2 - Senden und Empfangen mit Interrupt
und die crc(1Byte) senden zuerst sende ich den Sync HAL_UART_Transmit_IT(&huart2, pData, 1);//sizeof(pData)); im huart2->pTxBuffPtr steht dann auch 0x55 dann wird der Interrupt ausgelöst und da sollte in huart2->pRxBuffPtr den Wert 0x55 als Antwort stehen es steht aber nicht die 0x55 void
-
Thread
Klassen Member Array Initialisierung in C++
dann zu "{0}" übersetzt, was aber auch valides C++ ist und genau das gleiche, "::memset(array,0,sizeof(array));", machen sollte Schönes Beispiel, wie veraltete Richtlinien den Einsatz verbesserter Verfahren be(/ver)hindern können. Kauf dir ein besseres Lint oder glaub den Compilerwarnings.
-
Thread
Arduino + RF24 (nRF24L01+) sendet/empfängt immer nur 3 Mal Daten
auslesen //data.soilMoisture = analogRead(SOIL_MOISTURE_DATA); //bool ok = radio.write(&data,sizeof(dataStruct), 0); //bool ok = radio.write(&data,sizeof(dataStruct), 1); bool ok = radio.writeBlocking(&data,sizeof(dataStruct), 1000); radio.txStandBy(1000); if (ok) {
; while(radio.available(&pipeNumerSenderLivingroom)) { radio.read(&data, sizeof(dataStruct)); //radio.stopListening(); //bool acknowledgement; //radio.writeAckPayload(pipeNumerSenderKitchen, &acknowledgement, sizeof(bool) ); }
-
Thread
C - String-array dynamisch erweitern
while(fgets(buf, 255, (FILE*)fp)) { interprets = (char**) realloc(interprets, (songcount+1)*sizeof(char*)); *interprets = (char*) malloc(255*sizeof(char)); strcpy(interprets[songcount], buf); songcount++; } return songcount; } [/c]
[c] *interprets = (char*) malloc(255*sizeof(char)); strcpy(interprets[songcount], buf); [/c] ist falsch müsste so sein: [c] interprets[songcount] = (char*) malloc(255*sizeof(char)); strcpy(interprets[songcount], buf); [/c]
-
Thread
Sortieralgorithmus für Struktur-Daten
> mess2->energie) return 1; else return 0; } qsort((void *)messwerte,sizeof(messwerte)/sizeof(messwerte_t),sizeof(messwerte_t),(compfn)messwerte_sort); [/c]
-
Thread
Konvertierung unsigned int --> unsigned char*
", b3, b2, b1, b0); } int main() { uint32_t i1=0x12345678; char s1[16]; convert (i1, s1, sizeof(s1)); uint32_t i2=0x23456789; char s2[16]; convert (i2, s2, sizeof(s2)); printf ("(1) %x -> %s\n", i1, s1); printf ("(2) %x -> %s\n", i2, s2); return 0; } [/c] Hier kannst Du alle
-
Thread
AVRGCC C++ undefined reference to Max7456::Max7456()
') { currentChar = string[++size]; } chars = (byte*) malloc(size * sizeof(byte)); for(byte i = 0 ; i < size ; i++) { chars[i] = Max7456::giveMax7456CharFromAsciiChar(string[i]); } printMax7456Chars(chars, size, x, y, blink , inv
,byte inv) { char *strValue = NULL; strValue = (char*) malloc((before+after+2)* sizeof(char)); if(after==0) dtostrf(value,before+after,after,strValue); else dtostrf(value,before+after+1,after,strValue); for(int i = 0 ; i < before+after
-
Thread
Kommazahl auf Display anzeigen
> hinten > > wie stelle ich das an.? Zum Beispiel so: [c] memcpy(ArrayZiel, ArrayQuelle, sizeof(ArrayQuelle)); oder memmove (str+3,str+2,4); [/c]
-
Thread
Spannungsversorgungs Probleme!
Druck: "); Serial.println(m.pressure); // byte array for sending data uint8_t payload[sizeof(struct Messung)]; // copy struct of measurement to byte array for sending memcpy(payload,&m,sizeof(m)); Serial.println("Sending to rf24_reliable_datagram_server"); // Send a message to manager_server if (manager.sendtoWait(payload, sizeof(payload), SERVER_ADDRESS)) { // Now wait for a reply from the server uint8_t len = sizeof(buf); uint8_t from; if (manager.recvfromAckTimeout(buf, &len, 2000, &from))
-
Thread
Ansi C: Convertierung int to string
addr.sin_addr.s_addr = htonl (0xc0a8010c); res = getnameinfo ((struct sockaddr*) &addr, sizeof (addr), hostname, sizeof (hostname), NULL, 0, NI_NUMERICHOST); if (res == 0) { printf ("Adresse als String: %s\n", hostname); return 0; } else { printf ("Fehler: %s\n", gai_strerror
-
Thread
sprintf bringt nach Compilierung im Relaese Mode nur "?" als Wert
Text_buffer_size 160 char Text[Text_buffer_size]; // Sendebuffer eeprom_read_block(Text, eeName, sizeof(eeName)); // LiIon Voltage if(Flags116 & FMLiIon_alarm) { strcat_P(Text,PSTR("-> ")); } sprintf(U_array_fl[LiIon],"%4.2f",((double)mVLiIon/1000)); strcat_P(Text,PSTR("Backup battery
-
Thread
C Programmierung Array/Funktion/pointer
char *result, int lenght_result) { FILE *ptr_file; char buf[22]; char buf_old[sizeof(buf)]; char candata_needed[4]; //while(1){ ptr_file =fopen("/home/pi/probe.txt","r"); if (!ptr_file){ return 1; } if (fgets(buf,sizeof(buf), ptr_file)!=NULL){ if(memcmp(buf, buf_old, sizeof(buf))) { memcpy(candata_needed, buf + 17, sizeof(buf)); strncpy(result, candata_needed, lenght_result);
-
Thread
Fehler durch den Sleep Modus Attiny85
vw_setup(1000); // Bits per sec vw_set_tx_pin(3);// } void loop () { memset(daten, 0, sizeof daten); // Inhalt der Variblen (char) löschen digitalWrite(strom, HIGH); digitalWrite(PIN_LED, HIGH); delay(250); sprintf(daten, "%d", analogRead(sensorPin