2011-11-21 72 views
-1

下面是相關的結構:簡單的編碼內核代碼中的錯誤(潛在的)

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

if表達式中多餘的分號? – user7116

+0

是否應該說'counter ++;'應該改爲'counta ++'? – necromancer

+0

對不起,它是假設所有的計數器。我在原始代碼中使用了counta,但是我擔心它可能會讓人困惑。 – user1056006

回答

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

不應該是這樣:

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

而且,在某種程度上比較空指針讓我感到不安。

+0

我想比較盒子的地址和從 rt_alloc_box函數 – user1056006

+0

免費的變量也如果(盒== *(陣列[我] - >免費))似乎並不能解決問題,因爲他們現在是不同的類型 – user1056006