Bonjour à tous, j'ai une exception HardFault sur mon cortex m1 plusieurs fois au même endroit. J'ai mise en œuvre HardFault et je peux lire les registres empilés:cortex m1 faute matérielle à ldrsh
stacked_r0 unsigned int 0x4 (Hex)
stacked_r1 unsigned int 0x60905f98 (Hex)
stacked_r2 unsigned int 0x0 (Hex)
stacked_r3 unsigned int 0x6092304b (Hex)
stacked_r12 unsigned int 0x60922ff8 (Hex)
stacked_lr unsigned int 0x60810be3 (Hex)
stacked_pc unsigned int 0x60810ce2 (Hex)
stacked_psr unsigned int 0x41000000 (Hex)
l'opération à PC empilés est: 60810ce2: ldrsh, [r3 r2, r2]
pourquoi il provoque la faute?
UPD j'ai réarrangé les variables et pour l'instant, il est tombé en panne dans memcpy appelé à partir du code FreeRTOS
stacked_r0 unsigned int 0x6090c858 (Hex)
stacked_r1 unsigned int 0x6091f8b4 (Hex)
stacked_r2 non signé int 0x3c (hex)
stacked_r3 unsigned int 0x6091f8a4 (hex)
stacked_r12 unsigned int port 0x280 (hex) stacked_lr unsigned int 0x60827f89 (hex)
stacked_pc unsigned int 0x6082b0dc (hex)
stacked_psr unsigned int 0x1000000 (Hex)
6082b0ba: bne.n 0x6082b120
6082b0bc: ajoute r5, R 2, # 0
6082b0be: ajoute r4, r0, # 0
6082b0c0: r5 des sous-marins, n ° 16
6082b0c2: ESRLS r5, r5, # 4
6082b0c4: ajoute r5, # 1
6082b0c6: lsls r5, r5, # 4
6082b0c8: ajoute r1, r1, r5
6082b0ca: LDR r6, [r3, # 0]
6082b0cc: str r6, [r4, # 0]
6082b0ce: LDR r6, [r3 , # 4]
6082b0d0: str r6, [r4, # 4]
6082b0d2: LDR r6, [r3, # 8]
6082b0d4: str r6, [r4, # 8]
6082b0d6: LDR r6, [r3, # 12]
6082b0d8: ajoute r3, # 16
6082b0da: str r6, [r4, # 12]
6082b0dc: permet d'ajouter r4, # 16
qui est un accès non aligné. –
D'accord, mais pourquoi? r3 points à la pile – qmor
pile est ram, qu'est-ce que la pile doit faire avec elle les bits inférieurs sont 0xB ou 1011 pour ldrsh ou ldrh le bit inférieur doit être un zéro pour ldr, les deux inférieurs doivent être des zéros pour ldrd le bas trois doivent être des zéros. vous essayez de faire un accès demi-mot non aligné et le processeur vous a empêché de le faire. –