Das hört sich danach an, als ob der Prozessor auf illegalen Code stösst.
Läuft dein Programm im RAM oder im ROM?
Eine Ursache bei beiden Codepositionen kann sein, dass du einen
Stacküberlauf hast und Rücksprungadressen von Unterprogrammaufrufen
zerschossen werden. Reicht dein Stack für die Programmgrösse aus?
Ein Überschreiben von Speicherbereichen (Arraygrenzen?, Fehlende
'\0' bei Stringoperationen,...) kann auch den Stack demolieren.
Bei Code im RAM kann auch der Programmcode durch missweisende Pointer
beschädigt werden.
Eher exotische Fehlerquellen sind bei variablen Argumentlisten zu
erwarten.
Wenn du so schön im Debugger landest, kannst du dir bestimmt die
Stackframes der letzten paar Aufrufe anzeigen lassen. Gibt es
Gemeinsamkeiten, woher das Programm dann kommt?