Je n'arrive pas à rendre mon programme en C compatible SH4
Posté le 17/03/2015 17:41
Je précise que quand j'ai commencé à programmer en C, j'ai voulu suivre le tutoriel et dans ce tutoriel le logiciel utilisé était Code::Blocks..
Alors je n'ai rien compris des tutoriel que j'ai vu avec le logiciel SDK pour rendre compatible et tout ça.. :/
En gros suis bloqué à l'ouverture du logiciel que je trouve chargé comparé à Code::Blocks.
Voilà un petit menu que j'ai voulu essayer sur ma calculatrice avant de faire des programmes plus gros :
Cliquez pour découvrir
Cliquez pour recouvrir
#include <stdio.h>
#include <stdlib.h>
int affichageMenu(void)
{
int choixMenu;
printf("---MENU---\n\n");
printf("1.Maths\n");
printf("2.Physique-Chimie\n");
printf("3.SVT\n");
printf("4.SES\n\n\n");
printf("\nChoix?\n\n");
scanf("%d", &choixMenu);
return choixMenu;
int main(void)
{
switch (affichageMenu())
{
case 1:
printf("Vous avez choisis le 1");
break;
case 2:
printf("Vous avez choisis le 2");
break;
case 3:
printf("Vous avez choisis le 3");
break;
case 4:
printf("Vous avez choisis le 4");
break;
default:
printf("Choix impossible");
break;
}
system("PAUSE");
return 0;
}
Donc si quelqu'un peut m'expliquer comment faire..
Merci !
Citer : Posté le 17/03/2015 18:16 | #
Tiens regarde ici : http://www.planet-casio.com/Fr/forums/topic11897-1-Rendre-un-add-in-compatible-SH4.html
En bas dans les commentaires il y a le bon code copie le tout au début de ton programme et le tour est joué !:D
Mais attention les erreurs de ton programme ne viennent pas de la (meme si pour les corriger ce sera necessaire a la compatibilité
tu ne peux pas utiliser les fonctions printf et scanf en C casio, je te conseille de faire un tour sur le forum pour trouver les nombreux tutos donnant les fonctions semblables
-Mon Fall Down
-Mon jeu de mains
-Mon starwars
-Mon dessinatout
-Mon niaiseux version 2.0
-Mon niaiseux version 3.0
-Inferno
-Mon super labyrinthe (en cours)
-Mon call of duty en 3D
-Casion (avec Az)
Citer : Posté le 17/03/2015 18:21 | #
la librairie C standard ne fonctionne pas intégralement sur la calculatrice car ce n'est pas un pc.
Prinf et scanf sont utilisés dans des programmes consoles ,et comme les addins ne sont pas des consoles , ben ça fonctionne pas
Citer : Posté le 17/03/2015 18:31 | #
Whoah, on va avoir un problème là.
Tu vois ce que sont les entrées/sorties ? Ce sont les éléments qui constituent l'environnement du programme, et avec lesquels il interagit.
Par exemple, lire un fichier est un entrée du système de fichiers. En écrire un est une sortie. Classiquement comme entrées, tu as le clavier, le pavé tactile et/ou la souris, et en sortie, l'écran, ou bien des leds sur la tour ou le pc.
Eh bien, sur la calculatrice, les entrées/sorties ne fonctionnent pas pareil que sur pc (ben oui, c'est pas les mêmes !). Il y a toute une API appelée « fxlib » qui permet d'utiliser ces entrées/sorties, mais avec ses propres fonctions !
Par exemple, il y a des fonctions pour dessiner à l'écran, rafraîchir l'écran, lire et écrire les fichiers, récupérer les entrées claviers...
Entre autres pour les sorties de texte à l'écran il y a quelques fonctions mais ce n'est pas très complet. Et surtout, ils ont du implémenter leur propre lib standard et certaines fonctions n'en font pas partie. Comme printf() ou scanf(), parce qu'il n'y a pas de flux standard... et system(), parce qu'il n'y a pas de processus parent pour le gérer !
Autrement dit, il faut adapter tout ton code pour répondre aux exigences de l'API de la calculatrice, et c'est le fx-9860G SDK qui va te permettre d'utiliser cette API, fxlib. Donc tu peux éditer avec Code::Blocks, mais pas compiler...
Citer : Posté le 17/03/2015 18:40 | #
Tant qu'on y est, la doc en francais de FXlib
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2
merci a tout le monde pour son soutien
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm
(dont je connais le nom, mais pas vous )Arcuz !Citer : Posté le 17/03/2015 21:38 | #
Ah d'accord merci, en gros une fois que j'ai un programme en C spécial Casio, il me suffit juste d'ajouter le petit bout de code en début et c'est tout ?
Sinon merci pour vos réponses !
Citer : Posté le 17/03/2015 22:28 | #
Tout a fait . Par contre si tu utilise monochrome lib (ce que tu n'est pas oblige de faire ) tu dois aussi changer un bout de son cide pour le rendre compatible
-Mon Fall Down
-Mon jeu de mains
-Mon starwars
-Mon dessinatout
-Mon niaiseux version 2.0
-Mon niaiseux version 3.0
-Inferno
-Mon super labyrinthe (en cours)
-Mon call of duty en 3D
-Casion (avec Az)
Citer : Posté le 18/03/2015 06:12 | #
Ah d'accord merci, en gros une fois que j'ai un programme en C spécial Casio [...]
C'est pas du C spécial Casio, le langage est strictement le même ; c'est juste qu'on utilise une API un peu différente et c'est comme ça sur la plupart des supports, comme l'Arduino par exemple. Avec Arduino il n'y a pas de printf(), mais une fonction de communication Serial pour afficher dans le moniteur.
[/quote=Random][...] il me suffit juste d'ajouter le petit bout de code en début et c'est tout ?[/quote]
À la fin tu veux dire.
Oui, et il faut absolument le mettre sinon tu vas pas faire tourner grand-chose.
Citer : Posté le 19/03/2015 11:57 | #
Ok merci !
Mais maintenant j'ai un problème au moment de la compilation..
Executing Hitachi SH C/C++ Compiler/Assembler phase
set SHC_INC=C:\Program Files (x86)\CASIO\fx-9860G SDK\OS\SH\include
set PATH=C:\Program Files (x86)\CASIO\fx-9860G SDK\OS\SH\bin
set SHC_LIB=C:\Program Files (x86)\CASIO\fx-9860G SDK\OS\SH\bin
set SHC_TMP=C:\Users\Admin.PC\Desktop\Début\PROG\Debug
"C:\Program Files (x86)\CASIO\fx-9860G SDK\OS\SH\bin\shc.exe" -subcommand=C:\Users\Admin~1.MAG\AppData\Local\Temp\hmkC8C9.tmp
Executing Hitachi OptLinker04 phase
"C:\Program Files (x86)\CASIO\fx-9860G SDK\OS\SH\bin\Optlnk.exe" -subcommand=C:\Users\Admin~1.MAG\AppData\Local\Temp\hmkEC22.tmp
** L2011 (E) Invalid parameter specified in option "input" : ""C:\Program Files (x86)\CASIO\fx-9860G SDK\OS\FX\lib\setup.obj""
Optimizing Linkage Editor Abort
HMAKE MAKE UTILITY Ver. 1.1
Copyright (C) Hitachi Micro Systems Europe Ltd. 1998
Copyright (C) Hitachi Ltd. 1998
ERROR: Process failed with return code: 1
Build was not successful.
Que faire ? Sachant que j'ai suivi ce tuto :
Citer : Posté le 19/03/2015 13:24 | #
Y'a une règle qui est essentielle : sans le code, on ne peut rien débugguer (ou presque)
Citer : Posté le 19/03/2015 18:11 | #
Y'a une règle qui est essentielle : sans le code, on ne peut rien débugguer (ou presque)
Lis avant.
On se tue à le dire, mais faut pas installer le fx-9860g SDK dans un dossier dont le chemin contient des parenthèses -- en l'ocurrence, « Program Files (x86) ». Réinstalle-le dans un autre dossier.
Citer : Posté le 20/03/2015 13:38 | #
Je viens de réinstaller le logiciel dans Program Files et j'ai toujours la même erreur.. Je vais encore essayer ce soir mais voilà.
Citer : Posté le 20/03/2015 13:42 | #
donne le code
Citer : Posté le 20/03/2015 15:02 | #
Bah le code c'est ça (code du nouveau projet comme dans le tuto) :
/* */
/* CASIO fx-9860G SDK Library */
/* */
/* File name : [ProjectName].c */
/* */
/* Copyright (c) 2006 CASIO COMPUTER CO., LTD. */
/* */
/*****************************************************************/
#include "fxlib.h"
//****************************************************************************
// AddIn_main (Sample program main function)
//
// param : isAppli : 1 = This application is launched by MAIN MENU.
// : 0 = This application is launched by a strip in eACT application.
//
// OptionNum : Strip number (0~3)
// (This parameter is only used when isAppli parameter is 0.)
//
// retval : 1 = No error / 0 = Error
//
//****************************************************************************
int AddIn_main(int isAppli, unsigned short OptionNum)
{
unsigned int key;
Bdisp_AllClr_DDVRAM();
locate(1,4);
Print((unsigned char*)"This application is");
locate(1,5);
Print((unsigned char*)" sample Add-In.");
while(1){
GetKey(&key);
}
return 1;
}
//****************************************************************************
//************** ****************
//************** Notice! ****************
//************** ****************
//************** Please do not change the following source. ****************
//************** ****************
//****************************************************************************
#pragma section _BR_Size
unsigned long BR_Size;
#pragma section
#pragma section _TOP
//****************************************************************************
// InitializeSystem
//
// param : isAppli : 1 = Application / 0 = eActivity
// OptionNum : Option Number (only eActivity)
//
// retval : 1 = No error / 0 = Error
//
//****************************************************************************
int InitializeSystem(int isAppli, unsigned short OptionNum)
{
return INIT_ADDIN_APPLICATION(isAppli, OptionNum);
}
#pragma section
Citer : Posté le 20/03/2015 15:05 | #
et l'erreur?
Citer : Posté le 20/03/2015 16:01 | #
C'est bon, je peux compiler !
Tiens regarde ici : http://www.planet-casio.com/Fr/forums/topic11897-1-Rendre-un-add-in-compatible-SH4.html
En bas dans les commentaires il y a le bon code copie le tout au début de ton programme et le tour est joué !:D
Mais attention les erreurs de ton programme ne viennent pas de la (meme si pour les corriger ce sera necessaire a la compatibilité
tu ne peux pas utiliser les fonctions printf et scanf en C casio, je te conseille de faire un tour sur le forum pour trouver les nombreux tutos donnant les fonctions semblables
Je mets ce bout de code (seul bout de code en bas dans les commentaires)
const unsigned int sc0135[] = { 0xD201D002, 0x422B0009, 0x80010070, 0x0135 };
#define ML_vram_adress (*(sc_cpv)sc0135)
Citer : Posté le 20/03/2015 16:03 | #
normalement non
Citer : Posté le 20/03/2015 16:11 | #
Comme ça ?
const unsigned int sc0135[] = { 0xD201D002, 0x422B0009, 0x80010070, 0x0135 };
#define ML_vram_adress (*(sc_cpv)sc0135)
/*****************************************************************/
/* */
/* CASIO fx-9860G SDK Library */
/* */
/* File name : [ProjectName].c */
/* */
/* Copyright (c) 2006 CASIO COMPUTER CO., LTD. */
/* */
/*****************************************************************/
#include "fxlib.h"
//****************************************************************************
// AddIn_main (Sample program main function)
//
// param : isAppli : 1 = This application is launched by MAIN MENU.
// : 0 = This application is launched by a strip in eACT application.
//
// OptionNum : Strip number (0~3)
// (This parameter is only used when isAppli parameter is 0.)
//
// retval : 1 = No error / 0 = Error
//
//****************************************************************************
int AddIn_main(int isAppli, unsigned short OptionNum)
{
unsigned int key;
Bdisp_AllClr_DDVRAM();
locate(1,4);
Print((unsigned char*)"Test pour rendre mon addin");
locate(1,5);
Print((unsigned char*)" compatible SH4.");
while(1){
GetKey(&key);
}
return 1;
}
//****************************************************************************
//************** ****************
//************** Notice! ****************
//************** ****************
//************** Please do not change the following source. ****************
//************** ****************
//****************************************************************************
#pragma section _BR_Size
unsigned long BR_Size;
#pragma section
#pragma section _TOP
//****************************************************************************
// InitializeSystem
//
// param : isAppli : 1 = Application / 0 = eActivity
// OptionNum : Option Number (only eActivity)
//
// retval : 1 = No error / 0 = Error
//
//****************************************************************************
int InitializeSystem(int isAppli, unsigned short OptionNum)
{
return INIT_ADDIN_APPLICATION(isAppli, OptionNum);
}
#pragma section
Et là après la compilation je peux l'envoyer sur ma calculatrice ? L'addin est compatible SH4 ?
Citer : Posté le 20/03/2015 16:16 | #
tu teste ça :
/* */
/* CASIO fx-9860G SDK Library */
/* */
/* File name : [ProjectName].c */
/* */
/* Copyright (c) 2006 CASIO COMPUTER CO., LTD. */
/* */
/*****************************************************************/
#include "fxlib.h"
//****************************************************************************
// AddIn_main (Sample program main function)
//
// param : isAppli : 1 = This application is launched by MAIN MENU.
// : 0 = This application is launched by a strip in eACT application.
//
// OptionNum : Strip number (0~3)
// (This parameter is only used when isAppli parameter is 0.)
//
// retval : 1 = No error / 0 = Error
//
//****************************************************************************
typedef char*(*sc_cpv)(void);
const unsigned int sc0135[] = { 0xD201D002, 0x422B0009, 0x80010070, 0x0135 };
#define ML_vram_adress (*(sc_cpv)sc0135)
int AddIn_main(int isAppli, unsigned short OptionNum)
{
unsigned int key;
Bdisp_AllClr_DDVRAM();
locate(1,4);
Print((unsigned char*)"Test pour rendre mon addin");
locate(1,5);
Print((unsigned char*)" compatible SH4.");
while(1){
GetKey(&key);
}
return 1;
}
//****************************************************************************
//************** ****************
//************** Notice! ****************
//************** ****************
//************** Please do not change the following source. ****************
//************** ****************
//****************************************************************************
#pragma section _BR_Size
unsigned long BR_Size;
#pragma section
#pragma section _TOP
//****************************************************************************
// InitializeSystem
//
// param : isAppli : 1 = Application / 0 = eActivity
// OptionNum : Option Number (only eActivity)
//
// retval : 1 = No error / 0 = Error
//
//****************************************************************************
int InitializeSystem(int isAppli, unsigned short OptionNum)
{
return INIT_ADDIN_APPLICATION(isAppli, OptionNum);
}
#pragma section
tu teste en envoyant l'addin sur ta calto et tu verra si c'est SH4 mais normalement oui
Citer : Posté le 20/03/2015 16:31 | #
Je ne vois pas l'addin sur ma calto, j'ai tout bien fais..
Citer : Posté le 20/03/2015 17:10 | #
Il faut l'envoyer dans la mémoire de stockage, à la racine.
Et non, ajouter ce morceau de code ne sert, désolé, strictement à rien, sinon à générer des conflits avec la version corrigée de MonochromeLib. Par contre, il faut l'utiliser en remplacement de l'appel de syscall original.
Et en plus, il existe une version de ML déjà patchée. Alors pourquoi s'embêter ?