Forum: Mikrocontroller und Digitale Elektronik ATGNW100 - Programmabbruch mit 'Bus Error'


von PLV2 (Gast)


Lesenswert?

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

von Sebastian C. (basti79)


Lesenswert?

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.

von PLV2 (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.