Вот соответствующие структуры:
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);
}
Код Описание: Первая функция связана с выделением памяти, но мне нужно добавить защиту / владение блоку памяти, выделенному из пула. Вот почему я помещаю адрес блока памяти, а также идентификатор процесса (возвращенный из rt_tsk_self()
) в дополнительный глобальный массив, который я создал. Вторая функция просто проверяет, имеет ли процесс с использованием выделенного блока то же владение, что и созданный (снова он использует rt_tsk_self()
).
Актуальная проблема: Строки, прокомментированные как «МОГУТ НЕ БЫТЬ РАБОТАЮТ», похоже, не работают, так как я уверен, что могу поместить идентификатор процесса в массив, а также проверить, что он находится в там, но я не могу сделать то же самое с адресом блока памяти. Скорее всего, это скорее простая ошибка кодирования, чем концептуальная.