Je logiciel découpée en deux: Bootloader (sans RTX), l'image de l'application avec RTX. Mais le bootloader n'a pas pu charger l'image de l'application avec RTX. Les paramètres Flash sont:IAP Bootloader n'a pas pu charger l'image d'application RTX
-------------------------------------------------------------------- start address size IROM 1: 0x08000000 0x2800 - Bootloader (without RTX) IROM 2: 0x08002800 0xD000 - Application Image (with RTX)
J'ai essai 3 façons: (1) Utilisez une autre application sans RTX. Le chargeur de démarrage peut charger l'application avec succès.
(2) Changer l'application avec le réglage projet RTX IROM. Je change l'adresse de début IROM du projet d'application de 0x08002800 à 0x08000000. Et je télécharge l'image de l'application dans le flash à partir de l'adresse 0x08000000. L'image peut fonctionner avec succès à partir de 0x08000000.
(3) L'image de l'application IROM commencer paramètre d'adresse est 0x08002800. Après avoir téléchargé le bootloader et l'image de l'application dans Flash, je débogue le projet de l'application dans Keil, étape par étape. J'ai trouvé qu'il y a une erreur "osTimerthread stack overflow". Ensuite, la pile de threads principale est également débordée. J'ai essayé d'augmenter la taille de la pile, mais cela ne fonctionne pas. J'ai trouvé que l'application démarre dans la commutation du noyau RTX. Tous les threads sont en attente et ne sont pas en cours d'exécution.
Ps, quand je suis dans le débogage Keil, élément d'essai (2) ont également empiler des erreurs de débordement lors de l'initialisation du noyau. L'article (2) fonctionne bien jusqu'à maintenant. Donc, je viens de mettre toute l'information nécessaire ici.
C'est l'image de débogage pour le point (3).
Merci du tout. ** (1) ** Mon chargeur de démarrage a configuré l'horloge système. Parce que c'est le premier travail à faire dans le démarrage. Et les startups en application le réinitialisent aussi. ** (2) ** Et comme dans mon post, le noyau os RTX est en cours d'exécution, mais il est dans une boucle sans fin des tâches de commutation. Toutes les tâches étaient dans les états "READY", mais le noyau OS ne pouvait pas mettre l'un d'entre eux dans l'état "RUNNING". Il n'y avait donc aucune chance que les threads principal et utilisateur soient appelés. –