2009-08-31 8 views
3

Je reçois donc une exception "prefetch abort" sur notre système arm9. Ce système n'a pas de MMU, donc y a-t-il un problème logiciel? Tous les registres me semblent corrects, et le code semble correct (non corrompu) du point de vue de JTAG.ARM9 Prefetch Abort Exception peut-il être un problème logiciel?

À l'heure actuelle, je pense que c'est une sorte de problème de matériel (bien que je déteste le dire - le matériel a été très bien jusqu'à présent).

Répondre

5

Quelle est exactement l'exception que vous obtenez?

La dernière fois que cela m'est arrivé, je suis allé dans la mauvaise crique pendant un moment parce que je ne réalisais pas un ARM "prefetch abort" signifiait l'instruction prefetch, pas la lecture de données, et je jouais avec les données instructions de prélecture. Cela signifie simplement que le programme a tenté de sauter à un emplacement de mémoire qui n'existe pas. (. Le problème réel est que j'avais mal orthographié "aller 81000000" comme "aller 81000" dans le bootloader)

Voir aussi:

3

Quelle est l'adresse sur laquelle l'abandon anticipé est déclenché. Cela peut arriver parce que le compteur de programme (PC ou R15) est réglé sur une adresse qui n'est pas valide sur votre microcontrôleur (ceci peut arriver même si vous n'utilisez pas de MMU - l'espace d'adressage du microcontrôleur a probablement des trous) cela déclenchera l'abandon de la prélecture). Cela peut également se produire si vous essayez de pré-lire une adresse qui ne serait pas correctement alignée, mais je pense que cela dépend de l'implémentation du microcontrôleur (le ARM ARM indique le comportement comme 'UPREDICTABLE').

La CPU est-elle réellement en mode Abort? S'il exécute le gestionnaire Prefetch mais n'est pas en mode d'abandon, cela signifierait que du code se ramifie dans le vecteur d'annulation de prélecture, généralement via l'adresse 0x0000000c, mais les contrôleurs permettent souvent de remapper les adresses vectorielles.

Questions connexes