🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: de.comp.sys.amiga.tech
2 messages
2 total messages Started by Joerg Kollmann Wed, 27 Mar 1996 12:29
wie programmiert man low memory handler?
#4466
Author: Joerg Kollmann
Date: Wed, 27 Mar 1996 12:29
44 lines
1642 bytes
Hallo Allerseits,

ich probiere gerade mit einem low memory-handler und habe das Problem, dass er
offenbar nicht tut, was er soll, naemlich Speicher freigeben. Falls sich jemand
damit auskennt und mir mal verraten koennte, wie es richtig ist und ob ich
MEM_TRY_AGAIN, MEM_ALL_DONE und MEM_DID_NOTHING richtig eingesetzt habe, waere
mir sehr geholfen.

In is_Data wird ein Array mit 10 vorher allokierten Bloecken zu je 1MB
uebergeben, das Hauptprogramm wartet nur noch auf CTRL_C.
Die Interrupt-Struktur wird mit
struct Interrupt lowInt = {NULL,NULL,NT_INTERRUPT,0,"LowHandler",pool,lowHandler};
initialisiert.
/* GCC */
int lowHandler()
{
  register struct MemHandlerData *mhd asm("a0");
  register APTR *data asm("a1");
  int i;
  APTR h;

  if((mhd->memh_RequestFlags & ~MEMF_CHIP) &&
     (mhd->memh_RequestSize<=maxmem(data)))
  {
    i=0;
    while((i<10) && (data[i]==NULL)) i++;
    if((i<10) && (data[i]))
    {
      h=data[i];
      data[i]=NULL;
      FreeMem(h,1024*1024);
      if(maxmem(data)>0)
        return MEM_TRY_AGAIN;
      else
        return MEM_ALL_DONE;
    }
  }
  return MEM_DID_NOTHING;
}

Vielen Dank im vorraus,
        Joerg
---
joergk@informatik.uni-bremen.de
Re: wie programmiert man low memory handler?
#4468
Author: Gunther Nikl
Date: Wed, 27 Mar 1996 16:12
18 lines
1231 bytes
Joerg Kollmann (joergk@waigel.informatik.uni-bremen.de) wrote:
> ich probiere gerade mit einem low memory-handler und habe das Problem, dass er
> offenbar nicht tut, was er soll, naemlich Speicher freigeben.
>
> /* GCC */
> int lowHandler()
> {
>   register struct MemHandlerData *mhd asm("a0");
>   register APTR *data asm("a1");

  Ich kann nicht sagen, ob der Handler richtig oder falsch ist. Aber die
  beide obigen Deklarationen sind nicht ausreichend. Die Parameter sind
  in _Scratch_ Register. Damit Du diese Werte in der ganzen Funktion hast,
  must Du die Werte in andere Variablen transferieren. Ansonsten kann es
  passieren, das alles anstandslos uebersetzt wurde, der Compiler die
  Register aber zwischendurch anderweitig nutzt...

  Gunther
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads