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);
}
}
问题解决了,原因没弄明白,似乎是栈溢出了,栈大小由128改为256之后就不会硬件错误了,但想不明白这几行代码怎么会需要这么大的栈空间 开下栈溢出中断回调,就可以看是否是栈溢出了,另外可以产看你这些函数运行期间的任务栈使用情况,这个任务先不做删除。 eric2013 发表于 2019-5-30 18:01
开下栈溢出中断回调,就可以看是否是栈溢出了,另外可以产看你这些函数运行期间的任务栈使用情况,这个任务 ...
现在这个问题似乎比我描述的复杂了,请问stm32启动文件里的Stack_Size和Heap_Size与freertos配置文件里的configTOTAL_HEAP_SIZE是什么关系,相互有什么影响吗? 502398542 发表于 2019-5-30 18:09
现在这个问题似乎比我描述的复杂了,请问stm32启动文件里的Stack_Size和Heap_Size与freertos配置文件里 ...
他们之间毫无关系的。
configTOTAL_HEAP_SIZE用于任务栈,FreeRTOS的各种结构体变量等
Heap_Size用于C库里面的malloc等
Stack_Size是系统栈 如果我使用pvPortMalloc申请内存,申请的是configTOTAL_HEAP_SIZE里定义的内存还是Heap_Size里定义的内存呢?
502398542 发表于 2019-5-31 16:37
如果我使用pvPortMalloc申请内存,申请的是configTOTAL_HEAP_SIZE里定义的内存还是Heap_Size里定义的内存呢 ...
configTOTAL_HEAP_SIZE eric2013 发表于 2019-5-31 16:44
configTOTAL_HEAP_SIZE
哦,那我理解的是对的,看来问题不在这,多谢多谢
页:
[1]