450

Memory Mangement Unit
C'est ce qui empêche un programme d'aller lire/écrire ailleurs en mémoire que dans son segment de data. Enfin dans les systèmes qui l'intègrent smile
avatar
Que cache le pays des Dieux ? - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.

451

452

Ximoon :
Memory Mangement Unit
C'est ce qui empêche un programme d'aller lire/écrire ailleurs en mémoire que dans son segment de data. Enfin dans les systèmes qui l'intègrent smile

Tres simpliste comme explication ^^
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

453

Oui.
Mais je comptais sur Kevin pour apporter un post précis et formatté à souhait (et d'ailleurs, il m'a devancé smile).
avatar
Que cache le pays des Dieux ? - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.

454

Je veux essayer de faire une fonction qui va placer n'importe quelle type de données les une à la suite des autres et puis d'allouer un nouveau bloc quand il est nécessaire car jusqu'à mnt j'avais qu'une seule fonction pour chaque type de donnée

void *BLOC[64];
void *BLOC_p;
short Mem_aviable=1024;
short nb_ko=1;

__attribute__((regparm))void *ALLOC_MEM(short mem_to_alloc)
     {
	                   mem_to_alloc=mem_to_alloc+2;
	  	           if(Mem_aviable<mem_to_alloc)
 			   {
    					BLOC[nb_ko]=malloc(1024);
    					BLOC_p = BLOC[nb_ko];
    					memset(BLOC_p,0,1024);
    					nb_ko++;
    					Mem_aviable=1024;   	   	          	
   		            }	
  			   Mem_aviable = Mem_aviable - mem_to_alloc;
  			   void *sav = BLOC_p;
  			   BLOC_p++;
  			   return sav;
    }


En fait c'est au niveau du BLOC_p++ que ça cloche. Il faudrait indiquer de quel type de donnée il s'agit en mettant par exemple
(xml_tree*)BLOC_p++; pour mes balises XML. Le truc c'est que je ne sais pas comment passer le type de pointeur des données à la fonction.
www.wikio.fr/user1921&info=comments

455

Et BLOC_p+=mem_to_alloc ne te convient pas?

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

456

Si alors justement ! Avec du texte ça marche mais avec les paramètres ça ne marche pas. Je ne comprends pourquoi.
Mais bon d'après ce que tu vient de me dire ça doit marché onc je vais encore essayer de voir ce qui cloche. merci smile
www.wikio.fr/user1921&info=comments

457

Pour que ça marche je suis obligé de faire un bloc et une fonction pour chaque type de donné sinon ça ne marche pas !
En gros pour que ça marche il faut que je fasse ça :

// Pour le texte
void *BLOC[64];
void *BLOC_p;
BLOC_p=BLOC[0]=malloc(1024);
memset(BLOC_p,0,1024);
short Mem_avaible=1024;
short nb_ko=1;
__attribute__((regparm))void *ALLOC_MEM(short mem_to_alloc)
     {
	        
	  			if(Mem_avaible<mem_to_alloc)
 					{
    					BLOC[nb_ko]=malloc(1024);
    					BLOC_p = BLOC[nb_ko];
    					memset(BLOC_p,0,1024);
    					nb_ko++;
    					Mem_avaible=1024;   	   	          	
   				}	
  				Mem_avaible = Mem_avaible - mem_to_alloc;
  				void *sav = BLOC_p;
  				BLOC_p = BLOC_p+mem_to_alloc;
  				return sav;
		 }

  // Pour les paramètres
     void *PARAM_BLOC[64];
       void *PARAM_BLOC_p=PARAM_BLOC[0]=malloc(1024);
       short param_mem=1024;
       short nb_ko_param=1;
       memset(PARAM_BLOC_p,0,1024);
       
       void *ALLOC_PARAM_MEM(short mem_to_alloc)
       {
	  			if(param_mem<(signed)mem_to_alloc)
 					{
                	   	          	
    					PARAM_BLOC[nb_ko_param]=malloc(1024);
    					PARAM_BLOC_p = PARAM_BLOC[nb_ko_param];
    					memset(PARAM_BLOC_p,0,1024);
    					nb_ko_param++;
    					param_mem=1024;   	   	          	
   				}	
  				param_mem = param_mem - (mem_to_alloc);
  				void *sav = PARAM_BLOC_p;
  				PARAM_BLOC_p=PARAM_BLOC_p +mem_to_alloc;
  				return sav;
  			
		}



Alors que ça suffirait pour chaque type de donnée :
void *BLOC_p;
BLOC_p=BLOC[0]=malloc(1024);
memset(BLOC_p,0,1024);
short Mem_avaible=1024;
short nb_ko=1;
__attribute__((regparm))void *ALLOC_MEM(short mem_to_alloc)
     {
	        
	  			if(Mem_avaible<mem_to_alloc)
 					{
    					BLOC[nb_ko]=malloc(1024);
    					BLOC_p = BLOC[nb_ko];
    					memset(BLOC_p,0,1024);
    					nb_ko++;
    					Mem_avaible=1024;   	   	          	
   				}	
  				Mem_avaible = Mem_avaible - mem_to_alloc;
  				void *sav = BLOC_p;
  				BLOC_p = BLOC_p+mem_to_alloc;
  				return sav;
		 }



Cette fois je n'y comprend plus rien du tout !
www.wikio.fr/user1921&info=comments

458

J'ai la flemme de tout lire mais qu'est-ce qui va pas avec ./454+./455 ?

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

459

En gros à la fin du parsing et juste avant l'affichage du texte il y a un Adress Error même si aucun bloc n'a été alloué depuis le premier. C'est trop bizarre. sad
www.wikio.fr/user1921&info=comments

460

Alors ce qui ne va pas c'est que quand je place à la suite dans un Bloc des structures avec des paramètres et du texte il y a plantage à la fin du parsing.
Donc je suis obligé d'utiliser un bloc de mémoire pour chaque type de donnée : là c'est 100 % sûr que ça marche.
www.wikio.fr/user1921&info=comments

461

Snon je voulais essayer de débugger en créant un fichier TEXT avec fopen() comme ça je peux mieux voir cvomment sont organiser les données mais je ne sais pas trop comment faire.

Voila ce que j'ai fait :

void *ALLOC_MEM(short mem_to_alloc)
       {
	  			
	  			if(mem_avaible<(signed)mem_to_alloc)
 					{
                	   	          	
    					FILE *File =fopen("debugp","w+");
    					fwrite(File,1024,1,BLOC_p);
    				        fclose(File); 
    					BLOC[nb_ko]=malloc(1024);
    					BLOC_p = BLOC[nb_ko];
    					memset(BLOC_p,0,1024);
    					nb_ko++;
    					mem_avaible=1024; 
    						   	          	
   				}	


Mais évidement ce n'est pas correcte et lorsque j'ouvre le fichier avec l'éditeur de texte il plante !

www.wikio.fr/user1921&info=comments

462

On ne peut pas utiliser fwrite en mode texte.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

463

si on peut utiliser fread aussi, le resultat n'est pas garanti mais en C ANSI on peu les utiliser (deja fait et supris du resultat ^^)
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

464

Ah oui, c'est fprintf() ?
www.wikio.fr/user1921&info=comments

465

Comme "le resultat n'est pas garanti", ben, on fait mieux de ne pas l'utiliser. grin
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

466

Raphaël
: Ah oui, c'est fprintf() ?

fprintf, fputs, putc, fputc. Bref, tout ce qui travaille sur des caractères.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

467

Kevin Kofler
:
Raphaël
: Ah oui, c'est fprintf() ?

fprintf, fputs, putc, fputc. Bref, tout ce qui travaille sur des caractères.

exact

Le "seul" avantage du mode texte est que pour les \n on a pas a se soucier de comment ça marche sur la plateforme sinon a pars ça l'utilité est douteuse..
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

468

Bah c déjà pas mal, non?

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

469

Ok, merci.
Bon par contre ça ne marche toujours pas. sad
Voilà ce que je fais :
J'écris dans le fichier tout les caractères du bloc ou je stoque les données en sachant que je ne sais pas bien comment c'est fait et notament ou sont les caractère NULL.
Le problème c'est qu'avec ce code ça s'arrête à la première chaîne de caractère que j'ai placé dans le bloc.
Avec fputs il y a tout mais c'est répété tout pleins de fois ce qui fait un fichier de plus de 12 ko au lieu de 1024 (enfin un peu plus).

fclose(File);
                                        FILE *File=fopen("aemlpe","w");
    					short i=0;
    					unsigned char *str = TEXT_BLOC[0];
    					for(i=0;i<1024;i++)
    					{
    						fputc(str[i],File);
    					}
 

Normalement tout les caractères du Bloc devraiy être copié mais on dirait que ça s'arrête... ou c'est l'éditeur de texte de la Ti qui fait ça ?
www.wikio.fr/user1921&info=comments

470

Le caractère \0 n'est pas valide dans une chaîne de caractères ni dans un fichier texte. Tu es en train d'écrire tes données en binaire dans un fichier texte! Je ne comprends pas du tout ce que tu veux faire...
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

471

et si tu veux ouvrir un fichier texte avec fopen il faut le préciser !!

fopen("fichier","tw")
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

472

Avec TIGCC, pas obligatoirement: "If a 't' or 'b' is not given in the mode string, 't' is assumed".
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

473

pas propre.. et ça risque de ne pas passer correctement suivant les compilo

d'ailleur c'est pas pasque la lib le permet qu'il faut prendre de mauvaises habitudes.
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

474

fopen("...", "w") est clairement défini dans le standard, et c'est un fichier texte par défaut. Donc c'est propre.
So much code to write, so little time.

475

Non, c'est règlable en modifiant _fmode.
Et ce n'est vraiment pas propre pour un programme censé être portable. D'où mon "Avec TIGCC".
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

476

Ca se trouve où _fmode ?
So much code to write, so little time.

477

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt__fmode.asp (valable aussi pour MinGW qui utilise le même runtime)
http://www.delorie.com/djgpp/doc/libc/libc_315.html
Mais c'est spécifique DOS/Windows, pas du C standard. Pour *nix, il ne distingue pas entre mode texte et mode binaire, donc pas besoin de _fmode. Pour les autres systèmes (dont TIGCC smile), ben ils font un peu ce qu'ils veulent.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

478

C'est pas censé être texte par défaut? hum (hors appel système particulier pour changer ça, bien sûr)
Perso j'ai jamais utilisé une seule fois le flag "t"...


EDIT : c'est bien texte par défaut :
The argument mode points to a string. If the string is one of the following, the file is
open in the indicated mode. Otherwise, the behavior is undefined.214)
r open text file for reading
w truncate to zero length or create text file for writing
a append; open or create text file for writing at end-of-file
rb open binary file for reading
wb truncate to zero length or create binary file for writing
ab append; open or create binary file for writing at end-of-file
r+ open text file for update (reading and writing)
w+ truncate to zero length or create text file for update
a+ append; open or create text file for update, writing at end-of-file
r+b or rb+ open binary file for update (reading and writing)
w+b or wb+ truncate to zero length or create binary file for update a+b or ab+ append; open or create binary file for update, writing at end-of-file

(et "rt" n'est qu'une extension, dont il n'est fait mention nulle part dans le standard)

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

479

De toute façon, c'est aussi texte par défaut en pratique:
* sous *nix, il n'y a qu'un seul mode smile,
* sous DOS/Windows, la valeur par défaut de _fmode est O_TEXT,
* sous TIGCC, le mode par défaut est le mode texte.
Donc voilà. smile
En revanche, il risque d'y avoir un problème avec Cygwin quand on lui dit d'utiliser le mode binaire par défaut dans certains répertoires, pour faire marcher les programmes *nix qui pensent qu'il n'y a qu'un seul mode et qu'ils sont libres de lire/mettre du binaire en ouvrant seulement en "r"/"w". Dans ce cas, on est obligés de mettre "rt" si on veut vraiment le mode texte (avec la conversion des CRLF). D'un autre côté, "rt" n'est visiblement pas du C standard, et même si Linux l'ignore complètement, d'autres plateformes pourraient râler. Bref, c'est lourd. sad
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

480

D'ailleurs, TIGCC/*nix utilise "rt" et "wt" depuis longtemps. C'est utilisé à chaque compilation (dans patcher.c) depuis la 0.94 bêta 18 r4 déjà, et personne ne s'en est plaint. J'en conclus que ça marche au moins sous Linux, FreeBSD, Solaris, Irix et OS X, vu que j'ai eu des reports de succès sous toutes ces plateformes-là.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité