2009-08-21 7 views
1

Je travaille sur un projet, langage de programmation C, pour développer une application qui peut être portée sur un certain nombre de plates-formes de microcontrôleurs, comme le microcontrôleur ARM \ Freescale \ PIC. Je développe cette application sur Linux maintenant et ensuite je devrai le porter sur les plateformes mentionnées ci-dessus.Temps d'exécution Estimation de la taille de la mémoire des données et codes

Je voudrais savoir, existe-t-il des outils (open source de préférence), à ​​l'aide desquels je peux déterminer le "code" et l'empreinte mémoire \ taille de données, avant de le porter sur la nouvelle plate-forme.

J'ai cherché sur "Google" pour cela et je n'ai rien trouvé jusqu'à présent, pas même pour Linux.

toute aide de votre part m'aidera grandement.

-Vikas

Répondre

0

Rien ne peut vous dire combien la mémoire de votre application aura besoin. Vous devrez faire quelques hypothèses sur la façon dont il sera utilisé et essayer votre application dans différents scénarios. Pendant le test, vous pouvez surveiller les statistiques d'utilisation de la mémoire dans le système de fichiers/proc ou utiliser la commande ps pour faire la même chose.

0

La taille de votre segment de texte/code dépend du niveau d'optimisation et du back-end. GCC peut être configuré pour générer cette information pour vous.

L'exécution est un peu plus difficile comme l'a dit Jeremy. Outre sa suggestion, vous pouvez également essayer gcov et/ou gprof afin d'analyser votre programme dans le contexte de vos scénarios d'utilisation les plus courants. Ce type d'instrumentation est axé sur la complexité plutôt que sur la taille, mais au moins vous saurez mieux où concentrer votre analyse de la mémoire.

1

Pour un petit programme, une grande partie de la taille est déterminée par les bibliothèques/DLL dont dépend votre programme. Puisque vous faites référence à ARM/Freescale/Pic, je suppose que vous avez affaire à des applications compactes et embarquées où la taille des données est mesurée en octets plutôt qu'en MBytes.

Pour votre propre code, les différences de taille sera déterminée par:

  • taille des mots (programmes 32bit ont tendance à être un peu plus grand/plus de données que 8 bits)
  • architecture (par exemple de code Intel par rapport à ARM , freescale, PIC)

Dans votre cas, je pense que PIC est la partie la plus critique (pour les contraintes RAM/ROM). Donc, surveiller de manière adéquate la taille de la compilation PIC pendant le développement du PC est suffisant. La sortie de l'éditeur de liens contiendra des informations sur la taille TEXT/DATA/BSS, que vous pouvez surveiller.

Je travaille généralement sur des systèmes embarqués. Dans mon travail, une grande partie de la taille des données est connue au moment de la conception (c'est-à-dire le nombre de tampons * la taille du tampon). Pour la taille du code, j'ai des règles de base sur différentes architectures qui m'aident à faire une vérification d'intégrité au moment du design. Par exemple, je définis une suite de bibliothèques de codes existants, pour lesquelles je connais les performances et les numéros de tailles pour chaque architecture. De cette façon, je sais quel genre de ratio je peux attendre au moment du design. Si le programme PC a 1 Mo de données, il ne rentre pas dans un PIC 8 bits .....

0

Votre compilateur peut/va générer un fichier de carte. Le fichier de carte aura généralement un code et une taille de données (ou plages de localisation). Il peut y avoir des différences entre différents compilateurs pour les différentes cibles.Et comme indiqué dans d'autres publications ici, vos dépendances sur les bibliothèques fournies auront également un impact sur l'utilisation globale de la mémoire.

Questions connexes