Posté le 07/11/2020 15:33
Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 140 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 07/11/2020 22:14 | #
justement si je te demande c'est car j'ai pas compris
Dans ce cas pose une question plus précise : « que veut dire cet argument » ou bien « comment je crée le buffer » par exemple.
Citer : Posté le 07/11/2020 22:17 | #
voila
int STFile = BFile_Open(filename,BFile_ReadOnly);
char* text[BFile_Size(STFile)] = BFile_Read(STFile, malloc(BFile_Size(STFile)), BFile_Size(STFile),0);
Ajouté le 07/11/2020 à 22:20 :
après compilation ça ne marche pas
:: Making into build-fx
sh-elf-gcc -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: In function 'STF_render':
src/main.c:28:23: warning: unused parameter 'text' [-Wunused-parameter]
28 | void STF_render(char *text,int scroll){
| ~~~~~~^~~~
src/main.c:28:32: warning: unused parameter 'scroll' [-Wunused-parameter]
28 | void STF_render(char *text,int scroll){
| ~~~~^~~~~~
src/main.c: In function 'main':
src/main.c:36:5: error: variable-sized object may not be initialized
36 | char* text[BFile_Size(STFile)] = BFile_Read(STFile, malloc(BFile_Size(STFile)), BFile_Size(STFile),0);
| ^~~~
src/main.c:36:57: warning: implicit declaration of function 'malloc' [-Wimplicit-function-declaration]
36 | char* text[BFile_Size(STFile)] = BFile_Read(STFile, malloc(BFile_Size(STFile)), BFile_Size(STFile),0);
| ^~~~~~
src/main.c:4:1: note: 'malloc' is defined in header '<stdlib.h>'; did you forget to '#include <stdlib.h>'?
3 | #include <gint/bfile.h>
+++ |+#include <stdlib.h>
4 |
src/main.c:36:57: warning: passing argument 2 of 'BFile_Read' makes pointer from integer without a cast [-Wint-conversion]
36 | char* text[BFile_Size(STFile)] = BFile_Read(STFile, malloc(BFile_Size(STFile)), BFile_Size(STFile),0);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
| |
| int
In file included from src/main.c:3:
/home/pierre/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.2.0/include/gint/bfile.h:84:34: note: expected 'void *' but argument is of type 'int'
84 | int BFile_Read(int handle, void *data, int size, int whence);
| ~~~~~~^~~~
src/main.c:36:11: warning: unused variable 'text' [-Wunused-variable]
36 | char* text[BFile_Size(STFile)] = BFile_Read(STFile, malloc(BFile_Size(STFile)), BFile_Size(STFile),0);
| ^~~~
make: *** [Makefile:121 : build-fx/src/main.c.o] Erreur 1
Citer : Posté le 07/11/2020 22:22 | #
The 2nd argument of BFile_Read is incorrect, as the buffer will be inaccessible afterwards. You must give a pointer to a buffer you have allocated beforehand.
Additionally, BFile_Read does not return a pointer to a buffer, it returns an error code.
Citer : Posté le 07/11/2020 22:29 | #
je commence a m’embrouiller
vous pouvez me donner un exemple?
Citer : Posté le 07/11/2020 22:37 | #
int fileSize = 50;
const uint16_t *fileName = u"\\\\fls0\\file.txt";
char *buffer = malloc(fileSize);
int descriptor = BFile_Open(fileName, BFile_ReadOnly);
BFile_Read(descriptor, (void *)buffer, fileSize, 0);
BFile_Close(descriptor);
The file must be an even size.
Remember to free the buffer when you're done with it.
Citer : Posté le 07/11/2020 22:52 | #
Il y a plusieurs choses problématiques avec cette ligne :
1. Tu dois réserver de la mémoire pour que BFile_Read() puisse écrire les données du fichier dedans - jusque-là pas de souci. Mais tu mélanges deux méthodes : (a) créer un tableau local du type char text[10] et (b) allouer un tableau avec malloc() du style char *text = malloc(10). Un seul à la fois.
2. Tu ne peux pas créer des tableaux à taille variable comme dans int array[n] où n est une variable. (Tu peux, mais ça s'appelle des VLA, et c'est une mauvaise idée pour un très grand nombre de raisons). Donc si tu prends la direction « tableau » faut que la taille soit connue à l'avance.
3. Si tu écris char *text[...] tu obtiens un tableau de char * (de pointeurs). Alors que pour stocker du texte il te faut un tableau de char. Si tu veux un moyen mnémotechnique, tu peux retenir que le tableau [] et le pointeur * sont très similaires, et donc si tu as un char text[] c'est très similaire à un char *text (que tu aurais obtenu avec malloc() par exemple).
4. Tu oublies de fermer le fichier et de free() la mémoire.
Citer : Posté le 08/11/2020 08:06 | #
on fait comment pour avoir la taille du fichier? car ça doit être dynamique :/
Citer : Posté le 08/11/2020 08:09 | #
If you have the descriptor, calling BFile_Size(descriptor) should return the size of the file.
Citer : Posté le 08/11/2020 08:28 | #
ok merci...
Ajouté le 08/11/2020 à 08:31 :
par contre j'ai un petit problème, je transfère le programme sur le calculatrice mais il ne s'affiche pas dans le menu
pourtant le fichier est bien dans le mémoire de stockage
#include <gint/keyboard.h>
#include <gint/bfile.h>
#include <gint/std/stdlib.h>
//casio STF (Simple Text Formated)
//2020 pedroBzh <pedronatorbzh@gmail.com>
//
//title a page
//bigc1 big ecriture
//1pbar (1 px bar)
//2pbar 2 px bar
//nmtxt normal text
void STF_render(char *text,int scroll){
}
int main(void)
{
const uint16_t *fileName = u"\\\\fls0\\stf.txt";
int STFile = BFile_Open(fileName, BFile_ReadOnly);
int fileSize = BFile_Size(STFile);
char *buffer = malloc(fileSize);
BFile_Read(STFile, (void *)buffer, fileSize, 0);
dclear(C_WHITE);
dtext(1, 1, C_BLACK, buffer);
dupdate();
getkey();
BFile_Close(STFile);
free(buffer);
return 1;
}
:: Making into build-fx
sh-elf-gcc -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: In function 'STF_render':
src/main.c:29:23: warning: unused parameter 'text' [-Wunused-parameter]
29 | void STF_render(char *text,int scroll){
| ~~~~~~^~~~
src/main.c:29:32: warning: unused parameter 'scroll' [-Wunused-parameter]
29 | void STF_render(char *text,int scroll){
| ~~~~^~~~~~
sh-elf-gcc -o build-fx/casiostf.elf build-fx/src/main.c.o build-fx/assets/img/hi.png.o -mb -ffreestanding -nostdlib -fstrict-volatile-bitfields -Wall -Wextra -Wno-missing-field-initializers -Os -D FX9860G -m3 -I include -T fx9860g.ld -lgint-fx -lgint-fx -lgcc -Wl,-Map=build-fx/map
sh-elf-objcopy -O binary -R .bss -R .gint_bss build-fx/casiostf.elf build-fx/casiostf.bin
fxg1a build-fx/casiostf.bin -o casiostf.g1a -i "assets-fx/icon-fx.png" -n "casiostf" --internal="cstf"
Citer : Posté le 08/11/2020 08:34 | #
Can you upload your project.cfg?
Citer : Posté le 08/11/2020 08:42 | #
Problème évident ici :
Quand tu crées le projet il est écrit en toutes lettres que le nom interne du projet doit prendre la forme @ suivie de 1 à 7 majuscules sinon l'add-in ne s'affiche pas dans le menu. Modifie-le dans project.cfg.
Citer : Posté le 08/11/2020 10:19 | #
c'est bon ca marche
ps: maintenant que j'ai le char *, c'est quoi le caractère qui signifie le retour a la ligne?
Citer : Posté le 08/11/2020 10:21 | #
C'est l'entier 10, que tu peux aussi écrire '\n'.