Je me demandais s'il existe un moyen de charger un fichier binaire externe comme une variable en C à travers un fichier incluant ou un fichier d'en-tête ou quelque chose de similaire. P>
Par exemple, dans un projet, je travaille actuellement sur je travaille avec un système intégré comportant un affichage graphique qui fera du texte et des graphiques mineurs (cases, lignes, etc.) à l'aide de données ASCII et de commandes. Mais cela affichera également des bitmaps monochrome. Donc, j'ai une série d'affichages statiques que j'utilise pour une interface utilisateur et quelques bitmaps pour les écrans Splash. P>
Maintenant la raison pour laquelle je mentionne qu'il s'agit d'un système intégré est qu'il n'ya pas de système de fichiers pour charger des données de, uniquement la mémoire de la RAM et de la mémoire, de sorte que toutes les données "pré-fabuleuses" ou tables que je souhaite utiliser doivent être utilisées mais chargées Compilez l'heure via un fichier source ou via un fichier d'objet à l'aide de la liaison. Malheureusement, l'IDE ne fournit aucun moyen de charger un binaire, sous quelque forme que ce soit dans la mémoire de programme pour une utilisation en tant que cache de données de cette manière de manière facilement reconnaissable. P>
Si vous devez faire ce que j'ai déjà à contourner cela, (utilisez un éditeur hexagonal pour lire le binaire en tant qu'hex codé ASCII et copier et coller les données brutes dans un fichier d'en-tête sous forme de variable), existe-t-il un moyen de "Lien" à un fichier ou "Inclure" un fichier pouvant être chargé en tant que variable const à la compilation? P>
Le système que je travaille avec est MPLAB X pour la série de processeurs Microchip et le compilateur est GNC. Je cherche principalement à savoir s'il existe un moyen de le faire via une commande ou une fonction C avant d'essayer de rechercher une manière spécifiquement via leur logiciel compilateur / liaison spécifique. P>
3 Réponses :
Le moyen habituel de le faire sur des systèmes de type UNIX utilise et un pour Mac OS X, qui est un peu plus complexe:
compilez un fichier binaire pour lier OSX P>
L'idée est d'avoir la liaison à créer un fichier d'objet avec des noms de symboles connus qui pointent sur le début et la fin d'un blob binaire qu'il copie dans le fichier d'objet résultant. Vous liez ensuite ce fichier d'objet dans votre application et référennent la blob via Je suppose que vous savez que vous savez comment relier des objets sur votre système. La question restante est donc de savoir si votre linker prend en charge quelque chose comme ld -r binaire code>. Voici un tutoriel pour Linux:
http://www.burtonini.com/ Blog / Ordinateurs / LD-BLOBS-2007-07-13-15-50 P>
extern Char * code> des pointeurs ou donc. P>
-r binaire code>. p>.
En fait, c'était la prochaine étape de cela si c ne l'avait pas fourni de manière native via des fichiers source. Pour cela, je vais me diriger vers les forums Microchip et me demander de voir si quelqu'un a fait quelque chose comme ça. Étant donné que le compilateur et la liaison de microchip sont spécifiquement destinés à leurs systèmes embarqués non destinés à tout système d'exploitation et ne sont que «basés sur» sur GNC, je figure qu'il ne serait pas approprié de se développer dans des scripts de liaison et des options de ligne de commande ici.
Non, vous ne pouvez pas faire cela directement. Une solution consiste à convertir vos fichiers binaires en code source C et à inclure ces pièces dans votre projet. La conversion peut être effectuée par un programme simple écrit par vous strong> ou par un programme tiers. Par exemple: P> binaray1.c strong> ( généré automatiquement) p> binaray2.c strong> (généré automatiquement) p> Somesourcefile.c strong> p>
Merci pour l'information. C'est exactement ce que j'avais déjà fait, bien que je l'ai fait manuellement à l'aide d'un éditeur hexagonal et du compilateur IDE.
Bien sûr, vous pourriez inventer votre propre format, mais avant de le faire: jetez un coup d'œil sur le XPM bitmap Format qui est exactement destiné à cet objectif: intégrer des pixmaps dans le code source C. P>
Essayez
XXD -I CODE>
Le GCC ne fournit pas cette fonctionnalité, mais la plupart des assembleurs, y compris le gaz, fournissent une directive ".incbin" à cette fin. Ceci est généralement plus pratique d'intégrer à vos systèmes de construction IDE typiques par rapport à des convertisseurs séparés sur les fichiers de données C ou d'objet.
La méthode que j'ai utilisée active l'écran / logo / modifications de données après la compilation (au programmeur) et le stocke dans l'espace de programme. Je l'ai utilisé pour les coefficients d'étalonnage passant de l'unité à calculer et était fiable. Si vous êtes intéressé, je vais faire une réponse, mais un autre jour.