C语言 内核代码中的简单编码错误(潜在的)



下面是相关的结构体:

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;

下面是有问题的代码(只有"add BY ME"的部分):

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放入数组以及检查它是否在那里,但我不能用内存块地址做同样的事情。这很可能只是一个简单的编码错误,而不是概念性的。

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

应该是:

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

而且,比较void指针让我感到不安。

最新更新