-
Thread
C++ Serialport Datenverlust
{ MeldeDataError(); } //inbuff löschen for(i=0;i<sizeof(inbuff);i++) { inbuff[i] = 0; } //Pointer zurück setzen buffptr = 0; } else if (buffptr > 8) { //inbuff löschen for(i=0;i<sizeof(inbuff);i++) { inbuff[i] = 0; } //Pointer zurück setzen buffptr = 0; MeldeDataError(); } if(ReadFile(hPort,&inbuff
-
Thread
SHT75 - CRC Check: Ich finde den Fehler nicht
itoa((int)*pChecksumme,text2,10); _delay_ms(10); SendeTextUART(text,sizeof(text)); _delay_ms(10); SendeTextUART("xx",sizeof("xx")); _delay_ms(10); SendeTextUART(text2,sizeof(text2)); _delay_ms(10); SendeTextUART("xx",sizeof
-
Thread
Zeiger und Unterprogramm
geschrieben wird. [C] int searchId( typedef_call function ) { int i; for( i = 0; i < sizeof( tasklist ) / sizeof(tasklist[0]); ++i ) if( function == tasklist[i].my_call ) return i; return -1; } int main() { ... id = searchId( prozess_del ); ... [/C]
-
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
itoa gibt auf LCD Zahlen binär, hexadezimal und dezimal aus?
counter = 15; char counter_buffer [10]; while (counter != 0){ itoa (counter, counter_buffer, sizeof (counter_buffer)); lcd_clear (); lcd_string (counter_buffer); counter --; }[/c] Nun ist mir folgendes aufgefallen: Verändert man die Größe von counter_buffer auf 2, also [c]
>void itoa(int input, char *buffer, int radix) ^^^^^^^^^ sizeof() gibt (im konkreten Fall) die Größe des Arrays zurück. 2 Bytes --> Radix 2 -->binär 10 Bytes --> Radix 10 -->dez 16 Bytes --> Radix 16 -->hex Das sizeof ist da völlig falsch, je nach gewünschter
-
Thread
Adressierung bei EEPROMS in C
ENTRIES_TAB1]; tab2_t tab2[ ENTRIES_TAB2]; #define EE_ADR_TAB1 0 #define EE_ADR_TAB2 ( EE_ADR_TAB1 + sizeof( tab1)); #if ( ( EE_ADR_TAB2 + sizeof( tab2)) > EE_ADR_END) #error("Tabelsize overflow") #endif Weil aber sizeof nicht vom Präprozessor aufgelöst werden kann, funktioniert das Ganze nicht
-
Thread
Bizarrer Firmware crash - ATmega4808. Wie Debuggen?
coder.encode_block((unsigned char*) rxpacket.payload, tinytx_fec, datalen); interleave(tinytx_fec, sizeof (tinytx_fec)); radio.send(tinytx_fec, sizeof (tinytx_fec)); } // No FEC else { if (Cfg->InterleaverEnable) { interleave(rxpacket.payload, datalen
coder.encode_block((unsigned char*) rxpacket.payload, tinytx_fec, datalen); interleave(tinytx_fec, sizeof (tinytx_fec)); radio.send(tinytx_fec, sizeof (tinytx_fec)); } // No FEC else { if(Cfg->FecEnable) //if (Cfg->InterleaverEnable) {
-
Thread
was heisst ->
Hallo, Was wird hiermit zum Ausdruck gebracht PlayFile->filename[ sizeof(PlayFile->filename) -6 ] = destime.minute/10 + '0'; mir gehts speziell um PlayFile->filename. Was wird hiermit gemacht -> Vielleicht köönte mir das kurz jemand erklären. mfg
Beitrag #5030209: > Hallo, > > Was wird hiermit zum Ausdruck gebracht > > PlayFile->filename[ sizeof(PlayFile->filename) -6 ] = destime.minute/10 > + '0'; > > mir gehts speziell um PlayFile->filename. > Was wird hiermit gemacht -> Welche Sprache? Haskell?
-
Thread
Messdatenerfassung von Oszilloskop
if ((s=socket(AF_INET, SOCK_STREAM, 0))==-1) err("kein socket"); memset((char *) &si_me, 0, sizeof(si_me)); si_me.sin_family = AF_INET; si_me.sin_port = htons(5025); //Port für SCPI-Kommando über TCP inet_aton("192.168.12.220", (struct in_addr *) &si_me.sin_addr.s_addr ); if ( connect(s,(struct sockaddr *) &si_me , sizeof(si_me))==-1) err("keinconnect"); sprintf(buf,"*IDN?\n"); write(s,buf,strlen(buf)); [/c] Mit anderen Worten man kann oftmals direkt SCPI in TCP/IP Paketen versenden und sich den ganzen
-
Thread
MSP430 Code auf externen Flash auslagern?
: > kann man z.B. die Variable von Jochen 1 zu 1 so übertragen Klar: [c] for (i = 0; i < sizeof (character_a); i++) spi_rom_write(basisadresse + i, character_a[i]); [/c] Basisadresse, falls das ROM nicht beginnend bei seiner Anfangsadresse 0 gefüllt werden soll.
: >> kann man z.B. die Variable von Jochen 1 zu 1 so übertragen > > Klar: > for (i = 0; i < sizeof (character_a); i++) > spi_rom_write(basisadresse + i, character_a[i]); > > Basisadresse, falls das ROM nicht beginnend bei seiner Anfangsadresse 0 > gefüllt werden soll. Danke schön dafür
-
Thread
3-Byte-PC woran erkennen?
Code wie [avrasm] #include <avr/io.h> #undef __SFR_OFFSET #define __SFR_OFFSET 0 ;; R24 = sizeof (PC) sizeof_PC: in r24, SP set rcall 0f 0: brtc 1f clt in r0, SP sub r24, r0 1: ret [/avrasm]
-
Thread
Warum diese Warnung?
reserviert eine Stringkonstante im Speicher und initialisiert test1 mit deren _Adresse_. Es gilt sizeof test1 == sizeof (char *) Du solltest dich nochmal ausführlich mit den Grundlagen von C beschäftigen!
-
Thread
Problem mit For Schleife
; uint16_t min[MIN_LENGTH]; uint16_t max[MAX_LENGTH]; // initialize memset(min, 0, sizeof(min)); memset(max, 0, sizeof(max)); // do measurements for(uint16_t i = 0; i < NR_OF_MEASUREMENTS; i++) { value = GET_MEASUREMENT_VALUE(); // check with minima for(uint16
-
Thread
Werte eines Arrays an Funktion übergeben in C++
foo( int *, size_t ); int main() { int val1[] = { 1, 2, 3, 4, 5, 6 }; foo( val1, (sizeof(val1) / sizeof(int)) - 1 ); return 0; } void foo( int *p, size_t size ) { int x = p[0]; int y = p[2]; int z = p[size]; std::cout << "Arraysize = " << size << "
-
Thread
Arrays und Zeiger
der arrays dann ihm programm mit malloc die 2 dimension reservieren array[n]=(int *)malloc(m*sizeof(int)); //m ist die anzahl an intergers in dem array david
i vorher noch mit der richtigen Datentyp Größe multipliziert wird, zb. bei einem int Array mit sizeof(int) Damit ist man bei Pointerarithmetik davon befreit sich immer um die Datentypen zu kümmern. Wenn Ptr auf int zeigt, dann liefert Ptr + i den richtigen Offset, wenn Ptr auf double zeigt, dann
-
Thread
malloc mit array auf struct-pointer
: [c] struct adr *my_adr2; [/c] und reserviere Speicher: [c] my_adr2=(struct adr*)malloc(sizeof(struct adr)); [/c] ok. Wird compiliert. Aber wenn jetzt stelle ich mir die Frage, wie ich Speicher für eine Pointer-Array auf diesen struct reserviere. [c] struct adr *my_adr[10]; [/c] Also, wie muss ich folgendes abändern, dass es compiliert wird: [c] my_adr=(struct adr*)malloc(sizeof(struct adr)); [/c] Alles versuche geben Fehlermedungen wie: [c] error: incompatible types when assigning to type 'struct adr *[10]' from type 'struct adr *' [/c] Es ist Schwachsinn, aber
-
Thread
Probleme mit DDS AD9954
DDSReg_CFR2, 0x00, 0x02, 0x00 };//mit Taktausgang, ohne PLL rc = SendToDDS(&my_node, cmd2, sizeof(cmd2)); } if(rc==0){ //frequency tuning word (4 Bytes) uint8_t cmd3[] = { DDSReg_FTW0, 0x4E, 0x14, 0x7a, 0xE1 }; rc = SendToDDS(&my_node, cmd3, sizeof(cmd3)); }
rc = SendToDDS(&my_node, cmd5, sizeof(cmd5)); }*/ if(rc==0){ DDS_Update(); // hier gibt es eine Reaktion, nur wenn die ersten 3 Initialisierungsbefehle gesendet wurden DDS_Reset(); // nur zum testen } --
-
Thread
GCC / ARM Cortex, Registerzugriff über Pointer & struct
case MY_DATA_OP2: if( len == sizeof(double) ) { // ... *(double*)data =
case MY_DATA_OP3: if( len == sizeof(short )) { // ... *(short*)data =
-
Thread
DiscoRedTRX - Ein SDR Transceiver aus Baugruppen
calc_bandpass (BANDPASS a) { double* impulse; a->infilt = (double *)malloc0(2 * a->size * sizeof(complex)); a->product = (double *)malloc0(2 * a->size * sizeof(complex)); impulse = fir_bandpass(a->size + 1, a->f_low, a->f_high, a->samplerate, a->wintype, 1, 1.0 / (double)(2 * a->size)); .
-
Thread
STM32 HAL UART Mysterium oder bin ich dumm?
UART_Init(); ... uint8_t tx_buffer[100]; serial_init(&serial2, &huart2, rx2_buffer, sizeof(rx2_buffer), tx2_buffer, sizeof(tx2_buffer)); while(1) { ... // senden sprintf((char *)tx_buffer, "hallo."); serial_write_buf(&serial2, tx_buffer, strlen((char
-
Thread
Klassen in funktionen nutzen c++
tellg(); // Hey. geht doch. Ja genau. So macht man das ifstream test; printf("\n%d\n",sizeof(test)); printf("\n%d\n",sizeof(*FileObject)); //test printf("%4X\n",1000); // hauptschleife while(1){ key=getc(stdin); switch( key ){ case 'h' : printhelp();
-
Thread
EEPROM beim Atmega168 ärgert mich!
load_pwm_values(void){ uint16_t temp_pwm_value[16]; eeprom_read_block(temp_pwm_value,ee_pwm_value,sizeof(pwm_value)); if(test_eeprom_string(temp_pwm_value,sizeof(pwm_value))){ for(i=0;i<16;i++){ pwm_value[i] = temp_pwm_value[i]; } }else{ pwm_value[0] = 0; pwm_value
-
Thread
MSP430 FatFs f_lseek
keine Ahnung, welche Software du verwendest, aber Unix lseek verhält sich anders, ausserdem ist sizeof (data) möglicherweise auch falsch. Für lseek gibt es Konstanten, u.a. SEEK_END, der Aufruf lseek (@data,0,SEEK_END) positioniert ans Ende. RTFM. Gruss Reinhard
Hallo, noch dazu: sizeof (data) ist die Grösse der Struktur FIL, nicht der Datei. Gruss Reinhard
-
Thread
char Arrays variabel
aber am Ende von einem anderen Programm aus nur so viele Zeichen lesen möchte, wie geschrieben. sizeof(buffer) liefert nämlich stets 20 als integer-Wert.
string with which mystr has been initialized has a length of only 11 characters. Therefore, while sizeof(mystr) evaluates to 100, strlen(mystr) returns 11. [/pre]
-
Thread
An alle Echten Programmierer: Fortran lebt!
wenn die Anzahl der Arrayelemente kein Vielfaches von 10 ist). C: [c] for(int i = 0; i < sizeof a / sizeof *a; i++) { if(i && i % 10 == 0) printf("\n"); printf("%5.1f", a[i]); } printf("\n"); [/c] Fortran: [code] print '(10F5.1)', a [/code] Gerade zum
-
Thread
Usart RS232 MSP430
interrupts ... } #pragma vector=UART0TX_VECTOR __interrupt void usart0_tx (void) { if (i < sizeof answer1-1) // string schon zu ende? TXBUF0 = answer1[i++]; // string ausgeben else if (i == sizeof answer1-1) // wenn erster string zu ende ... {
// ... dann den getippten buchstaben ausgeben i++; } else if (j < sizeof answer2-1) // wenn auch der ausgegeben ist ... TXBUF0 = answer2[j++]; // ... dann den zweiten string ausgeben } #pragma vector=UART0RX_VECTOR __interrupt void usart0
-
Thread
SIM800L Verbindung instabil
delay(1000); Serial.println("Testing SIM800L module"); Serial.println(); Serial.print("Sizeof(mySerial) = "); Serial.println(sizeof(mySerial)); Serial.println(); } void loop() // run over and over { if( mySerial.available() ) { char c = mySerial.read(); Serial.print
-
Thread
Zeiger auf Struct (bei Funktionsübergabe)
schon mal in Deckung): [c] char* wort_einlesen() { char* wort[512]; fgets(wort,sizeof(wort),stdin); fflush(stdin); //wort[strlen(wort)-1]='\0'; // Zeilenumbruch entfernen, der durch fgets entsteht return wort; } [/c]
schon mal in Deckung):char* wort_einlesen() > { > char* wort[512]; > fgets(wort,sizeof(wort),stdin); > fflush(stdin); > //wort[strlen(wort)-1]='\0'; // Zeilenumbruch entfernen, der durch fgets entsteht > return wort; > } Tu dir doch selbst einen Gefallen
-
Thread
Zeichen (hex) binär ausgeben
{ // Botschaft über UART empfangen (z.B. 00000000A) uart_gets( botschaft, sizeof( botschaft ) ); // 9-tes Zeichen des Strings als 4-Bit Binär convertieren set_cursor(0,2);lcd_string(hex_to_bin(botschaft[8])); } } } char* hex_to_bin(char hex
{ // Botschaft über UART empfangen (z.B. 00000000A) uart_gets( botschaft, sizeof( botschaft ) ); uint8_t value = toBin( botschaft[8]); set_cursor(0,2); lcd_string( itoa( value, buffer, 2 ) ); } [/C] (jetzt mal von fehlenden führenden
-
Thread
strcat scheint '\0' im ersten String nicht zu überschreiben
ganz ungewöhnliches Problem: [c] char pfad[1024]; char datei[1024]; FILE* stream; fgets(pfad,sizeof(pfad),stdin); // Pfad eingeben: pfad=="C:\\meinPfad" fflush(stdin); fgets(datei,sizeof(datei),stdin); // Dateinamen eingeben: datei=="text.txt" fflush(stdin); strcat(pfad,datei); stream=fopen
-
Thread
float's in den Flash
aussehen: [c] float Wert; uint8_t* pSpeicher; pSpeicher = (uint8_t *) &Wert; for (i = 0; i < sizeof (float); i++) { write_byte_to_flash(pSpeicher[i], StartadresseImFlash + i); } [/c] (Hier mal angenommen, daß die Flash-Beschreibe-Funktion als ersten Parameter das zu schreibende Byte und
genauso aus: [c] float Wert; uint8_t* pSpeicher; pSpeicher = (uint8_t *) &Wert; for (i = 0; i < sizeof (float); i++) { pSpeicher[i] = read_byte_from_flash(StartadresseImFlash + i); } [/c] (hier mal angenommen, daß die Flash-Lese-Funktion als Parameter die zu lesende Adresse übergeben bekommt
-
Thread
Compiler bringt Fehlermeldung verkettetet Liste-weshalb?
in decleration specifiers } int main() { struct elm *anker=0, *tmp; tmp=malloc(sizeof( struct elm)); tmp->i=9; tmp->z=8; tmp->next=anker; anker=tmp; tmp=malloc(sizeof( struct elm)); tmp->i=15; tmp->z=4; tmp->next=anker; anker=tmp; while (tmp) {
-
Thread
C-Funktion: externen Pointer verändern -> Pointer auf Pointer notwendig?
stattfindet. [c] #include <stdio.h> int main(void) { int a[10]; printf("%d %d\n", sizeof(a), sizeof(&a[0])); } [/c]
-
Thread
Identischer Befehl liefert in for-Schleife falschen Wert
diese For-Schleife den Inhalt von "image_progfuses" ausgeben: [c]for ( uint8_t index = 0; index < sizeof ( targetimage->image_progfuses ); index++ ){ showHex ( targetimage->image_progfuses[index], true, true ); }[/c] was aber falsche Werte zurück gibt. Wenn ich es aber ohne die Schleife mache, stimmen
->image_progfuses[3], true,true );[/c] Ich habe auch überprüft, ob die Indizes stimmen und ob sizeof() den richtigen Wert zurück gibt, beides positiv. Nun bin ich mit meinem Latein am Ende und hoffe auf eure Hilfe. Gruß Hannes
-
Thread
C++: delete auf Elternklasse
constructor<derived2>, &constructor<derived3> }; const std::size_t constructor_count = sizeof(constructors)/sizeof(constructor_t); ... base* eltklaptr = (*constructors[kindklassentyp])(); ... [/c] Bronco schrieb im Beitrag #3772947: > Ist der Destructor der Elternklasse aber nicht
-
Thread
Problem mit setmode() und fwrite()
char *argv[] ) { int st, size; memset( fbuf, '*', sizeof( fbuf)); st = setmode( fileno( stdout), O_BINARY); printf( "Zeile %d\n", st); size = 200000; fwrite( fbuf, size, 1, stdout); fputs( "Noch eine Zeile
char *argv[] ) { int st, size; memset( fbuf, '*', sizeof( fbuf)); st = _setmode( fileno( stdout), O_BINARY); printf( "Zeile %d\n", st); size = 100000; _set_errno( 0 ); int r = fwrite( fbuf, size, 1, stdout
-
Thread
Arduino: Arduino startet mitten im Code neu
, 128); Serial.println((String)sendText); radio.Send((uint8_t)dest, sendText, (uint8_t)sizeof(sendText), requestAck); if(waitForAck(dest)) { Serial.println("Nachricht erfolgreich an Melder: "+(String)dest+" gesendet!"); } } } static boolean waitForAck(int dest)
nullterminiert"); Serial.println((String)sendText); radio.Send((uint8_t)dest, sendText, (uint8_t)sizeof(sendText), requestAck); if(waitForAck(dest)) { Serial.println("Nachricht erfolgreich an Melder: "+(String)destination+" gesendet!"); } } } static boolean waitForAck(int
-
Thread
Serial Port Ansteuern in Visual Studio
GetLastError()); return (1); } // Initialize the DCB structure. SecureZeroMemory(&dcb, sizeof(DCB)); dcb.DCBlength = sizeof(DCB); // Build on the current configuration by first retrieving all current // settings. fSuccess = GetCommState(hCom, &dcb); if (!fSuccess) {
-
Thread
CPP Code nach C portieren. endet in Stackoverflow.
Alleine int16_t sine[SCALE]; int16_t cosi[SCALE]; belegen 8192 * sizeof(int16_t) * 2 = 32768 Bytes RAM Da könnte es helfen die ins Flash zu legen. ungünstig sind auch die "großen" lokalen Arrays int16_t xyz[3][N]; uint8_t rgb[3][N]; 3 * 256 * 2 + 3 * 256 * 1 =
im Beitrag #3939803: > Alleine > int16_t sine[SCALE]; > int16_t cosi[SCALE]; > belegen 8192 * sizeof(int16_t) * 2 = 32768 Bytes RAM > Da könnte es helfen die ins Flash zu legen. > > ungünstig sind auch die "großen" lokalen Arrays > int16_t xyz[3][N]; > uint8_t rgb[3][N]; > > 3 256 2 + 3
-
Thread
Mikrocontroller: Ringpuffer für UART-Kommunikation
Speicher //reservieren ringbuffer_handler_t *buffer = (ringbuffer_handler_t *)malloc(sizeof(ringbuffer_handler_t)); //Werte des Handler belegen //readIndex und WriteIndex zu Anfang 0 //fuer fifo muss genuegend Speicher reserviert werden, //um size Datenelemente
Parameter) buffer->readIndex=0; buffer->writeIndex=0; buffer->fifo = (userdata_t *)malloc(sizeof(userdata_t) * (size + 1)); buffer->size = size; //Zeiger auf Ringbuffer-Handler zurueckgeben return buffer; } [/c] Schau dir noch einmal an, welche Menge speicher für welchen
-
Thread
eeprom_write_block
>eeprom_write_block ( &g_env, &ee_env, sizeof (t_env) ); // Zeile A Versuchs mal so: [c] #include <avr/pgmspace.h> // PROGMEM-Funktionen ... struct t_env { unsigned char cInMask; unsigned char cOutMask; unsigned
struct t_env g_env; struct t_env ee_env EEMEM; ... eeprom_write_block ( &g_env, &ee_env, sizeof (g_env) ); [/c]
-
Thread
Wie kann ich ein Array über I2C übertragen?
header und CRC data.crc = 0x00 // wer lust hat kann es selber berechnen i2c.send(i2c_addr, &data, sizeof(struct _data); [/c] jetzt kannst du dir noch überlegen, ob 1024 Byte immer sauber über den Bus gehen. Wenn nicht, dann kannst du mit Chunks arbeiten und ggf. das im Typ kodieren oder die Daten nochmals
es! int test[10]; // und in einer Funktion dann: Wire.write(reinterpret_cast<byte*>(test),sizeof(test));