gpt4 book ai didi

c - 内核代码中(可能)存在简单的编码错误

转载 作者:行者123 更新时间:2023-11-30 19:50:05 24 4
gpt4 key购买 nike

以下是相关结构:

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() 返回)放入我创建的额外全局数组中。第二个函数只是检查使用分配 block 的进程是否与创建的进程具有相同的所有权(同样使用rt_tsk_self())。

实际问题:用“MAY NOT BE WORKING”注释的行似乎不起作用,因为我确信我可以将进程 ID 放入数组中并检查它是否有效在那里,但我不能对内存块地址做同样的事情。这很可能只是一个简单的编码错误,而不是概念性的。

最佳答案

 if (box == array[i]->free;){            //MAY NOT BE WORKING

这不应该是:

 if (box == *(array[i]->free)){            //MAY NOT BE WORKING

此外,不知怎的,比较空指针让我感到不安。

关于c - 内核代码中(可能)存在简单的编码错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8207179/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com