Я использую встроенную плату с FreeRTOS.
В задаче я определил две структуры и использую pvPortMalloc
для выделения памяти. (Одна структура является членом другой)
Кроме того, я передаю адрес структуры некоторым функциям.
Однако при освобождении памяти с использованием vPortFree
.
возникают некоторые проблемы.
Ниже указан мой код (test_task.c
):
/* Struct definition */
typedef struct __attribute__((packed)) {
uint8_t num_parameter;
uint32_t member1;
uint8_t member2;
uint8_t *parameter;
}struct_member;
typedef struct __attribute__((packed)) {
uint16_t num_member;
uint32_t class;
struct_member *member;
}struct_master;
Я определяю глобальную структуру и массив ниже.
uint8_t *arr;
struct_master master:
Определение функции:
void decode_func(struct_master *master, uint8_t *arr)
{
master->member = pvPortMalloc(master->num_member);
for(int i = 0; i < scr->num_command; ++i){
master->member[i].parameter = pvPortMalloc(master->member[i].num_parameter);
do_something();
}
}
Операционная задача показана ниже.
В конце задания я хотел бы освободить память:
void test_task()
{
decode_func( &master, arr);
do_operation();
vPortFree(master.member);
for (int i = 0; i < master.num_member; ++i)
vPortFree(master.member[i].parameter);
hTest_task = NULL;
vTaskDelete(NULL);
}
Это нормально, чтобы освободить master.member
.
Однако, когда программа попробовала бесплатно master.member[i].parameter
,
кажется, что освобождение было выполнено раньше, и программное обеспечение просто сбрасывалось автоматически.
Кто-нибудь знает, почему так произошло?