Posté le 16/01/2021 09:57
Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 228 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements
Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd
Citer : Posté le 16/01/2021 10:07 | #
Yup, on peut, en utilisant BFile du coup. Tu alloues la liste (soit de taille connue à l'avance soit de la taille du fichier), tu la charges sur ton buffer avec BFile_Read(), et enjoy. Oublie pas de faire tout ça dans un gint_switch().
Citer : Posté le 16/01/2021 10:08 | #
gint_switch()?
Citer : Posté le 16/01/2021 10:59 | #
It gives control back from gint to the OS, it's mainly used for file operations. Documentation on gint_switch can be found here (basically, pass it a pointer to a function that does the Bfile operation)
Citer : Posté le 16/01/2021 11:03 | #
BFile ne peut être utilisé que dans l'OS, donc il faut sortir temporairement de gint.
int8_t ma_liste[10];
void fonction_a_executer_hors_de_gint(void) {
/* Ton code BFile là */
/* Charge les valeurs dans ma_liste */
}
/* Pour lancer la fonction, ne pas l'appeler directement */
fonction_a_executer_hors_de_gint(); // FAUX
/* À la place, utiliser gint_switch(): */
gint_switch(fonction_a_executer_hors_de_gint); // OK
Il y a un bon exemple dans gintctl. La fonction switch_dump() copie une partie de l'OS dans un fichier, et utilise donc BFile. Au lieu de l'appeler directement, on l'appelle avec gint_switch(). Les paramètres sont passés via une variable globale, l'appel complet est fait par la fonction do_dump().
Comme d'habitude, il y a une description et une documentation, et d'autres explications sur le forum ; bien sûr, tu ne peux pas tout trouver, mais là il est évident que tu n'as rien cherché, ce qui est perçu comme malpoli. Pour BFile il y a aussi des exemples sur le forum et dans les programmes, y compris dans des projets récents.
Prends le temps de lire De la bonne manière de poser les questions, en particulier la section Avant de demander qui contient une liste de choses que tu dois faire avant de poser tes questions. Ici :
• "Essayez... en cherchant sur le Web" → Il y a des topics qui en parlent sur Planète Casio : [1], [2] (de toi celui-là...)
• "Essayez... en lisant le manuel" → Tes questions n'expliquent pas si tu as lu les documentations de BFile et de gint_switch(), donc je vais devoir passer du temps à te les répéter pour t'obliger à exprimer ce qu'il te manque comme information
• "Essayez... par inspection et expérimentation" → On a déjà debuggé du BFile pour toi ensemble, tu dois au moins avoir un bout de code qui marche dans un coin. Mais tu sembles n'avoir rien testé, et même si tu as testé tu n'expliques pas ce que tu as fait donc on est obligés de partir de zéro
• "Si vous êtes programmeur, essayez... en lisant le code source" → Plusieurs projets récents font ça, Terrario a un fichier save.c, AST3 a un fichier save.c...
Pour te donner l'idée, quitte à ce que ça sonne méchant : si tu ne prends pas le temps de chercher, pourquoi prendrions-nous le temps de te répondre ?
Ma politique personnelle est de donner des réponses détaillées aux questions recherchées et des réponses bâclées aux questions bâclées.
Citer : Posté le 16/01/2021 11:30 | #
moi j'ai fais
int data_file = BFile_Open(fileName, BFile_ReadOnly);
int8_t level_map[MAP_LEN*6];
BFile_Read(data_file, (void *)level_map, MAP_LEN*6, 0);
Citer : Posté le 16/01/2021 11:31 | #
C'est pas mal. Faut fermer le fichier à la fin.
Citer : Posté le 16/01/2021 11:36 | #
je sais, c'est juste un bout de code
#include <gint/keyboard.h>
#include <gint/bfile.h>
#define TILEMAP_LEN 10
#define MAP_LEN 150
extern bopti_image_t img_tilemap;
void print_map(){
}
int main(void)
{
const uint16_t *fileName = u"\\\\fls0\\level.bin";
int data_file = BFile_Open(fileName, BFile_ReadOnly);
int8_t level_map[MAP_LEN*6];
BFile_Read(data_file, (void *)level_map, MAP_LEN*6, 0);
dclear(C_WHITE);
dtext(1, 1, C_BLACK, "Sample fxSDK add-in.");
dupdate();
getkey();
BFile_Close(file);
return 1;
}
Ajouté le 16/01/2021 à 11:38 :
ps: c'est aujourd’hui la 1k jam et on a toujours pas le theme
Citer : Posté le 16/01/2021 11:39 | #
C'est hors-sujet, mais le thème sera annoncé à 18 heures aujourd'hui
Citer : Posté le 16/01/2021 11:51 | #
Tu peux fermer le fichier immédiatement après le BFile_Read. Ensuite faut mettre tout le BFile dans une sous-fonction, et là tu l'appelles avec gint_switch().
Citer : Posté le 17/01/2021 12:39 | #
je teste le code mais j'ai un
pour la ligne
pourtant la dernière fous que j'ai utilisé ça marchait
Citer : Posté le 17/01/2021 13:06 | #
Mais comment tu veux stocker une chaîne de caractère avec des entiers ? C'est moche et ça prends bcp de place ! Met bien un unsigned char* pour des chaines et virer le 'u' avant la chaine
Citer : Posté le 17/01/2021 13:26 | #
oui mais regarde le prototype de la fonction que j'utilise
Ajouté le 17/01/2021 à 13:50 :
le pire c'est que terriaro et AST3 font comme moi et ça marche
Citer : Posté le 17/01/2021 14:10 | #
Mais comment tu veux stocker une chaîne de caractère avec des entiers ? C'est moche et ça prends bcp de place ! Met bien un unsigned char* pour des chaines et virer le 'u' avant la chaine
Les caractères sont des entiers, char est un entier. Ne te pose pas de questions.
Je suis surpris que tu aies ce warning. Je regarderai, peut-être que je peux changer le paramètre des fonctions BFile_*() pour utiliser char16_t si c'est plus approprié. Je suppose que c'est un nouveau warning de la part du compilateur, si tu as une version plus récente que le reste des membres ça arrive de temps en temps.
En attendant, tu dois sans doute pouvoir caster explicitement :
Citer : Posté le 17/01/2021 14:15 | #
en effet debian met toujours a jour gcc
et j'ai essayé (void *) mais ça ne marche pas
reste plus qu'a modifier le prototype
Citer : Posté le 17/01/2021 14:34 | #
en effet debian met toujours a jour gcc
Tu utilises le GCC de ton OS (ie. gcc) ?
Citer : Posté le 17/01/2021 14:37 | #
non j'utilise sh-elf-g++
Ajouté le 17/01/2021 à 14:43 :
mon message d'erreur:
:: Making into build-fx
sh-elf-g++ -c src/main.c -o build-fx/src/main.c.o -mb -ffreestanding -nostdlib -fstrict-volatile-bitfields -Wall -Wextra -Wno-missing-field-initializers -Os -D FX9860G -m3 -I include -MMD -MT build-fx/src/main.c.o -MF build-fx/src/main.c.d -MP
src/main.c:11:28: error: invalid conversion from 'void*' to 'const uint16_t*' {aka 'const short unsigned int*'} [-fpermissive]
11 | const uint16_t *fileName = (void *)u"\\\\fls0\\level.bin";
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| |
| void*
make: *** [Makefile:121 : build-fx/src/main.c.o] Erreur 1
Citer : Posté le 17/01/2021 14:57 | #
Aaah tu compiles du C++, voilà pourquoi ! Il est beaucoup plus rigoureux sur les pointeurs de ce genre.
Je t'avoue que ça va être un peu chiant, donc autant le déclarer à l'ancienne :
Citer : Posté le 17/01/2021 15:22 | #
ça marche (maintenant j'ai je contenu du fichier qui est buggé mais c'est autre chose (et je sais d'ou ça viens ) )
Ajouté le 17/01/2021 à 15:53 :
eeeeee le keydown() ne marche plus
if(keydown(KEY_RIGHT)){x++;}
if(keydown(KEY_MENU)){break;}
Citer : Posté le 17/01/2021 15:59 | #
Tu n'as pas clearevents() je suppose ?
Citer : Posté le 17/01/2021 16:01 | #
mais dans cette partie de code il y a un truc qui fais frezze le jeu
dclear(C_WHITE); //marche
map_print(); //marche
dprint(1, 1, C_BLACK, "x: %d",x); //marche mais doute
dupdate(); //met a jour l’écran mais doute
if(keydown(KEY_LEFT)){x--;} //marche pas
if(keydown(KEY_RIGHT)){x++;}//marche pas
if(keydown(KEY_MENU)){break;}//marche pas
Ajouté le 17/01/2021 à 16:03 :
Tu n'as pas clearevents() je suppose ?
je ne sais pas ce que c'est clearevents() mais je suppose que c'est dclear()
Ajouté le 17/01/2021 à 16:09 :
ah, non