⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 os_hibufram.c

📁 uCOS-II在TMS320F2812上的移植
💻 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 + -