From 28c434011bfaf05d8ca52a3dc1504a75836fcedf Mon Sep 17 00:00:00 2001 From: Matthias Biermann Date: Sun, 16 Feb 2025 16:21:44 +0100 Subject: [PATCH] Logdatei --- Software/CRC_DMA.cpp | 51 ++++++++++++++++++++++++++++++++++++++------ 1 file changed, 44 insertions(+), 7 deletions(-) diff --git a/Software/CRC_DMA.cpp b/Software/CRC_DMA.cpp index aa74453..48966ef 100644 --- a/Software/CRC_DMA.cpp +++ b/Software/CRC_DMA.cpp @@ -39,6 +39,16 @@ uint32_t calcCRC32( int main(int argc, char** argv) { int testRuns; + char logFileName[100]; + time_t now = time(NULL); + struct tm *t = localtime(&now); + + strftime(logFileName, sizeof(logFileName)-1, "log_%Y-%m-%d_%H-%M-%S.txt", t); + FILE *logFile = fopen(logFileName, "w"); + + if (logFile == NULL) { + printf("Oeffnen/Erstellen der Logdatei fehlgeschlagen!\n\n"); + } if (argc < 2) { testRuns = TEST_RUNS; @@ -103,9 +113,9 @@ int main(int argc, char** argv) uint32_t uio16PhysBase = 0x30000000; // UIO16 physical Baseaddress uint32_t* pDataPhy = (uint32_t*) uio16PhysBase; - // Speicher fuer die Ergebnisse der CRC Berechnungen durch Hardware und Software - uint32_t crc_sw[MAX_NUMBER_PACKETS]; - uint32_t crc_hw[MAX_NUMBER_PACKETS]; + // Speicher fuer die Ergebnisse der CRC Berechnungen durch Hardware und Software + uint32_t crc_sw[MAX_NUMBER_PACKETS]; + uint32_t crc_hw[MAX_NUMBER_PACKETS]; bool allTestrunsOK = true; @@ -124,10 +134,13 @@ int main(int argc, char** argv) // Ausgabe printf("------------- Starten von Testdurchlauf %i -------------\n\n", TestRun); + fprintf(logFile, "------------- Starten von Testdurchlauf %i -------------\n\n", TestRun); printf("Paketgroesse: %i\tPaketanzahl: %i\n\n", packet_size, number_packets); + fprintf(logFile, "Paketgroesse: %i\tPaketanzahl: %i\n\n", packet_size, number_packets); // Testdaten erzeugen printf("Testdaten erzeugen\n\n"); + fprintf(logFile, "Testdaten erzeugen\n\n"); for (int packet = 0; packet < number_packets; packet++) { for (int word = 0; word < packet_size; word++) { data[packet][word] = (uint32_t) rand(); @@ -149,10 +162,12 @@ int main(int argc, char** argv) // CRC Berechnung mit Hardware starten printf("CRC-Berechnung in Hardware starten\n\n"); + fprintf(logFile, "CRC-Berechnung in Hardware starten\n\n"); CRC->Control |= (1<<0); // CRC Berechnung in Software durchfuehren printf("CRC-Berechnung in Software durchfuehren\n\n"); + fprintf(logFile, "CRC-Berechnung in Software durchfuehren\n\n"); for (int p = 0; p < number_packets; p++) { crc_sw[p] = calcCRC32((uint8_t*) (&data[p][0]), packet_size*4, @@ -164,49 +179,56 @@ int main(int argc, char** argv) ); // printf("Packet %i:\t0x%08x\n", p, crc_sw[p]); + // fprintf(logFile, "Packet %i:\t0x%08x\n", p, crc_sw[p]); } // Auf INT warten printf("Auf Interrupt warten...\n"); + fprintf(logFile, "Auf Interrupt warten...\n"); int pending; read(fdCRC, (void*) &pending, 4); CRC->InterruptStatus = 0; write(fdCRC, (void*) &reenable, 4); printf("Interrupt erhalten\n"); + fprintf(logFile, "Interrupt erhalten\n"); // Hardwareergebnis in Array ablegen for (int p = 0; p < number_packets; p++) { crc_hw[p] = DataDest[p][packet_size]; } - #ifdef DEBUG // data und DataDest komplett ausgeben printf("\ndata\tDataDest:\n"); + fprintf(logFile, "\ndata\tDataDest:\n"); for (int p = 0; p < number_packets; p++) { for (int w = 0; w < packet_size+1; w++) { // dataDest ausgeben if (w < packet_size) { printf("0x%08x: 0x%08x\t0x%08x: 0x%08x\n", &DataDest[p][w], DataDest[p][w], &data[p][w], data[p][w]); + fprintf(logFile, "0x%08x: 0x%08x\t0x%08x: 0x%08x\n", &DataDest[p][w], DataDest[p][w], &data[p][w], data[p][w]); } else { printf("0x%08x: 0x%08x\n", &DataDest[p][w], DataDest[p][w]); + fprintf(logFile, "0x%08x: 0x%08x\n", &DataDest[p][w], DataDest[p][w]); } } } printf("\n\n"); + fprintf(logFile, "\n\n"); #endif - // Daten und Ergebnisse vergleichen unsigned int wrongWords = 0; // Zaehler fuer Anzahl der fehlerhaften Worte im (Ziel-)Speicher printf("Daten und Ergebnisse vergleichen\n\n"); + fprintf(logFile, "Daten und Ergebnisse vergleichen\n\n"); bool allPaketsOK = true; for (int p = 0; p < number_packets; p++) { bool dataOK = true; bool crcOK = true; printf("Paket %i:\t", p); + fprintf(logFile, "Paket %i:\t", p); for (int w = 0; w < packet_size; w++) { // Daten vergleichen @@ -214,21 +236,30 @@ int main(int argc, char** argv) dataOK = false; wrongWords++; printf("Fehler bei Datenwort %i\t", w); + fprintf(logFile, "Fehler bei Datenwort %i\t", w); } } - if (dataOK) {printf("Daten OK\t");} + if (dataOK) { + printf("Daten OK\t"); + fprintf(logFile, "Daten OK\t"); + } // CRC Ergebnis vergleichen if (crc_hw[p] != crc_sw[p]) { crcOK = false; wrongWords++; printf("Fehler bei CRC\t"); + fprintf(logFile, "Fehler bei CRC\t"); } - if (crcOK) {printf("CRC OK\t");} + if (crcOK) { + printf("CRC OK\t"); + fprintf(logFile, "CRC OK\t"); + } printf("CRC: 0x%08x\n", crc_hw[p]); + fprintf(logFile, "CRC: 0x%08x\n", crc_hw[p]); if (!(crcOK && dataOK)) { allPaketsOK = false; @@ -237,20 +268,26 @@ int main(int argc, char** argv) if (allPaketsOK) { printf("Alle Pakete OK\nTestdurchlauf erfolgreich abgeschlossen!\n\n"); + fprintf(logFile, "Alle Pakete OK\nTestdurchlauf erfolgreich abgeschlossen!\n\n"); } else { allTestrunsOK = false; printf("Ein oder mehrere Pakete nicht OK.\n"); + fprintf(logFile, "Ein oder mehrere Pakete nicht OK.\n"); double percentageWrong = (double) wrongWords / (number_packets*packet_size + number_packets); printf("%f Prozent der geschriebenen Worte sind fehlerhaft!\n\n", percentageWrong); + fprintf(logFile, "%f Prozent der geschriebenen Worte sind fehlerhaft!\n\n", percentageWrong); } } if (allTestrunsOK) { printf("Alle Testdurchlaeufe erfolgreich abgeschlossen!\n"); + fprintf(logFile, "Alle Testdurchlaeufe erfolgreich abgeschlossen!\n"); } else { printf("Ein oder mehrere Testdurchlaufe sind fehlerhaft!\n"); + fprintf(logFile, "Ein oder mehrere Testdurchlaufe sind fehlerhaft!\n"); } + fclose(logFile); return 0; }