Comment puis-je exécuter une fonction à partir de la RAM sur un Cortex-M3 (STM32)?

Je suis en train d'exécuter une fonction à partir de la RAM sur un processeur Cortex-M3 (STM32). La fonction efface et réécrit le flash interne, donc j'ai vraiment besoin d'être dans la RAM, mais comment dois-je faire?

Ce que j'ai essayé est présente: Copie de la fonction à un tableau d'octets dans la mémoire RAM à l'aide de memcpy (en vérifiant qu'il est aligné correctement), la définition d'une fonction pointeur sur le tableau d'octets en une, puis l'appel de la fonction(pointeur).

Cela fonctionne très bien pour peut-être 10 instructions (je peux suivre l'exécution avec le débogueur) mais puis-je obtenir un bus d'erreur et le processeur de la réinitialisation. Le buss erreur se produit lors du deuxième passage dans une boucle de sorte que le code doit être fine (comme il fonctionne de la première passe). Je pense que le plus rapide l'accès à la RAM fou jusqu'au bus de timing, d'une certaine façon...

De toute façon est-il une bonne façon de le faire? Comment un scatter fichier ressemble qui place une fonction dans la RAM automatiquement (je suis en utilisant Keil uVision pour Cortex-M3)?

Edit: Plus d'infos:
Suite d'outils: RealView MDK-ARM V 4.10
Compilateur: Armcc v4.0.0.728
Assembleur: Armasm v4.0.0.728
Linker: ArmLink v4.0.0.728
Processeur: STM32F103ZE

La IMPRECISERR bit est défini dans le bus, faute de s'inscrire lors de la réinitialisation se produit.

Ummm je pense que vous devriez plus ou moins après que le fabricant du forum que vous êtes à l'aide d'un matériel spécifique, néanmoins, pouvez-vous donner plus de détails, quel compilateur utilisez-vous, comment êtes-vous de débogage, les exemples de code, peut-être que personne qui a connaissance pourrait être en mesure de répondre à cette question, d'autres que cela....
Mais je vous aime les gars plus!

OriginalL'auteur c0m4 | 2010-06-15