Hallo bei einigen (selbstkompilierten) Programmen komme ich bisher trotz ausgiebigen 'Kompilerfeilens' nie über den Punkt hinweg dass das Programm wie gedacht startet, dann aber mittendrin (und immer derselben Stelle) mit der Angabe 'Bus Error' auf der Kommandozeile den Geist aufgibt. Als einzige Zuordnung von Gemeinsamkeiten dieses 'Fehlers' ist mir bisher möglich zu erkennen das alle so abbrechende Programme sich mit 120 bis 300 KB Codegrösse oberhalb irgendwo in anderen Systemen schon mal erlebter 64kB 'Grenze' bewegen. In Linux sollte das jedoch eigentlich ja egal sein. Zweite Gemeinsamkeit ist ein jeweils vorhandener Kommunikationsablauf. Sei es seriell, USB oder LAN. Doch auch bei Versuchen mit deaktivierter Kommunikationsverbindung änderte sich nichts - womit ich nun meine das meine erste Vermutung dieser 'Bus Error' resultiere alleinig aus evtl. externer BUS-Anbindung der Schnittstellenbausteine nicht zutreffend scheint. Was kann als Ursache dieses Abbruchs angenommen werden und wie lassen sich solche Abbrüche verhindern ? Peter
Moin, ein "Bus Error" ist meist (ob es noch andere Fälle gibt weiß ich gerade nicht) ein alignment Problem. Ich vermute du verwendest für deine Kommunikation eine struct bei der du dem Compiler des Alignment verbietest, denn ansonsten sollte dieser das Problem automatisch beheben (oder er hat einen Bug ;)). Versuchs evtl. auch mal mit -Wall, ich weiß nicht ob er das zumindest feststellt und dir mitteilt. Die Sache ist dass bei i386 der Zugriff auf unaligned Daten nur langsamer wird, der Prozessor dies aber generell unterstützt. Bei anderen Architekturen ist dies nicht vorgesehen, wenn man es doch versucht gibts einen Bus Error. Greets Sebastian.
Hallo Sebastian, danke - das Alignment ist so wie von Dir beschrieben damit sehr naheliegend, bzw. wird der Grund sein. Ich probierte es gestern mit einer Linux SPS-Bibliothek (listnodave). Genau dort war im Abbruchspunkt (in Bezug auf -Wall : nach fehlerfreier Kompilierung) zu erkennen dass es anscheinend genau an den Stellen abbrach wo der Sourcecode zwecks Anpassung an das ARM(-noAlignment) diesbezügliche Preprozessordirectiven bereits beeinhaltete. Demnach werde ich da nun mal suchen; dem ARM Makeup (mit dem selbe Bibliothek bei mir im ARM läuft) wurde dabei früher an der Stelle als Linkerflag -malignment_irgendwas... hinzugefügt. Wo da was genau bewirkt wurde weiss ich so nicht mehr, ist schon lange her und mittlerweile im Source berücksichtigt. In den älteren Versionen war das aber noch von hand zu justieren und ist somit reversibel. Die werde ich gleich versuchen neu zu beleben, vielleicht finde ichs damit raus. Somit lege ich da mal los, vielen Dank Peter
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.