以下是相关结构:
typedef struct OS_BM {
void *free; /* Pointer to first free memory block */
void *end; /* Pointer to memory block end */
U32 blk_size; /* Memory block size */
U32 owner_one;
} *P_BM;
typedef struct NEW { //struct ADDED BY ME
void *free;
U8 pid;
} *P_GH;
以下是有问题的代码(仅“我添加”部分):
void *rt_alloc_box (void *box_mem) {
/* Allocate a memory block and return start address. */
void **free;
#if !(defined(__TARGET_ARCH_7_M) || defined(__TARGET_ARCH_7E_M))
int irq_dis;
irq_dis = __disable_irq ();
free = ((P_BM) box_mem)->free;
if (free) {
array[counter]->free=((P_BM) box_mem)->free; //ADDED BY ME- MAY NOT BE WORKING
array[counter]->pid = rt_tsk_self(); //ADDED BY ME
counter++; //ADDED BY ME
((P_BM) box_mem)->free = *free;
}
if (!irq_dis) __enable_irq ();
#else
do {
if ((free = (void **)__ldrex(&((P_BM) box_mem)->free)) == 0) {
__clrex();
break;
}
} while (__strex((U32)*free, &((P_BM) box_mem)->free));
#endif
return (free);
}
int free_owner (void *box_mem, void *box){ //FUNCTION ADDED BY ME
int i;
for(i = 0; i<8;i++){
if (box == array[i]->free;){ //MAY NOT BE WORKING
if(rt_tsk_self() == (array[i]->pid))
return (0);
}
}
return (1);
}
代码说明:第一个功能是内存分配,但我需要为从池中分配的内存块添加保护/所有权。这就是为什么我将内存块地址以及进程ID(从rt_tsk_self()
返回)放入我创建的额外全局数组中。第二个函数只检查使用已分配块的进程是否与创建的进程具有相同的所有权(同样使用rt_tsk_self()
)。
实际问题:评论为“可能无法正常工作”的行似乎无法正常工作,因为我确信我可以将进程ID放入数组并检查它是否正常在那里,但我不能对内存块地址做同样的事情。这很可能只是一个简单的编码错误而不是概念错误。
答案 0 :(得分:0)
if (box == array[i]->free;){ //MAY NOT BE WORKING
不应该是:
if (box == *(array[i]->free)){ //MAY NOT BE WORKING
另外,以某种方式比较无效指针让我感到不安。