Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.
Menu
Calculatrices
Graph 35 à 100
Graph 25+Pro/25+E/25+E II
Graph 35+USB/75(+E)/85/95 SD
Graph 100(+)
Classpad 300/330(+)
fx-CG 10/20 (Prizm)
Classpad 400(+E)
Graph 90+E
fx-92+ SC
Liens
¤ Transférer un programme sur
sa calculatrice

¤ Vous cherchez une fonction ?
Utilitaires >> Graph 35+USB/75(+E)/85/95 SD >> Add-ins >> Memory
Memory
Version : 3.0 Taille : 10917 octets Ajouté le : 2014-02-14 08:13 Modifié le : 2020-08-24 11:17
Auteur et posteur :
LephenixnoirEn ligneAdministrateurPoints: 24227 Défis: 170 Message
Planète Casio - Add-in Casio - Memory - LePhenixNoir - Calculatrices
Nombre de visites sur cette page : 16708
Score au progrank : 40
Pas encore de note !
Vous devez être connecté(e) pour noter (inscription).
2413 téléchargements | Soumettre un test

Ce programme est sous licence Creative Commons 2.0 BY


A cause du changement de processeur des nouvelles Graph 35+ USB, 75 et 95 SD, de nombreux addins sont incompatibles avec ces calculatrices.
Rendre un addin compatible - Plus d'informations sur ce problème - Liste des addins compatibles

Description :

Attention : cette antiquité n'est compatible qu'avec le fx-9860G SDK et n'est plus maintenue depuis 2015.

La bibliothèque C memory simplifie la manipulation de la mémoire. Elle permet entre autres d'utiliser des interfaces utilisateur, de charger et sauvegarder les fichiers automatiquement, d'utiliser des char * pour les adresses, tout en se passant de Bfile.

Une documentation en HTML est jointe à l'archive, très complète depuis la version 3. Celle-ci comprend quelques explications sur la mémoire, la liste des fonctions de memory et un court tutoriel pour l'utilisation de cette dernière.
N'oubliez pas d'inclure memory.h au début de votre programme et d'ajouter memory.c au projet.
Cette bibliothèque génère un code nativement compatible SH4.

Pour ceux qui utilisent encore les versions 1.1 ou 2, je les laisse dans les fichiers (données perdues...).

Fichiers
1. memory.zip : version 3.0
2. memory.zip : version 2.0
3. memory.zip : version 1.1
Les archives contiennent la source, le header, et la documentation HTML.

Changelog
Cliquer pour enrouler
13.06.2014
Ajout de la documentation de la version 3.

11.06.2014 -- Version 3.0
Compression de la transformation de l'adresse char * en FONTCHARACTER.
Ajout de l'affichage des erreurs et causes pour les développeurs.

29.05.2014
Correction de bugs détectés au niveau de l'allocation, qui généraient parfois une adresse FONTCHARACTER fausse et provoquaient systématiquement une erreur.

24.05.2014 -- Version 2.0
Ajout des fonctions d'interfacage et des fonctions automatisées.
Définition par define des fonctions basiques.

15.03.2014 -- Version 1.1
Ajouté un header à la bibliothèque.
La fonction memory_seekfile() (alias de Bfile_SeekFile) a été ajoutée.
Les doubles inclusions de headers sont évitées.

01.03.2014
Quelques bugs corrigé (inclusions de headers)


Commentaires :

Pages: Précédente | 1, 2, 3, 4, 5, 6, 7, 8, 9 | Suivante

NinestarsHors ligneMembrePoints: 2461 Défis: 24 Message
Posté le 18-02-2015 à 16:13 | #
Je vais avoir besoin de cette lib pour la première fois, c'est d'ailleurs ma première expérience avec la mémoire, en tout cas bravo cette lib parait vraiment complète !
Du coup j'ai une question, j'ai lu toute la doc mais je voudrais avoir une confirmation
On ne peut écrire dans la mémoire que des char ?
Ou est-ce que on peut ecrire une class complète et la recharger d'un coup ?
LephenixnoirEn ligneAdministrateurPoints: 24227 Défis: 170 Message
Posté le 18-02-2015 à 18:32 | #
C'est le type de pointeur... comme tu le sais, un pointeur ça se caste à l'infini.

struct
{
    int a;
    char b;
    void *c;
} var;

memory_writefile(handle,(unsigned char *)&var,sizeof(var));
NinestarsHors ligneMembrePoints: 2461 Défis: 24 Message
Posté le 18-02-2015 à 21:59 | #
D'accord merci Je redonne des nouvelles si j'ai des questions, j'ai fait pas mal de tests cet aprèm et ça marche bien.
LephenixnoirEn ligneAdministrateurPoints: 24227 Défis: 170 Message
Posté le 18-02-2015 à 22:08 | #
Ah, on dirait que t'es bien le premier alors

Dis-moi si tu rencontres des bugs, de ce que j'entends il y en a pas mal mais on ne me les signale jamais correctement donc impossible de les corriger...
Xavier59Hors ligneMembre de CreativeCalcPoints: 1337 Défis: 12 Message
Posté le 18-02-2015 à 22:10 | #
En même temps generalement on entends plus ceux pour qui ça ne marche pas que ceux pourquoi ça marche
NinestarsHors ligneMembrePoints: 2461 Défis: 24 Message
Posté le 22-02-2015 à 00:03 | #
Je dois en faire quoi du pointeur que je reçois de memory_load() ?
Je fais ça d'une part
memory_save("\\\\fls0\\AOE.save", &game_map.jour, sizeof(int));

puis d'autre part
void* jour = NULL;
jour = memory_load("\\\\fls0\\AOE.save");
if (jour != NULL)
{
    game_map.jour = int (jour);
    delete(jour);
    scene = SCENE_MAP;
}

Comment je récupère la valeur du int que j'ai sauvé ? Parce que là game_map.jour vaut -20131
Dark stormHors ligneLabélisateurPoints: 11634 Défis: 176 Message
Posté le 22-02-2015 à 00:17 | #
T'as oublié le *
void* jour = NULL;
jour = memory_load("\\\\fls0\\AOE.save");
if (jour != NULL)
{
    game_map.jour = (int)(*jour); // ben oui, tu veux pas la valeur de l'adresse du pointeur, mais la valeur à l'adresse :p
    delete(jour);
    scene = SCENE_MAP;
}
:
LephenixnoirEn ligneAdministrateurPoints: 24227 Défis: 170 Message
Posté le 22-02-2015 à 08:49 | #
Visiblement tu sauvegardes des données qui sont dans une structure ?
Pour réduire les temps de sauvegarde et chargement, et pour simplifier les programmes, je conseille toujours de faire ceci :

struct Save
{
    int currentMap;
    unsigned x, y;
    char playerName[8];
};
struct Save save; // en local c'est pas mal aussi

save:
    memory_save("game.sav",&save,sizeof(save));

load:
    struct Save *file = (struct Save *)memory_load("game.sav");
    if(!file) { /* ... */ }
    memcpy(&save,file,sizeof(save));
    free(file);
TheprogHors ligneMembrePoints: 1447 Défis: 20 Message
Posté le 22-02-2015 à 10:22 | #
Deux petits points a eclaircir pour moi
Je comprends pas trop comment fonctionne memory_find(). J'ai fait ceci:
Le code
Cliquer pour enrouler
#include "fxlib.h"
#include "struct.h"
#include "load.h"

#include "MonochromeLib.h"
#include "memory.h"

void Load_algoCaract(AlgoCaract **algos)
{
    char files[10][10];
    int i, nbrAlgo;
    
    nbrAlgo = -1;
    nbrAlgo = memory_find("\\\\crd0\\ALGO\\*.ALG", files, 10);
    
    for(i=0; i<nbrAlgo; i++)
    {
        PrintMini(0, 8*i, files[i], 0);
    }
    ML_display_vram();
    Sleep(5000);
}

Si j'ai bien compris, ca devrait m'afficher le nom des fichiers qui se trouve dans la memoire de la carte SD dans le dossier ALGO et d'extension ALG ?
Et ce code me mene a mon deuxieme point:
Compilo
Cliquer pour enrouler
Executing Hitachi OptLinker04 phase

"C:\Users\User\Documents\DevCasio\SDK\OS\SH\bin\Optlnk.exe" -subcommand=C:\Users\User\AppData\Local\Temp\hmk10ED.tmp

** L2310 (E) Undefined external symbol "_memory_find" referenced in "C:\Users\User\Documents\DevCasio\Programmes\Algo\Debug\load.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.

Je sais pas trop si ca vient de moi...
LephenixnoirEn ligneAdministrateurPoints: 24227 Défis: 170 Message
Posté le 22-02-2015 à 10:28 | #
Ton char files[10][10] et un peu court, pour mettre un nom de fichier. Ça risque de déborder et de faire le bordel. Dans les exemples je conseillais char files[nb_fichiers][20].

Sinon, en fait le linker te dit juste qu'il ne trouve pas la fonction memory_find. >_<
T'as bien pensé à ajouter memory.c au projet ? Et à utiliser une version compatible avec la fonction ?

Pages: Précédente | 1, 2, 3, 4, 5, 6, 7, 8, 9 | Suivante

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 79 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