502398542 发表于 2019-5-30 17:01:13

freertos任务删除导致硬件错误

在任务中申请了内存,又释放了内存,然后删除任务,程序就进hardfault了
用xPortGetFreeHeapSize查看了内存值,申请的已经被释放了
代码如下:
static void vTaskInitSetting(void *pvParameters)
{
                while(1)
                {       
                                heapcheck=xPortGetFreeHeapSize();
                       
                                portCHAR * root_send_s;
                                json_t* root_send = json_object();
                                json_object_set_new(root_send,"tx",json_string("msg"));                                                               
                                json_t* array=json_pack("",18, 22);                                                       
                                json_object_set_new(root_send, "Info", array);                               
                                root_send_s = json_dumps(root_send, JSON_ENCODE_ANY);               
                                send(SOCK_TCPS,(u8 *)root_send_s,strlen(root_send_s));       
                                json_decref(root_send);//释放内存
                                vPortFree(root_send_s);//释放内存       
       
                                heapcheck=xPortGetFreeHeapSize();
               
                                vTaskDelete(NULL);                       
                }
}


502398542 发表于 2019-5-30 17:38:35

问题解决了,原因没弄明白,似乎是栈溢出了,栈大小由128改为256之后就不会硬件错误了,但想不明白这几行代码怎么会需要这么大的栈空间

eric2013 发表于 2019-5-30 18:01:33

开下栈溢出中断回调,就可以看是否是栈溢出了,另外可以产看你这些函数运行期间的任务栈使用情况,这个任务先不做删除。

502398542 发表于 2019-5-30 18:09:02

eric2013 发表于 2019-5-30 18:01
开下栈溢出中断回调,就可以看是否是栈溢出了,另外可以产看你这些函数运行期间的任务栈使用情况,这个任务 ...

现在这个问题似乎比我描述的复杂了,请问stm32启动文件里的Stack_Size和Heap_Size与freertos配置文件里的configTOTAL_HEAP_SIZE是什么关系,相互有什么影响吗?

eric2013 发表于 2019-5-31 15:01:14

502398542 发表于 2019-5-30 18:09
现在这个问题似乎比我描述的复杂了,请问stm32启动文件里的Stack_Size和Heap_Size与freertos配置文件里 ...

他们之间毫无关系的。
configTOTAL_HEAP_SIZE用于任务栈,FreeRTOS的各种结构体变量等
Heap_Size用于C库里面的malloc等
Stack_Size是系统栈

502398542 发表于 2019-5-31 16:37:08

如果我使用pvPortMalloc申请内存,申请的是configTOTAL_HEAP_SIZE里定义的内存还是Heap_Size里定义的内存呢?

eric2013 发表于 2019-5-31 16:44:55

502398542 发表于 2019-5-31 16:37
如果我使用pvPortMalloc申请内存,申请的是configTOTAL_HEAP_SIZE里定义的内存还是Heap_Size里定义的内存呢 ...

configTOTAL_HEAP_SIZE

502398542 发表于 2019-5-31 16:54:29

eric2013 发表于 2019-5-31 16:44
configTOTAL_HEAP_SIZE

哦,那我理解的是对的,看来问题不在这,多谢多谢
页: [1]
查看完整版本: freertos任务删除导致硬件错误