Buchempfehlung
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Umfassend, aber leicht verständlich führt dieses Buch in die Programmierung von ATMEL AVR Mikrocontrollern ein. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

fb:porticula NoPaste

Info
Info / Hilfe
Liste
Übersicht / Liste
Neu
Datei hochladen
Suche
Quellcode suchen
Download
Dateidownload

core_memman.bi

Uploader:MitgliedThePuppetMaster
Datum/Zeit:26.08.2008 22:12:42

'###############################################################################################################
'###############################################################################################################
'###   F B - C O R E
'###############################################################################################################
'###############################################################################################################
'### Version:  1.00.0
'### Revision: 0
'###############################################################################################################
'### (c) 2008 By.: /_\ DeltaLab's Germany [experimental computing]
'### Author:       Martin Wiemann
'### Date of Idea: 2008.08.16 - 17:55:38
'###############################################################################################################
'### Copy('s) of this code or a part of this IS allowed!!!
'###############################################################################################################





'###############################################################################################################
Dim Shared G_Mem_Init                   as UByte        = 0
Dim Shared G_Mem_FirstPtr               as UInteger     = 0
Dim Shared G_Mem_FirstMemMapPtr         as UInteger     = 0
Dim Shared G_Mem_FreeBackSizeKB         as UInteger     = 0
Dim Shared G_Mem_PageSizeKB             as UInteger     = 0
Dim Shared G_Mem_PageCount              as UInteger     = 0
Dim Shared G_Mem_PageInUse              as UInteger     = 0
Dim Shared G_Mem_MemMap                 as UByte Ptr    = 0





'###############################################################################################################
Private Function MEM_Init() as Integer
If G_Mem_Init <> 0 Then Return GURU_MemMan_Already_Init
G_Mem_FirstPtr          = 2 * 1024 * 1024
G_Mem_FirstMemMapPtr    = G_Mem_FirstMemMapPtr + 1024 * 1024
G_Mem_PageSizeKB        = 4000
G_Mem_FreeBackSizeKB    = 1000
G_Mem_PageCount         = (Core_MBS.V_Memsize_High - G_Mem_FreeBackSizeKB) \ (G_Mem_PageSizeKB * 8)
G_Mem_MemMap            = Cast(UByte Ptr, G_Mem_FirstPtr)
G_Mem_PageInUse         = 0
Return GURU_NoError
End Function





'###############################################################################################################
Private Function MEM_Page_FreeGet(ByRef V_PageID as UInteger, ByRef V_PageSizeKB as UInteger) as Integer
V_PageID = 0
Dim TPtr as UByte Ptr = G_Mem_MemMap
For X as UInteger = 0 to G_Mem_PageCount - 1
    If *TPtr <> 255 Then
        Dim V as UInteger = *TPtr
        For Y as UInteger = 0 to 7
            If (V and 1) = 0 Then
                *TPtr = *TPtr And Not Y
                G_Mem_PageInUse += 1
                V_PageID = X * Y
                V_PageSizeKB = G_Mem_PageSizeKB
                Return GURU_NoError
            End If
            V = V SHR 1
        Next
        Return GURU_MEMMAN_MemoryPageAllocError
    End If
    TPtr += 1
Next
Return GURU_MEMMAN_NoFreeMemoryFound
End Function


'====================================================================================================================
Private Function MEM_Page_FreeSet(ByVal V_PageID as UInteger) as Integer
Dim VB as UInteger = V_PageID Mod 8
Dim V as UInteger = V_PageID \ 8
If V >= G_Mem_PageCount Then Return GURU_MEMMAN_MemoryPageIDOutOfRange
Dim TPtr as UByte Ptr = G_Mem_MemMap + V
If (*TPtr And VB) <> 0 Then Return GURU_MEMMAN_MemoryPageAlreadyFree
If G_Mem_PageInUse = 0 Then Return GURU_MemMan_MemoryPageUseCountError
G_Mem_PageInUse -= 1
*TPtr = *TPtr Or VB
Return GURU_NoError
End Function


'====================================================================================================================
Private Function MEM_Page_MapShot(V_MemPtr as Any Ptr) as Integer
'Eine Copy (Screenshot) der Speicherauslastung (MemoyMap) erstellen
Return GURU_NoError
End Function