Voici les struct liés:simple erreur de codage (potentiellement) dans le code du noyau
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;
Voici le code en question (seule la partie "AJOUTÉE PAR 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);
}
Code Description: La première fonction concerne l'allocation de mémoire, mais j'ai besoin d'ajouter une protection/propriété au bloc de mémoire qui est alloué à partir du pool. C'est pourquoi je mets l'adresse de bloc de mémoire aussi bien que l'identificateur de processus (retourné de rt_tsk_self()
) dans un tableau global supplémentaire que j'ai créé. La deuxième fonction vérifie simplement si le processus d'utilisation du bloc alloué a la même propriété que celui créé (à nouveau, il utilise rt_tsk_self()
). Les lignes commentées avec "PEUT NE PAS ÊTRE TRAVAILLANT" ne semblent pas fonctionner car je suis sûr que je peux mettre l'identificateur de processus dans le tableau et vérifier qu'il est présent, mais Je ne peux pas faire la même chose avec l'adresse de bloc de mémoire. Il est très probable que ce soit simplement une erreur de codage plutôt que conceptuelle.
Point-virgule extrinsèque dans l'expression if? – user7116
pourrait-il être la ligne qui dit 'counter ++;' devrait plutôt dire 'counta ++'? – necromancer
désolé, il est supposé être COUNTER pour chacun d'eux. J'ai utilisé le compte à rebours dans le code original mais j'avais peur que cela puisse dérouter les gens. – user1056006