Architecture ARM9. Langage de programmation C.Quelle est la solution de contournement pour l'exception d'accès mémoire non alignée sur ARM9 utilisant C?
Nous avons une pile tierce et l'un des appels prend un pointeur (pBuffer
) vers un emplacement de mémoire. Dans la pile, ils sont libres de se déplacer autour du pointeur et d'y accéder comme ils le souhaitent. Malheureusement, ils compensent le passé pointeur et passé dans une autre fonction qui a essayé de le faire à partir d'un emplacement de mémoire impair/unalighed
((uint16 *)pBuffer)[index] = value;
où value
est de type uint16
et index
est bornes cochée et les index pBuffer
. Cela provoque une exception d'accès mémoire non alignée. pBuffer
indique char *
sur le tas. Comme mentionné précédemment, même si nous pouvons jeter un coup d'œil dans la pile tierce, nous ne pouvons pas mettre à jour le code officiellement. Nous avisons donc le fournisseur et ils fournissent la mise à jour dans la prochaine version.
Je veux comprendre s'il y a un travail pour cela. Comment puis-je effectuer l'affectation ci-dessus sans violer l'accès non aligné? Quelle est la meilleure approche pour résoudre ces problèmes?
Merci MSalters. Ceci est en fait le cas 3, donc ne peut pas faire beaucoup dans l'appelant. La routine réelle qui effectue ces opérations nous est fournie. Ils devront donc se mettre à jour, mais nous pouvons mettre à jour de manière non officielle et indiquer au fournisseur où le problème doit être résolu et fournir une pile mise à jour. – dubnde