Page 1 sur 1

[C] [Project Builder] [Problèmes Divers]

Message non luPosté: 18 Mar 2018, 00:57
de axel stefanini
Bonjour/bonsoir

Mon objectif derrière la réalisation de ce programme est de réussir à obtenir la position de la cellule de mémoire contenant l'ID de la calculatrice. (Raisons diverses et variées)

Dans un premier temps j'ai du mal à me familiarisé avec l'utilisation de cette "version" du C pour l'interaction avec la mémoire.
Je cherche à utiliser les pointeurs en C dans le project Builder, cependant j'ai quelques soucis. Pour vérifié que j'ai bien le pointeur d'une variable, malheureusement il n'y pas de simple "printf" dans cette version, donc j'ai crée un petit programme sensé affiché le pointeur d'une variable inventé, mais le résultat obtenu n'est pas celui voulu.

Code: Tout sélectionner
void main(void) {
    int truc = 10;
    int *pointeurSurTruc = &truc;

    gfx_Begin( gfx_8bpp );
    printIntXY(*pointeurSurTruc,1,1,8);
    while (!os_GetCSC());
    gfx_End();
    prgm_CleanUp();
}

void printText(const char *text, uint8_t xpos, uint8_t ypos)
{
    os_SetCursorPos(ypos, xpos);
    os_PutStrFull(text);
}

void printIntXY(int var, int x, int y, int dec) {
    gfx_SetTextXY(x,y);
    gfx_PrintUInt(var,dec);
}


Avec ce programme j'obtiens en résultat la valeur de "test" ce qui n'est pas ce qui est souhaité, cependant si je retire l'astérix à la ligne 7 pour obtenir non pas ce qu'il pointe mais l'adresse de ce qu'il pointe, il me dit :
"Argument type is not compatible with formal parameter"


Si quelqu'un à une idée sur la résolution de ce soucis, car moi je suis bloqué...



Merci d'avance :p

Re: [C] [Project Builder] [Problèmes Divers]

Message non luPosté: 18 Mar 2018, 15:32
de Adriweb
Le code tel quel fonctionne comme prévu, déjà c'est pas mal, donc ta variable et le pointeur font bien le boulot (le C89 ne change pas ça, hein) :


Ensuite, le warning est normal, puisque tu passes un pointeur au lieu d'un int. Bon, dans ce cas, tu peux tout simplement le caster, et puis c'est tout : printIntXY((int)pointeurSurTruc,1,20,8);


Tu noteras que 13740062 ca fait bien en hexa ce à quoi on s'attend à peu pres: 0xD1A81E

Au passage, tu n'as pas besoin de prgm_CleanUp(); à la fin du main.

Re: [C] [Project Builder] [Problèmes Divers]

Message non luPosté: 18 Mar 2018, 16:41
de axel stefanini
Super ! Merci, ayant commencé les cours en C je connais pas encore tout, et j'ignorais cette histoire de "castrer" je vais me renseigner d'avantage sur cette notion.

J'ai un autre soucis..

si je fais
Code: Tout sélectionner
int *pointeurMachin = 12365478;

Logiquement je devrais obtenir un pointeur de la cellule 12365478 par exemple. et ensuite si je fais

Code: Tout sélectionner
printIntXY(*pointeurMachin,1,40,8);


Je devrais obtenir la valeur de la cellule ayant pour pointeur 12365478.
Cependant, ça ne fonctionne pas, j’obtiens
Code: Tout sélectionner
Initializer is not assignment compatible


Donc la question est ; Est-il possible de choisir de manière aléatoire un pointeur pour ensuite obtenir ce que celui-ci pointe ?

Re: [C] [Project Builder] [Problèmes Divers]

Message non luPosté: 18 Mar 2018, 17:17
de Adriweb
Parce que 12365478 est un nombre et non un pointeur :P
Caste le en int* : int *pointeurMachin = (int*)12365478;

Cela dit, c'est pas bon d'avoir des addresses en absolu, sauf si tu sais exactement ce que tu fais.

Re: [C] [Project Builder] [Problèmes Divers]

Message non luPosté: 18 Mar 2018, 17:24
de IAMISSAM
Il veut avoir acces a la valeur contenue dans la case mémoire a l'adresse 12365478 sauf que c'est interdit il me semble

Re: [C] [Project Builder] [Problèmes Divers]

Message non luPosté: 18 Mar 2018, 17:44
de axel stefanini
Adriweb a écrit:Parce que 12365478 est un nombre et non un pointeur :P
Caste le en int* : int *pointeurMachin = (int*)12365478;

Cela dit, c'est pas bon d'avoir des addresses en absolu, sauf si tu sais exactement ce que tu fais.


Super! ça fonctionne,

J'aurai un autre petit truc à vous demander....
Puisque la la calculatrice lorsqu'elle lance un prgm en Ti-basic, le convertit en assembleur pour le faire fonctionner, est-il possible de récupéré le code asm d'un prgm en ti-basic pour l'intégré dans mon prgm ?

Genre l'objectif serait de mettre un prgm en ti-basic dans mon prgm en asm ^^
Si c'est pas possible, car d'après mes recherches c'est peu probable, existe-il un moyen de lancé un prgm Ti-Basic depuis un prgm en C,
Cesium le fait très bien, cependant, je comprends pas comment il y parvient en asm avec la fonction "_ParseInp"

Merci !

Re: [C] [Project Builder] [Problèmes Divers]

Message non luPosté: 18 Mar 2018, 18:23
de Dark coco
IAMISSAM a écrit:Il veut avoir acces a la valeur contenue dans la case mémoire a l'adresse 12365478 sauf que c'est interdit il me semble


non ce n'est absolument pas interdit, on peut lire une valeur d'una dresse quelconque.
Cependant, il est interdit d'écrire en flash.

Re: [C] [Project Builder] [Problèmes Divers]

Message non luPosté: 18 Mar 2018, 18:40
de Bisam
axel stefanini a écrit:ayant commencé les cours en C je connais pas encore tout, et j'ignorais cette histoire de "castrer" je vais me renseigner d'avantage sur cette notion.

LOL ! Fais gaffe, ça fait mal !

Bref, le bon terme c'est "caster" (anglicisme issu du verbe anglais "to cast" que l'on pourrait imaginer comme utilisant le sens de "attribuer le rôle" ici). Cela désigne l'action de forcer la transformation d'une variable d'un type en un autre type, ici un pointeur en un entier.

Re: [C] [Project Builder] [Problèmes Divers]

Message non luPosté: 18 Mar 2018, 18:50
de axel stefanini
D'accord! Merci pour les précision :p