Flux de code de Démarrage dans un système embarqué , le concept de chargeur de démarrage?
Je suis en train de travailler avec un intégré à conseil d'administration , mais je ne sais pas le flux de la start-up de code(C/assemblée) de la même.
Pouvons-nous discuter les modules généraux/les étapes suivies par le démarrage de l'action dans le cas d'un système embarqué.
Juste un aperçu de haut niveau(algorithmique) est suffisant.Tous les exemples sont les bienvenus.
/Kanu__
La définition de Plate-forme Indépendant"...
Quelle est votre application censé être et ce qu'est votre plate-forme cible, je pourrais être en mesure de suggérer un certain nombre de bibliothèques ou de fournir un couple de projets d'exemples.
Mon objectif de la plateforme est de Freescale MSC 8144(SC 3400 X 4 cœurs) et l'application est certains relatifs au multimédia
Enea fait un bon logiciel pour ce type de processeur, ils ont un RTOS pour elle, trop. Pas sûr que sur le coût. Avec la difficulté d'applications dans ce domaine, je pense qu'il pourrait être difficile pour les non-trivial logiciel sans un OS. Pas impossible, mais difficile.
Quelle est votre application censé être et ce qu'est votre plate-forme cible, je pourrais être en mesure de suggérer un certain nombre de bibliothèques ou de fournir un couple de projets d'exemples.
Mon objectif de la plateforme est de Freescale MSC 8144(SC 3400 X 4 cœurs) et l'application est certains relatifs au multimédia
Enea fait un bon logiciel pour ce type de processeur, ils ont un RTOS pour elle, trop. Pas sûr que sur le coût. Avec la difficulté d'applications dans ce domaine, je pense qu'il pourrait être difficile pour les non-trivial logiciel sans un OS. Pas impossible, mais difficile.
OriginalL'auteur Renjith G | 2010-08-03
Vous devez vous connecter pour publier un commentaire.
.bss
est le nom de la non initialisée (ou zéro) de la mémoire globale de la région. Les variables globales, les tableaux, etc qui n'ont pas d'initialisation de la valeur (au-delà de 0) sont situés ici. La pratique générale sur un microcontrôleur est-à-boucle-dessus de cette région et de définir tous les octets à 0 au démarrage.int thisGlobal = 5;
, la valeur dethisGlobal
doivent être copiés à partir d'un persistants (généralement après le programme dans la mémoire flash, comme généré par votre éditeur de liens) pour la RAM. Cela s'applique à des valeurs statiques, et des valeurs statiques dans les fonctions. Les valeurs qui sont laissés dans le vague ne sont pas copiés, mais plutôt effacé dans le cadre de l'étape 2.main()
Partir de là, votre code est exécuté. Généralement, le CPU est à gauche dans une interrompt-off de l'état (dépendants de la plateforme).
Je mettrais paramètre le pointeur de pile, tout d'abord, ARM Cortex-M même les magasins de la pile initiale du pointeur à côté de l'vecteur de reset. Avec une pile, vous pouvez commencer la programmation en C. Ensuite, il y a un conseil spécifique à la sous-routine (en supposant que la pile est dans la RAM interne) pour l'initialisation du matériel tels que la configuration de l'accès à la mémoire externe et mise en place d'un système plus rapide de l'horloge. De nombreux microcontrôleurs démarrage très lent de faible puissance de l'horloge, l'horloge plus rapide puis accélère l'initialisation de la .les données et les .sev segments.
OriginalL'auteur Yann Ramin
Assez ouverts à la question, mais voici quelques choses que j'ai ramassé.
Pour super simple processeurs, il n'y a pas de véritable code de démarrage. Le processeur obtient puissance et commence alors l'exécution de la première instruction dans sa mémoire: pas de muss pas de chichi.
Un peu plus haut, nous avons mcu est comme avr et du pic. Ceux-ci ont très peu en début de code. La seule chose qui doit vraiment être fait est de mettre en place le interruption de sauter de la table avec des adresses appropriées. Après le fait que c'est le code de l'application (un programme) pour faire sa chose. La bonne nouvelle, c'est que vous en tant que le développeur ne disposent généralement pas à vous soucier de ces choses: c'est ce libc est pour.
Après que nous avons des choses comme un simple bras de puces; plus compliqué que l'avr et du pic, mais encore assez simple. Ceux-ci ont également pour l'installation de l'interruption de la table, ainsi que assurez-vous que l'horloge est correctement réglée, et de démarrer tout besoin de puce composants de base (interruptions, etc.). Jetez un oeil à ce fichier pdf à partir de Atmel, il donne des détails sur la procédure de démarrage pour un BRAS 7 de la puce.
Plus haut dans la chaîne alimentaire, nous avons plein sur Pc (x86, amd64, etc.). Le code de démarrage pour ces est vraiment le BIOS, qui sont horriblement compliqué.
Je pense que beaucoup de "simple" Cpu (processeur 8086 au moins) fait exécuter l'une des dernières instructions dans la mémoire, généralement un saut de commande à l'endroit où vous avez votre début de code (ce qui theatrus l'a décrit dans sa réponse). Quand j'entends intégré, je pense immédiatement uController, non pas que c'est la seule possibilité, c'est juste dominante dans ce domaine.
et @marr75 Le problème essentiel de cette question est de savoir si c'est poser des questions sur le matériel de démarrage " ou "le code que vous écrivez qui s'exécute d'abord". J'ai décidé d'aller pour la dernière, car il est plus programmeur orienté vs compilateur auteur/architecte orienté.
Cela signifie que , si j'ai compiler un Petit programme en C pour helloword, l'éditeur de liens/compilateur va ajouter le début de code avec ma petite demande , pour effectuer le démarrage de l'action après le téléchargement de mon application? Pouvez-vous citer le général initialisations(UART/Horloge etc..) qui avaient lieu dans le cadre du démarrage de l'action? Aussi pouvez-vous peu spécifique sur le vecteur d'interruption d'initialisation comme préoccupation générale?
1. Oui le linker ajoute un tas de code. (crt.o en général) 2. D'un faible niveau de l'environnement, de l'appareil programmeur initialiser les périphériques (timers/usart/watchdog/CAN/USB/etc.) 3. A ajouté un tas de liens de vérifier em out.
OriginalL'auteur zdav
La grande question est de savoir si ou non de votre système embarqué sera exécutant un système d'exploitation. En général, vous aurez voulez exécuter votre système d'exploitation, pour le démarrage d'une certaine forme de l'inversion de contrôle (par exemple, je me souviens d'un projet d'école a été un telnet qui serait à l'écoute pour les demandes à l'aide de RL-BRAS ou open source pile tcp/ip et d'avoir ensuite des rappels qu'il allait exécuter lorsque les connexions ont été réalisés et des données a été reçu), ou entrez votre propre boucle de contrôle (peut-être l'affichage d'un menu en boucle jusqu'à ce qu'une touche a été enfoncée).
OriginalL'auteur marr75
Fonctions de Démarrage de Code pour C/C++
OriginalL'auteur Rishad
Où est le "BOOT LOADER" placé alors? Il doit être placé avant le début de code de droit?
Selon ma compréhension, à partir du vecteur de reset le contrôle est le chargeur de démarrage. Il y a le code attend pour une petite période de temps au cours de laquelle il s'attend à ce que les données soient flashé/téléchargé vers le contrôleur/processeur. S'il ne détecte pas de données, alors le contrôle est transféré à l'étape suivante, comme spécifié par theatrus. Mais mon doute est de savoir si le CHARGEUR de DÉMARRAGE de code peut être ré-écrit. Par exemple: un UART bootloader être changé pour un ETHERNET/CAN bootloader ou est-ce que les données transmises à l'aide de tout protocole sont convertis à l'UART à l'aide d'une passerelle, puis flashé.
OriginalL'auteur Jijo