【发布时间】:2019-09-10 09:42:39
【问题描述】:
我正在使用带有 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时,
似乎之前已经执行过释放,软件只是自动重置。
有人知道为什么会这样吗?
【问题讨论】:
标签: memory-management malloc free dynamic-memory-allocation freertos