Jump to content

[SOLVED] [C/C++] PTC-Bricklet ptc_get_resistance führt zu Fehlermeldung


Recommended Posts

Hallo zusammen,

 

Ich nutzt zur Zeit ein PTC Bricklet an einem Master Brick. Das Auslesen über BrickViewer funktioniert einwandfrei.

 

Nun habe ich das Beispiel C++ Programm in VisualStudio geladen. Das Auslesen der Temperatur funktioniert einwandfrei. Nun möchte ich die Funktion ptc_get_resistance nutzen. Diese erzeugt aber folgenden Fehler:

 

Run-Time Check Failure #2 - Stack around the variable 'response' was corrupted.

 

Um Herauszufinden, wo das Problem liegen könnte, bin ich im Debug Modus den Code durchgegangen. Der Fehler erscheint, wenn die Funktion verlassen wird.

 

Meiner Internetrecherche zufolge kann das an zu voll gestopften Arrays liegen, unsachgemäßem Löschen von Variablen oder versehentliches verschieben von Pointern. Aber es handelt sich hier um die Datei bricklet_ptc.cpp. Diese habe ich nicht verändert und finde den Fehler nicht. Ist dieser schon bei jemand anderem aufgetaucht?

 

Im Folgenden einmal meine Änderungen zum Beispielcode (example_simple.c) Alles andere ist wie es auf der Homepage zur Verfügung gestellt wird:

 

// Get current resistance
uint16_t resistance;
if (ptc_get_resistance(&ptc, &resistance) < 0) {
	fprintf(stderr, "Could not get temperature, probably timeout\n");
	return 1;
}

resistance = (resistance * 3900) / 32768;
printf("Temperature: %f Ohm\n", resistance);

 

Link zu diesem Kommentar
Share on other sites

Das Problem ist reproduzierbar, das ist schon mal gut. Danke für die schnelle Antwort. Von dem Compiler habe ich leider auch gar keine Ahnung. Aus dem Grund bin ich jetzt erstmal auf C# umgestiegen und da funktioniert alles wie es soll. Eine Lösung wäre aber natürlich für andere Nutzer auch interessant. Wenn ich zwischenzeitlich eine Lösung finde werde ich natürlich auch ein Update schreiben

Link zu diesem Kommentar
Share on other sites

Okay, habe das Problem gefunden. Es betrifft alle Bindings, nicht nur C/C++. Aber nicht in allen Bindings wird das Problem auch sichtbar.

 

Das Problem ist, dass die Bindings erwarten, dass die Resistance als uint16 übertragen wird, das PTC Bricklet diese aber als int32 überträgt. Dadurch ist der Empfangsbuffer (response) in den C/C++ Bindings für diese Antwort 2 Byte zu kurz. Das verursacht die Stackcorruption die Visual Studio meldet.

 

Das Problem wird mit der nächsten Version der Bindings behoben werden.

Link zu diesem Kommentar
Share on other sites

  • 7 months later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Reply to this topic...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...