-
Thread
10x mehr Speicherbelegung bei Array von main in Funktion verschieben
const int ROW = 3; int *arr1[ROW]; for(int i=0; i<ROW; i++){ arr1[i]=malloc(sizeof(int)*COL); } for(int i=0; i<ROW; i++) for(int j=0; j<COL; j++) arr1[i][j]=rand()%10; printf("ptr_diff(arr1): %td\n", &arr1[ROW-1][COL-1]-&arr1[0][0]);
int *arr1[ROW]; int *dummy_arr[ROW]; for(int i=0; i<ROW; i++){ arr1[i]=malloc(sizeof(int)*COL); dummy_arr[i]=malloc(sizeof(int)*COL); } .... [/c] Und schon ist die Pointerdifferenz noch größer.
-
Thread
Interrupt und globaler Buffer
c] unsigned char tmpMain[10]; while(true) { if (flag == 1) { memcpy(tmpMain, g_buf, sizeof(g_tel)); flag = 0; } ... } [/c] Ist diese Übergabe korrekt oder kann es zu zb. Deadlocks oder ähnlichem kommen ? Welche Varianten der Übergabe würden sich noch anbieten ? Danke
unsigned char tmpMain[10]; while(true) { if (g_flag == 1) { memcpy(tmpMain, g_buf, sizeof(tmpMain)); g_flag = 0; } ... } [/c]
-
Thread
C Speicher Frage
8. C++ schrieb im Beitrag #4100921: > ist es die 64Bit Maschine Welche? Was sagt denn sizeof (int)? Überraschend ist die Adresse von b.
sizeof (int) sagt 4Byte Ich habe das Programm auf einem Pentium i5 laufen Ich lese gerade was über die Memory Management Unit....
-
Thread
Pointer Übergabeparameter eine Funktion übergeben
sElement List[10]; Das kann dann auch static sein. > //Aufruf Init Funktion > Test_Init(List, sizeof(List) / sizeof(List[0])); List muß dabei als Array-Deklaration sichtbar sein, was hier aber der Fall ist.
-
Thread
Windows-Uhr via µC auslesen
Hallo, versuche gerade das gleiche wie VON THRON. char line[9] uart_gets( line, sizeof( line ) ); uart_gets(":"); bedeutung von sizeof? Lese ja den string von der Seriellen schnittstelle, doch wie sag ich ihm das er speichern soll. in der Variable, stunde,minute und sekunde?
-
Thread
AVR USB DriverHELL
SetupDiDestroyDeviceInfoList(deviceInfoSet); return false; } detailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA); if (!SetupDiGetDeviceInterfaceDetail(deviceInfoSet, &interfaceData, detailData, requiredLength, &requiredLength, NULL)) { LocalFree(detailData);
} pspDevInterfaceDetail = (SP_DEVICE_INTERFACE_DETAIL_DATA*)LocalAlloc(LPTR, sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA)*dwRequire); pspDevInterfaceDetail->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA); if (!SetupDiGetDeviceInterfaceDetail(hDevInfo, &spDevInterfaceData
-
Thread
FT232RL schluckt erstes Byte der Übertragung
(RTS_LINE_FT232R==USART_READY) && (UART_TX_Control.BufferBytesRemaining!=UART_TX_QUEUESIZE*sizeof(struct UART_Message))) { //Übetragung anstossen .... UART_TX_Control.QueueRunning=-1; //die Übetragung läuft jetzt formal #ifdef __AVR_AT90CAN128__ //UCSR1A |= (1<<UDRE1); //
Anfang setzen if(UART_TX_Control.READ_Pointer>= ((unsigned char *) &UART_TX+UART_TX_QUEUESIZE*sizeof(struct UART_Message))) { UART_TX_Control.READ_Pointer=(unsigned char *) &UART_TX; } if(UART_TX_Control.BufferBytesRemaining<UART_TX_QUEUESIZE*sizeof(struct UART_Message)) {
-
Thread
esp8266: keine Verbindung zu Apache-Server
/ Daten an Server senden connectAndSendData(); delay(500); memset(email, 0, sizeof(email)); memset(vorname, 0, sizeof(vorname)); memset(nachname, 0, sizeof(nachname)); } } } [/c] Das Problem ist, dass der ESP8266 keine Verbindung zum Apache-Server
-
Thread
AT91SAM7X256: SPI nur senden über DMA ohne Empfang
pointers and length AT91C_BASE_SPI0->SPI_RPR = (unsigned int)dummy; AT91C_BASE_SPI0->SPI_RCR = sizeof(buff); AT91C_BASE_SPI0->SPI_TPR = (unsigned int)buff; AT91C_BASE_SPI0->SPI_TCR = sizeof(buff); // Wait until DMA complete while(!(AT91C_BASE_SPI0->SPI_SR & AT91C_SPI_TXBUFE)); while
pointers and length AT91C_BASE_SPI0->SPI_TPR = (unsigned int)buff; AT91C_BASE_SPI0->SPI_TCR = sizeof(buff); // Wait until DMA complete while(!(AT91C_BASE_SPI0->SPI_SR & AT91C_SPI_TXBUFE)); while(!(AT91C_BASE_SPI0->SPI_SR & AT91C_SPI_TXEMPTY)); // Disable DMA AT91C_BASE_SPI0->SPI_PTCR
-
Thread
Verknüpfung der Sensordatenabfrage(LTC2498) mit der Funkverbindung(ATmega128RFA1)
txfrm[0] = len + 3 + 2; txfrm[2] = tx_cnt; trx_frame_write (sizeof(txfrm), txfrm); tx_in_progress = true; TRX_SLPTR_HIGH(); TRX_SLPTR_LOW(); LED_SET(1); LED_TOGGLE(0); } } [/code] Das
Sorry fuer die Verwirrung [code] txfrm[0] = len + 3 + 2; txfrm[2] = tx_cnt; trx_frame_write (sizeof(txfrm), txfrm); [/code] war totaler Unfug meinerseits, so wird es aber funktionieren: [code] txfrm[2] = tx_cnt; trx_frame_write (len + 3 + 2, txfrm); [/code] 3 = Anzahl Bytes des Frame
-
Thread
C: Variablen und Typen in ihre Basistypen zerlegen (YACC & Co?)
0 | tSet 0 | unsigned char Status 4 | tValue Value | [sizeof=8, align=4] *** Dumping AST Record Layout 0 | tMeasure 0 | const char * name 4 | tSet Set 4 | unsigned char Status 8 | tValue Value | [sizeof=12, align=4] *** Dumping IRgen Record Layout Record: RecordDecl 0x3b8afb0 <asdf.c:3:9, line:7:1> line:3:9 struct definition |-MaxFieldAlignmentAttr 0x3b8b050 <<invalid sloc>> Implicit 32 |-FieldDecl
-
Thread
flash struct mit flash string pointern auslesen
g_stCmdSmpl[ubCmd])); } else { // extended command put0byte(pgm_read_byte(&g_stCmdBase[((sizeof(g_stCmdBase)/sizeof(ST_BYTE_RESLV))-1)].cCmd)); // '+' // now we crash the system ?! why? ptext = (const char*)pgm_read_word(&(g_stCmdExt0[ubCmd-EN_AT_SEP_EXT+1].pcCmd)); put0text_P(
g_stCmdSmpl[ubCmd])); } else { // extended command put0byte(pgm_read_byte(&g_stCmdBase[((sizeof(g_stCmdBase)/sizeof(ST_BYTE_RESLV))-1)].cCmd)); // '+' ptext = (PGM_P)pgm_read_word(&(g_stCmdExt0[ubCmd-EN_AT_SEP_EXT-1].pcCmd)); put0text_P(ptext); } put0text_P(g_strEND); return
-
Thread
std::array of objects in initializer list
typename ...Ts > struct unroll_actors< std::tuple< Ts... > > { static const actor actors[ sizeof ...(Ts) ]; }; template < typename ...Ts > const actor unroll_actors< std::tuple< Ts... > >::actors[ sizeof ...(Ts) ] = { generate_actor< Ts >::a... }; template < typename A, typename B > struct
Iterator last) { using T = typename std::iterator_traits<Iterator>::value_type ; char buffer[sizeof(std::array<T,N>)] ; auto *p = reinterpret_cast<std::array<T,N>*>(&buffer) ; for (size_t i=0 ; i<N ; ++i) { if (first == last) throw std::runtime_error("make_array:underflow") ;
-
Thread
UDP und select()
(szServer); //3. Daten senden Send_Test= sendto(theSocket, Page, strlen(Page), 0, &saServer, sizeof (struct sockaddr)); if(Send_Test < 0){ perror("sendto"); printf("Error sending data\n"); close(theSocket); return(1); } //4. Warten auf Antwort vom Sender memset(Answer, 0, sizeof(Answer)); ServerLen= sizeof(struct sockaddr); nRet= recvfrom(theSocket, Answer, sizeof(Answer), 0, (struct sockaddr *)&saServer, &ServerLen); printf("Address %s answered: %s\n", inet_ntoa(saServer.sin_addr), Answer); /
-
Thread
Wlan2Serial Modul für 5 euro
6 // oder 0x0001 ...0x07F0 .. [/c] dann schreibe ich [c] flash.write(0x01,0x0000,data,sizeof(data)) // oder flash.write(0x01,0x0001,data,sizeof(data)) [/c] nein - ich hab leider noch nie was bewusst mit flash speicher und mikrocontroller am hut gehabt :-) immer nur "wird schon passen
,data,sizeof(data)) du willst ja am Startadresse von Sektor 2 (also ohne offset) schreiben.
-
Thread
Native C Code in C#
) void Send(void) { GenerateData Data; GenerateFrame(&Data); UPort->Send((char*)&Data, sizeof(data_t)); }
u8MacAddress, 6); solltes du lieber so schreiben memcpy(tTelegram.u8MacAddress, u8MacAddress, sizeof(u8MacAddress));
-
Thread
EEP File wird nicht erzeugt
implicit declaration of built-in function 'memset' [enabled by default] memset(txbuf, 0, sizeof(txbuf)); ^ E:\Meine Dateien\Arbeit\Funk\Empfaenger\main.c(373,6): warning: incompatible implicit declaration of built-in function 'memset' [enabled by default] memset(txbuf, 0, sizeof(txbuf)); ^ E:\Meine Dateien\Arbeit\Funk\Empfaenger\main.c(417,5): warning: implicit declaration of function 'xtea_crypt_cbc' [-Wimplicit-function-declaration] xtea_crypt_cbc(XTEA_ENCRYPT
-
Thread
IR Sender ATTINY85
Eingang //Taster } void loop() { int onoff[]={4500,4500,560 .. . .. . }; int laenge = sizeof(onoff) / sizeof(onoff[0]); DDRB &= ~(1<<PB0); // Pin PB0 auf low if (digitalRead(1) == HIGH) { for(int i=0; i<laenge;i=i+2){ DDRB |= (1<<PB0); //
-
Thread
STM32WBA55 - BLE_p2pServer - Wie kann ich Daten an die UART weiterleiten?
M. G. schrieb im Beitrag #7748520: > if(HAL_UART_Transmit_DMA(&huart1, myBuffer, sizeof(myBuffer)) == > HAL_OK) Der hier übergebene Puffer ist eine automatische Variable, die nur zur Laufzeit Deiner Funktion P2P_SERVER_Notification auf dem Stack existiert, genauer, sogar nur zur
Adresse Deinem Funktionsaufruf übergeben: [c] if(HAL_UART_Transmit_DMA(&huart1, myBuffer, sizeof(myBuffer)) == HAL_OK) if(HAL_UART_Transmit_DMA(&huart1, &myByte, sizeof(myByte)) == HAL_OK) [/c] Was sagt die Dokumentation der Funktion HAL_UART_Transmit_DMA darüber aus, wie übergebene
-
Thread
I2C Problem wahrscheinlich Code fehler!?
// read len bcc = bcc+ret; unsigned char *buf = malloc(ret * sizeof(char)); len += ret; for (int i = 0; i < ret; i++) { buf[i] = i2c_readAck(); // read data bytes bcc = bcc
>unsigned char *buf = malloc(ret * sizeof(char)); warum dynamisch? und warum gibst du den speicher nicht wieder frei? Gruß Jonas
-
Thread
uin16_t ist/wird negativ bei 0x8000.
anfängt. Aber selbst wenn ich es zu einem uint16_t caste also so: [code] snprintf_P(strBuffer, sizeof(strBuffer), PSTR("Config 3: %d VAR: %d\r\n"), config, (uint16_t)ADS1015_REG_CONFIG_OS_SINGLE); [/code] bleibt das Ergebnis unverändert. Also immer noch negativ. Dadurch sollte der Compiler doch
> Wie gibst du die Zahl auf der Seriellen aus? So: [code] snprintf_P(strBuffer, sizeof(strBuffer), PSTR("Config 3: %d VAR: %d\r\n"), config, (uint16_t)ADS1015_REG_CONFIG_OS_SINGLE); sendToSerial(COMM_INTERNAL, strBuffer); [/code] Comm_Internal gibt nur an das die Daten über den
-
Thread
SD Karten Library für ATMega gesucht
if(errCode != 0) { return -1; } } while(1) { f_gets(filteredLine, sizeof(filteredLine), &file); if(strstr(filteredLine, "\r\n")) counteredLines++; if(f_eof(&file) != 0) { counteredLines++; break; } } if(openFile == 1) { errCode
deshlab ohne Fehler durchgehen, weil sie alles als C++ compiliert. > f_gets(filteredLine, sizeof(filteredLine), &file); > if(strstr(filteredLine, "\r\n")) counteredLines++; Und mas machst du, wenn dein "\r\n" mittig auf dem Ende deines Puffers liegt, spricht, wenn dein Puffer 20 Bytes lang
-
Thread
NTC als spannungsteiler linearisieren?
{-23, 1011} {-24, 1023} }; int i; for(i=0; i<countof(Ntc); i++) /* countof(x) --> sizeof(x)/sizeof(x[0]) */ { if(dig <= Ntc[i].dig) {return Ntc[i].C;} } /* was immer auch im Fehlerfall, wenn dig > 1023 oder so */ return -273; } [/c]
-
Thread
Serielleschnittstelle RS232 C++
Register einzustellen, welche wären den noch sinnvoll? [Code] COMMTIMEOUTS cto; ZeroMemory(&cto,sizeof(COMMTIMEOUTS)); cto.ReadIntervalTimeout = 1000; cto.ReadTotalTimeoutMultiplier = 10; cto.ReadTotalTimeoutConstant = 5; BOOL bResTimeout = SetCommTimeouts(m_serialcon
Hallo Fox Xx in Deinem Code stimmt die Reihenfolge nicht. DCB dcb; dcb.DCBlength = sizeof(DCB); zuerst Port-Config lesen GetCommState(m_PortHandle, &dcb) // Konfigurationen des Ports setzen wieso hier schon SetCommState und dann erst DCB-Parameter setzen? Das gehört hinter
-
Thread
SRAM bei Start löschen
Möchte man auf Nummer sicher gehen, ist memset so unpraktisch nicht: memset(foo, 0, 150 * sizeof (char));
> Möchte man auf Nummer sicher gehen, ist memset so unpraktisch nicht: > memset(foo, 0, 150 * sizeof (char)); Dagegen hat auch niemand was. Wogegen wir aber wettern ist: Einfach über den kompletten SRAM drüberbügeln.
-
Thread
Python, PDF an Browser senden, es kommt nur Müll
Das ist aber etwas komplett anderes. Introspektion gibt es zu einem gewissen Grad auch in c. sizeof, offsetof, alignof _Generic, static_assert, etc. Zwar nur zur compile-time, und nicht ganz so toll wie in einigen anderen statisch typisierten Sprachen, aber definitiv vorhanden. An Java sieht man,
Das ist aber etwas komplett anderes. Introspektion gibt es zu einem > gewissen Grad auch in c. sizeof, offsetof, alignof _Generic, > static_assert, etc. Zwar nur zur compile-time, und nicht ganz so toll > wie in einigen anderen statisch typisierten Sprachen, aber definitiv > vorhanden. An Java
-
Thread
Mutex und Timer
folgendermassen aus: [c] PKTIMER* unloadTimer = (PKTIMER*)ExAllocatePoolWithTag(NonPagedPool, sizeof(PKTIMER), 111); KeInitializeTimerEx((PKTIMER)unloadTimer, SynchronizationTimer); [/c] bzw. Mutex: [c] pDevice->send_mutex = (PRKMUTEX*)ExAllocatePoolWithTag(NonPagedPool, sizeof(PRKMUTEX),
-
Thread
PROGMEM -- liest ab bestimmten Array nicht mehr aus
Adressberechnung) läuft über. > Ich denke, der Adressspointer müsste größer sein. Ja, und zwar sizeof(uint32_t), nicht sizeof(void*) wie aus der Signatur von pgm_read_byte_far() (siehe Doppelpost) eindeutig hervorgeht -> Adresse selber ausrechnen. Alternativ wäre noch zu klären, ob der Compiler
-
Thread
0x00 über UART übertragen
Wie ich schon sagte: Du musst die Anzahl der Bytes mitgeben [C] #define ARRAY_SIZE(x) ( sizeof(x) / sizeof(*x) ) unsigned char zeichen[] = { 0x10, 0x02, 0x68, 0x00, 0xff, 0x10, 0x03, 0x8c }; void uart1_put_data( const unsigned char * data, size_t len ) { size_t i; for( i = 0;
-
Thread
sprintf funktioniert bei Tasks nicht??
truncated writing 23 bytes into a region of size 10 [-Wformat-truncation=] 8 | snprintf(a,sizeof(a),"Dieser Text ist zu lang"); | ~~~~~~~~~~^~~~~~~~~~~~~ test.c:8:3: note: ‘snprintf’ output 24 bytes into a destination of size 10 8 | snprintf(a,sizeof(a),"
-
Thread
batch datei aufrufen in visual c++
[c] STARTUPINFO SInfo; PROCESS_INFORMATION PInfo; DWORD dwExitCode; memset(&SInfo, 0, sizeof (STARTUPINFO)); SInfo.cb = sizeof (STARTUPINFO); // eigene Statup-Informationen als Ausgangsbasis verwenden ... GetStartupInfo(&SInfo); SInfo.wShowWindow = SW_NORMAL; if (CreateProcess(NULL
-
Thread
const prog_char in AVR Studio 6.2
nicht zur Laufzeit. Mich stört nur dieses Gleichsetzen von int mit Pointern aufgrund der gleichen sizeof und dann rumcasten. Mich stört zb auch der Cast hier [c] printOnLcd((const char*)pgm_read_word(&string_table[i])); [/c] Die sauberste Lösung, die mir dazu einfällt, wäre eine neue Funktion
> Und in der Arduino-IDE kompilieren beide Codes auf exakt dieselbe Dateigröße. Logisch, da sizeof(int) == sizeof( const char*) Der Unterschied besteht darin, ob du die Typprüfung des Compilers komplett aushebelst oder nicht. Solange nichts passiert, kann man auch ein Atomkraftwerk mit abgeschalteten
-
Thread
der gcc, das const-Schlüsselwort und der Speicher...
Entscheidung wird zur Laufzeit getroffen. Klingt nicht unelegant, macht allerdings einen Heidenaufwand (sizeof(char *) != sizeof(int *) == sizeof(any other *)) und kostet zusätzlichen Speicherbedarf (OK, minimal) und Laufzeit (für die Entscheidung, was zu nehmen ist). Außerdem entsteht zusätzlicher Bloat
-
Thread
Ökonomische Datenübertragung
immer ganze Variablen und Strukte. Einfach einen pointer auf die variable setzen und dann mit dem sizeof-Operator die Größe in Bytes bestimmen, die übertragen werden muss. Dann halt (z.B. für einen Float-wert) 4 Bytes übertragen. Auf der anderen Seite genau andersrum. Da muss man natürlich immer genau
union. [c] Type v1; unsigned char *ptr = (unsigned char *)&v1; for (int i = 0; i < sizeof(Type); i++) { uart_send(ptr[i]); // oder uart_send(*ptr); ptr++; } [/c]
-
Thread
8 bytes variable uint64_t
test_64_bit; char *ptr; int i; ptr = (char*)&test_64_bit; for(i=0;i<sizeof(uint64_t);i++){ ptr[i] = i; } printf("sizeof(test_64_bit): %d\n\n",sizeof(test_64_bit));// ergebnis = 8 printf("test_64_bit: 0x %02x\n",test_64_bit); //hier gibt printf aus test_64
-
Thread
Struktur mit Array dynamischer Größe
struct station *p = malloc(offsetof(struct item, item) + numItems * sizeof(struct item));
offset-Makro. Aber ich schätze bei A.K. war wohl malloc(offsetof(struct station, item) + numItems * sizeof(struct item)); gemeint. Also der Offset von item in der Struktur station.
-
Thread
Datenformat interpretieren
year: 7; } s; } u; u.b = b; char result[20]; snprintf(result, sizeof(result), "%04d-%02d-%02d", u.s.year + year_offset, u.s.month, u.s.day); return result; } [/c]
; month = (b & 0x01e0) >> 5; day = b & 0x001f; char result[20]; snprintf(result, sizeof(result), "%04d-%02d-%02d", year + year_offset, month, day); return result; } [/c]
-
Thread
Webserver ATmega32/644DIP ENC28J60
Objekt nicht mit sizeof() die Länge abfragen kann. Da müsste wohl noch die Längenangabe in die struct http_table mit rein. Diese müsste man in httpd_header_check() eintragen lassen. Oder gleich in webpage.h machen
} WEBPAGE_ITEM; WEBPAGE_ITEM WEBPAGE_TABLE[] = // Befehls-Tabelle { {"index.htm",Page1,sizeof(Page1)}, {"Status.htm",Page4,sizeof(Page4)}, Der Vorteil wäre das Grafiken aus dem Flash schneller geladen werden könnten weil nicht bei jedem Byte auch gleich noch auf %END gecheckt wird.
-
Thread
Allgemeine Fragen zu Eigenbau-libc
heute 17:36 ist fehlerhaft, funktioniert nicht korrekt, wenn num kein ganzzahlig Vielfaches von sizeof(unsigned long) ist. Und auf manchen CPUs kracht es oder die Daten werden falsch kopiert (auch wenn num ein ganzzahlig Vielfaches von sizeof(unsigned long) ist). Undefined Behavior eben. Außerdem scheint
Schau nochmal in Ruhe drauf. Es gibt übrigens auch noch andere BS als Linux, und nicht überall ist sizeof(long) == 8.