Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

taille maximale allouable en RAM sur PalmOS 5.4

3 réponses
Avatar
Thomas Pornin
Hello,

j'ai sous la main un Palm Z22. Il tourne apparemment sous PalmOS 5.4. Si
je veux le programmer, je peux fabriquer un binaire pour processeurs
m68k, et l'envoyer sur le Palm qui le fera tourner dans un émulateur de
processeur 68000. Je peux aussi fabriquer du code ARM et l'invoquer
depuis le code 68000, moyennant quelques restrictions parce que je ne
peux pas prévoir à quelle adresse le code ARM sera chargé, et que l'OS
ne fournit pas de linker dynamique pour ce chargement (je pourrais
écrire ce linker, mais pour le moment ce n'est pas fait).

Je souhaiterais allouer de la RAM tranquillement, par morceaux assez
gros au besoin. Le Z22 dispose d'une quantité non négligeable de
méga-octets. PalmOS a une limite traditionnelle de 64 Ko (en fait un peu
moins) par bloc alloué (avec MemPtrNew()), ce que je trouve un peu
bas...

J'ai essayé et je peux allouer au plus 65505 octets d'un coup avec
MemPtrNew() sur mon Z22. Mais la documentation (le "Palm OS Companion")
dit à quelques endroits que cette limitation à 64 Ko pourrait être
supprimée dans une future version. Ma question principale est donc :
est-ce que le PalmOS 5.4 que j'ai sous la main a toujours,
intrinsèquement, cette limitation, ou est-ce qu'il y a moyen d'avoir un
gros bloc de mémoire dans lequel je pourrais taper librement ? C'est
pour un accès depuis le code ARM et la compatibilité avec d'autres
modèles m'indiffère.

Évidemment, sous réserve qu'il n'y ait pas de MMU active, je pourrais
toujours taper directement dans la RAM à la sauvage, mais ce serait
mieux si je pouvais faire en sorte que l'allocateur mémoire standard
évite la zone que je m'attribue.

En bref, quelqu'un a-t-il de la documentation un peu précise sur le
sujet ?


--Thomas Pornin

3 réponses

Avatar
LTH
Patrick V a écrit :

Je souhaiterais allouer de la RAM tranquillement, par morceaux assez
gros au besoin. Le Z22 dispose d'une quantité non négligeable de
méga-octets. PalmOS a une limite traditionnelle de 64 Ko (en fait un peu
moins) par bloc alloué (avec MemPtrNew()), ce que je trouve un peu
bas...



C'est bas.




et c'est vieux, non ? c'est plutot MemHandleNew voire même plutôt ce qui
il ya dans la gluelib
Avatar
LTH
Patrick V a écrit :
LTH a écrit, le 03/06/2007 15:42 :

et c'est vieux, non ? c'est plutot MemHandleNew



Bah, MemHandleNew() permet des blocs mouvants, mais ça obliger à locker.

voire même plutôt ce qui il ya dans la gluelib



Y'a des trucs dans la glue qu'il n'y aurait pas en 5.4 ???




ben... je sais pas.. je lis la doc... peut être que la doc AUSSI est
foireuse ;-)

MemGluePtrNew Function
Purpose

Allocate a new nonmovable chunk in the dynamic heap. Unlike MemPtrNew(),
this function lets you request chunks larger than 64KB.
Declared In
MemGlue.h
Prototype

MemPtr MemGluePtrNew (
UInt32 size
)

Parameters

? size
The desired size of the chunk.

Returns

Returns a pointer to the new chunk, or NULL if unsuccessful.
Comments

On versions of Palm OS prior to 3.5, this function acts exactly like
MemPtrNew() and won't allocate chunks larger than 64K.
Avatar
Thomas Pornin
According to LTH :
ben... je sais pas.. je lis la doc... peut être que la doc AUSSI est
foireuse ;-)

MemGluePtrNew Function
Purpose

Allocate a new nonmovable chunk in the dynamic heap. Unlike MemPtrNew(),
this function lets you request chunks larger than 64KB.



Ça marche chez moi. Je peux allouer 2 Mo d'un coup sur mon Z22 avec
cette fonction. Un peu de google me dit que MemPtrNew() et MemGluePtrNew()
reposent sur la même primitive du système, avec des flags différents.

Merci !


--Thomas Pornin