五、存储器管理MEM
(1)void * addr = MEM_alloc(int segid,Uns size,Uns align)
指定存储段分配连续块,返回起始地址
segid = 存储段的标识符或者ID号
size 块大小等于多少个字
align 边界条件只为0或2的幂若align为0、1则无约束
(2)void * addr = MEM_calloc(segid, size, align)
分配内存并初始化为0
(3)int segid = MEM_define(Ptr base, Uns length, MEM_Attrs* attrs)
定义一个新的存储段。返回值为存储段的ID标号
attr参数为NULL,会按照默认参数进行配置,段的参数由结构体type MEM_Attrs规定
此函数仅在main函数中使用
base: 新段的基地址
length:段长度
attrs:段属性
(4)bool status = MEM_free(segid,addr,size)
释放申请的动态内存不能在SWI和HWI中调用
调用之前,用LCK中API查看内存块的锁定情况
(5)void MEM_redefine(segid,base,length)
重新定义一个存储段,只能在main中调用
(6)bool status = MEM_stat(int segid, MEM_Stat * statbuf)
segid 存储段标识符
statbuf 状态缓存区指针
struct mem_stat{
Uns size;//存储段大小
Uns used;//已经使用的数量
Uns length;//最大连续存储块长度
}
同理:若segid有效,则MEM_stat返回TRUE
不能在SWI和HWI中使用,应判断锁定情况
(7)void * addr = MEM_valloc(int segid, Uns size, Uns align, char value)
先申请内存,初始化为指定的值value六、C6000专用模块C64x
(1)Uns oldmask = C64_diableIER(Uns mask)
关闭相应的中断返回值实际屏蔽的中断
(2)void C64_enableIER(Uns oldmask)
开放相应的中断
Uns oldmask;
oldmask = C64_disableIER(0x1); // disable INT0
C64_enableIER(oldmask); // enable INT0
(3)void C64_plug(int vecid, Fxn fxn, int dmachan)
插入一个中断向量
int vecid: 中断序号
Fxn fxn: 中断服务程序的函数指针
int dmachan: 插入操作使用的DMA通道
将ISFP写到中断服务表IST中。若IST在外部RAM,则CPU复制代替DMA,此时DMA为-1
IST在片内RAM时,使用DMA方式,是0,1,2,3用户保证在函数调用时该DMA通道有效
|