IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

parcourir un tableau drolement declaré


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Mars 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 3
    Points : 1
    Points
    1
    Par défaut parcourir un tableau drolement declaré
    Bonjour,
    j aimerais parcourir le tableau ci dessous mais je m enmele les pinceau
    car il n est pas declare simplement comme tab [10]={1,1,2,......}.
    Je vois bien que je dois l appeller un peux comme une fonction mais c est une structure!!!
    comment lire la case qui m interresse genre :

    lire=tab[3] ;

    ce tableau est en fait une bitmap de 480*272 convertie en hexa sur 16 bits avec le graphic tool de microchip.

    MERCI


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    extern char L27207[] __attribute__((space(prog),aligned(2)));
     
    const struct{short mem; char __prog__* ptr;}   rouge  = {0, L27207};
     
    asm(".section *,code");
    asm(".global _L27207");
    asm(".align 2");
    asm("_L27207:");
     
    asm(".byte 1,2,3,5,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,,0x4F,0x4F");
    asm(".byte 0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,");

  2. #2
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Ici tu as un tableau de char appelé L27207. Le remplissage du tableau commence à la ligne asm("L27207:"); jusqu'à la dernière ligne (".byte ...");. Donc, c'est exactement comme si on avait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    extern char L27207[] /*__attribute__(...) */;
     
    char L27207[] = {
        1,2,3,5,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,,0x4F,0x4F,
        0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,0x4F,
        ...
    };

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Mars 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Re,


    merci pour ta reponse qui me conforte dans le sens ou :

    j avais essayé CLK = L27207 [2] ; mais ca passe pas a la moulinette

    donc je comprend un peu hi mais pas assez encore pour y tordre le coup

    le compilateur c est C30 de microchip alors peu etre il y a des specificitées.

    lorsque je genere le code a partir de la bitmap le seul truc que je trouve qui semble appeller ce tableau est cette ligne

    OBJ_PICTURE_1_2 = PictCreate(OBJ_PICTURE_1_2,1,0,320,240,16388,1,(void*)&rouge,defscheme);

    il y a le mot rouge qui est le nom de la bitmap.es ce qu il balairais pas le tableau a traver la structure rouge, via un pointeur?

    le but de la manip c est d utiliser un ecran de psp pour afficher du texte et des bitmaps.
    j aurais bien utilise une declaration classique de tableau, mais le logiciel me genere ce truc et ca fait 3000 lignes environ pour chaque images alors je me vois pas enlever a la main les 3000 asm(".byte . c est pour cela que j aimerai l utiliser tel que.

    etant un peu leger en pointeur , des que ca sort du scolaire ben je cale!!

    allé j y retourne
    j espere qu on va trouver

  4. #4
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Poste un code minimal, mais complet, qui expose bien ton problème parce que j'ai du mal à comprendre.

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Mars 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    ben ya pas plus j essais juste d acceder aux données du tableau .la ligne que j ai posté au post precedent vient d un des fichier que leur logiciel genere pour creer l image . c est une vrai usine a gaz leur truc et j ai reperé d autre ligne apart celle du post precedent succeptible de rentrer dans ce fichu tableau.
    Apparament c est le fait qu il y ai l assembleur au milieu qui fou la zone car
    ce tableau par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    extern const char L3535[] __attribute__((aligned(2)));
    //FONT NAME CAN BE CHANGED HERE.
    const struct{short mem; const char* ptr;} gentium_8_200_0_0_0_0 = {0,L3535};
    const char L3535[] __attribute__((aligned(2))) = {
    0x00,0x00,0x20,0x00,0x7F,0x00,0x41,0x10,0x00,0x04,0x88,0x0};


    lui il fonctionne si je fais genre Variable = L3535[2] ; ca roule.

    Le compilo accepte que l on code des petit bouts du programme en assembleur mais il y a des regles a respecter :
    J ai lu dans la doc du compilo qu il fallais ajouter un _ lorsque l on veu utiliser une variable qui a ete declare "en C" dans un bout de programme que l on tape en assembleur genre et a contrario mettre un c devant une variable que l on a cree dans le petit bout d assembleur et que l on veux utiliser en C
    : (tire de la doc) desole c est un peu long


    Variables or functions declared within a separate assembly file that will be
    referenced by any C source file should be declared as global using the assembler
    directive.global. External symbols should be preceded by at least one
    underscore. The C function main is named _main in assembly and conversely an
    assembly symbol _do_something will be referenced in C as do_something.
    Undeclared symbols used in assembly files will be treated as externally defined.
    The following example shows how to use variables and functions in both assembly
    language and C regardless of where they were originally defined.
    The file ex1.c defines foo and cVariable to be used in the assembly language file.
    The C file also shows how to call an assembly function, asmFunction, and how to
    access the assembly defined variable, asmVariable.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    /*
    ** file: ex1.c
    */
    extern unsigned int asmVariable;
    extern void asmFunction(void);
    unsigned int cVariable;
    void foo(void)
    {
    asmFunction();
    asmVariable = 0x1234;
    }
    The file ex2.s defines asmFunction and asmVariable as required for use in a
    linked application. The assembly file also shows how to call a C function, foo, and how
    to access a C defined variable, cVariable.
    ;
    ; file: ex2.s
    ;
    .text
    .global _asmFunction
    _asmFunction:
    mov #0,w0
    mov w0,_cVariable
    return
    .global _begin
    _main:
    call _foo
    return
    .bss
    .global _asmVariable
    .align 2
    _asmVariable: .space 2
    .end
    mais en fait j ai beau essayer de rajouter asm ou c de mettre ou retirer les underscore ca marche pas.Ils sont penible chez microchip!
    je crois que je vais etre bon pour retirer les 3000 lignes asm byte a la main

    Je vais essayer de poster sur le forum de microchip, ils doivent bien avoir un forum ces comiques.
    encore merci

Discussions similaires

  1. Parcourir un tableau?
    Par kanzarih dans le forum Oracle
    Réponses: 2
    Dernier message: 19/01/2006, 19h45
  2. Meilleure Méthode pour parcourir un tableau
    Par KPitN dans le forum MFC
    Réponses: 7
    Dernier message: 24/02/2005, 16h19
  3. Comment parcourir un tableau
    Par petitsims dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 27/01/2005, 14h33
  4. parcourir un tableau aléatoirement
    Par khayyam90 dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 01/12/2004, 13h44
  5. [langage] Parcourir un tableau
    Par Jibees dans le forum Langage
    Réponses: 13
    Dernier message: 22/04/2003, 14h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo