Jump to content

Array out of bounds in bricklib / spi_stack_slave_is_selected(void)


Recommended Posts

Hallo Admins,

 

ich habe leider immernoch das Problem, dass mein Stack ab und zu hängt (d.h. für mehrere Sekunden nicht reagiert, Client bekommt Timeout), dann wieder reagiert (auf einmal werden sogar die Servo-Befehle nachgeholt obwohl der Client schon disconnected ist und die Servos werden "hektisch") und sehr sporadisch bootet der Stack dann auch von alleine neu ...

 

Darum habe ich Teile des Codes mit "cppcheck" durchforstet.

CppCheck wird in der Bricklib fündig:

 

[com/spi/spi_stack/spi_stack_slave.c:166]: (error) Array 'spi_slave_pins[2]' accessed at index 3, which is out of bounds

 

Die Meldung sieht korrekt aus: das Array hat nur 2 Elemente, der Index ist aber 3 => 2 Elemente übers Ziel hinaus.

Ich habe nur Master-Brick, Servo-Brick, Ambilight und Quad-Relay damit geprüft und das war die einzige Meldung. Die Funktion wird in diesen Modulen jedoch nicht aufgerufen => vermutlich kein Problem.

 

Nur als Info, vielleicht schaut Ihr Euch das mal an.

 

Ich versuche weiter, mein Problem mit einem Testfall zu reproduzieren  :-[

Link to comment
Share on other sites

Das ist in der Tat ein Überbleibsel aus dem Protokoll V1 Code, kann also gelöscht werden. Probleme kann das nicht machen, die Funktion wird nirgends aufgerufen :).

 

Wieviele Nachrichten sendest du denn an den RS485 Client? Vielleicht stauen sich die Nachrichten einfach im Brick Daemon auf?

Link to comment
Share on other sites

Die ganze Kommunikation findet nur über die WIFI-Extension statt, das können ca. 50-100 Messages / Sekunde sein. Und der Fehler ist leider sehr sporadisch: ich hab schon mal nach nur 300 Servo-Commands plus weniger Bricklet-Status-Abfragen den Stack zum Absturz gebracht (reboot), dann bekomme ich auch wieder weit über 15.000 Commands durch, ohne Probleme ... Der Effekt ist immernoch ähnlich wie der aus diesem Thread http://www.tinkerunity.org/forum/index.php/topic,1339.msg8469.html#msg8469.

 

Eine andere evtl. nützliche Meldung ist noch das hier:

[drivers/usb/USBDDriver.c:550]: (warning) memset() called to fill 0 bytes of 'pInterfaces'.

 

Das dürfte aber auch nichts mit meinem Problem zu tun haben.

Ich habe das Gefühlt, dass im WIFI ein noch Overflow bei hoher Last passiert (wegen den Stack-Reboot). Ich werde den Test-Stack über USB anschließen und dann länger so testen. Wenn dann kein Fehler mehr auftritt, könnte das noch mehr in Richtung WIFI deuten. Viel helfen wird diese Erkenntnis für die Fehlerbehebung leider nicht ...

Link to comment
Share on other sites

Join the conversation

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

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...