Eclipse C++ Raspberry Pi

Gast #5445275
Lesenswert?

Hallo zusammen,

ich programmiere meinen RPi über Eclipse C++ Remote.
Das Debugging meines Codes funktioniert ohne Probleme.

Ich möchte gerne Sensordaten loggen bzw. in einem File /media/X00.csv 
abspeichern. Durch durch drücken eines Buttoms wird die nächste Messung 
mit /media/X01.csv usw. abgespeichert.

Ich mache das folgendermaßen:
1
char filename[]=  "/media/X00.csv";
2

3

4

5
int main (void){
6

7
FILE * myFile_1;
8

9
for (uint8_t x = 0; x < 100; x++) {
10
      
11
    filename[8] =  x/10 + '0';
12
    filename[9] =  x%10 + '0';
13

14

15

16
                std::ifstream FileTest(filename);
17

18

19
               if(FileTest){
20

21

22
                   myFile_1 = fopen(filename,"w");
23

24
                break; 
25

26
                  }
27
                }
28
    
29
                  
30
...Vario wird berechnet...
31

32
     fprintf(myFile_1, "%s, %d\n","Vario: ", Vario);
33
     fclose(myFile_1);


bei fprintf(...) bricht das Programm ab: "No source available for 
"vfprintf() at 0x76c9182c""


An einem IOT2040 von Siemens hat das ohne Probleme funktioniert.
Was mache ich beim Raspberry falsch?

Danke!
(Firma: Torrox.de) #5445545
Lesenswert?

Hi John,

johnPI schrieb:

> Was mache ich beim Raspberry falsch?

soll jetzt jeder von uns, Deinen Quelltext kopieren und erst einmal 
formatieren, damit man ihn lesen kann? Du möchtest Hilfe? Dann hilf uns, 
Dir zu helfen!

Ansonsten scheinst Du zwei mal die Datei mit dem Namen filename zu 
öffnen. Einmal lesender weise und einmal dann zum schreiben. Das soll 
sicherlich so etwas wie ein Test sein, ob die Datei vorhanden ist. Lass 
das einfach und öffne die Datei einfach zum schreiben und prüfe das 
Ergebnis dieser Operation.

mfg Torsten
Gast #5445838
Lesenswert?

Das debuggen funktioniert fehlerfrei.
Programm funktioniert ebenfalls fehlerfrei sobald ich " 
fprintf(myFile_1, "%s, %d\n","Vario: ", Vario);
und  fclose(myFile_1);" ausblende.

Fehlermeldung kommt sobald er fprintf(...) oder fclose(...) ausführen 
will.


Entsppechende libs:
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
#include <fstream>
#include <unistd.h>
#include <iostream>
#include <cmath>
#include <algorithm>
#include <string>
...
Gast #5445868
Lesenswert?

1
if (file == NULL) {
2
     perror("Error opening file: ");
3
}

habe ich einmal in der if Schleife "if(FileTest)" eingefügt und dann 
noch einmal ausserhalb der For Schleife "for (uint8_t x = 0; x < 100; 
x++)"

Die If Schleife wird nicht ausgeführt.
Bei der zweiten Abfrage kommt das kein File vorhanden ist.

Ich frage mich wieso das bisher mit dem IOT2040 funktioniert hat :/
(Firma: Torrox.de) #5445887
Lesenswert?

johnPI schrieb:
> habe ich einmal in der if Schleife "if(FileTest)" eingefügt und dann
> noch einmal ausserhalb der For Schleife "for (uint8_t x = 0; x < 100;
> x++)"

Diese Abfrage solltest Du exakt einmal machen. Genau dann, wenn der Du 
Variablen einen Wert zuweist. In C++ ist es auch nicht nötig (und in C99 
auch nicht) eine Variable am Anfang der Funktion zu deklarieren. Damit 
kannst Du die Variable als Konstate deklarieren und sofort 
initialisieren:
1
    FILE* const vario_file = fopen( filename );
2

3
    if ( vario_file )
4
        ....

> Die If Schleife wird nicht ausgeführt.

Was auch immer eine "If Schleife" ist...

> Ich frage mich wieso das bisher mit dem IOT2040 funktioniert hat :/

Nun, dort scheint es offensichtlich möglich zu sein, eine Datei zwei mal 
zu öffnen und unterschiedliche Modies dabei anzugeben.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren