Logdatei
This commit is contained in:
+44
-7
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user