Beispiel #1
0
//------------------------------------------------------------------------------
static MUINT32 SYSRAM_TryAllocUser(
    SYSRAM_USER_ENUM const  User,
    MUINT32 const           Size,
    MUINT32 const           Alignment)
{
    MUINT32 Addr = 0;
    //
    SYSRAM_SpinLock();
    //
    if(SYSRAM_UserIsLocked(User))
    {
        SYSRAM_SpinUnlock();
        LOG_ERR("[User:%s]has been already allocated!",SysramUserName[User]);
        return 0;
    }
    //
    Addr = SYSRAM_AllocUser(User, Size, Alignment);
    if(Addr != 0)
    {
        SYSRAM_CheckClock();
    }
    SYSRAM_SpinUnlock();
    //
    return  Addr;
}
/* ------------------------------------------------------------------------------ */
static inline MBOOL SYSRAM_UserIsUnlocked(SYSRAM_USER_ENUM const User)
{
	if (SYSRAM_UserIsLocked(User) == 0) {
		return MTRUE;
	} else {
		return MFALSE;
	}
}
/* ------------------------------------------------------------------------------ */
static void SYSRAM_LockUser(SYSRAM_USER_ENUM const User, MUINT32 const Size)
{
	if (SYSRAM_UserIsLocked(User)) {
		return;
	}
	/*  */
	Sysram.TotalUserCount++;
	Sysram.AllocatedTbl |= (1 << User);
	Sysram.AllocatedSize[User] = Size;
	SYSRAM_SetUserTaskInfo(User);
	/* Debug Log. */
	if ((1 << User) & SysramLogUserMask) {
		SYSRAM_USER_STRUCT * const pUserInfo = &Sysram.UserInfo[User];
		LOG_MSG("[%s][%lu bytes]OK,Time(%lu.%06lu)",
			SysramUserName[User],
			Sysram.AllocatedSize[User], pUserInfo->TimeS, pUserInfo->TimeUS);
	}
}