📄 os_hibufram.c
字号:
/*
TI TMS320F2812设备高速缓存处理
设备高速缓存空间:0X3f8000~0X3F9FFF
设备高速缓存大小:8192 WORDS
设备高速缓存分配:每个缓存块大小为128WORDS,共分为32块
*/
#include "..\ucosii\ucos_ii.h"
#define HiBufBeginAddr (INT32U)0x3f8000
INT32U HiBufRamStatus;
INT32U HiBufRamLink;
const INT32U HiBufRamStatusTbl[32] =
{
0x00000001,0x00000003,0x00000007,0x0000000f,0x0000001f,0x0000003f,0x0000007f,0x000000ff,
0x000001ff,0x000003ff,0x000007ff,0x00000fff,0x00001fff,0x00003fff,0x00007fff,0x0000ffff,
0x0001ffff,0x0003ffff,0x0007ffff,0x000fffff,0x001fffff,0x003fffff,0x007fffff,0x00ffffff,
0x01ffffff,0x03ffffff,0x07ffffff,0x0fffffff,0x1fffffff,0x3fffffff,0x7fffffff,0xffffffff
};
void HiBufRamInit(void)
{
HiBufRamStatus = 0;
HiBufRamLink = 0;
}
/*
设备高速缓存分配函数
参数:
AllocSize---缓存分配大小
返回:
(1)0---设备高速缓存分配不成功
(2)设备高速缓存指针
*/
void *HiBufRamAlloc(INT16U AllocSize)
{
INT32U t;
INT16U blocksize,i,beginblock,blocknum;
blocksize = AllocSize>>7;
if(AllocSize & 0x007f)
{
blocksize++;
}
if((blocksize==0)||(blocksize>32))
{
return (void *)0;
}
t = HiBufRamStatus;
blocknum = 0;
for(i=0;i<32;i++)
{
if(t & 0x00000001)
{
blocknum = 0;
t >>= 1;
continue;
}
t >>= 1;
if(blocknum==0)
{
beginblock = i;
}
blocknum++;
if(blocknum==blocksize)
{
t = HiBufRamStatusTbl[blocksize-1];
HiBufRamStatus |= t<<beginblock;
HiBufRamLink |= (t-((INT32U)1<<(blocksize-1)))<<beginblock;
return (void *)(HiBufBeginAddr+((INT32U)beginblock<<7));
}
}
return (void *)0;
}
/*
设备高速缓存释放函数
*/
void HiBufRamFree(void *AllocPtr)
{
INT32U t;
INT16U blocksize,i,beginblock;
beginblock = ((INT32U)AllocPtr - HiBufBeginAddr)>>7;
blocksize = 1;
t = HiBufRamLink >> beginblock;
for(i= beginblock;i<32;i++)
{
if((t&0x00000001)==0)
{
HiBufRamStatus &= ~(HiBufRamStatusTbl[blocksize]<<beginblock);
HiBufRamLink &= ~(HiBufRamStatusTbl[blocksize]<<beginblock);
break;
}
blocksize++;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -