硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3600|回复: 7
收起左侧

[FreeRTOS] freertos任务删除导致硬件错误

[复制链接]

20

主题

72

回帖

132

积分

初级会员

积分
132
发表于 2019-5-30 17:01:13 | 显示全部楼层 |阅读模式
在任务中申请了内存,又释放了内存,然后删除任务,程序就进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("[ii]",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);                       
                }
}


回复

使用道具 举报

20

主题

72

回帖

132

积分

初级会员

积分
132
 楼主| 发表于 2019-5-30 17:38:35 | 显示全部楼层
问题解决了,原因没弄明白,似乎是栈溢出了,栈大小由128改为256之后就不会硬件错误了,但想不明白这几行代码怎么会需要这么大的栈空间
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2019-5-30 18:01:33 | 显示全部楼层
开下栈溢出中断回调,就可以看是否是栈溢出了,另外可以产看你这些函数运行期间的任务栈使用情况,这个任务先不做删除。
回复

使用道具 举报

20

主题

72

回帖

132

积分

初级会员

积分
132
 楼主| 发表于 2019-5-30 18:09:02 | 显示全部楼层
eric2013 发表于 2019-5-30 18:01
开下栈溢出中断回调,就可以看是否是栈溢出了,另外可以产看你这些函数运行期间的任务栈使用情况,这个任务 ...

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

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 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是系统栈
回复

使用道具 举报

20

主题

72

回帖

132

积分

初级会员

积分
132
 楼主| 发表于 2019-5-31 16:37:08 | 显示全部楼层
如果我使用pvPortMalloc申请内存,申请的是configTOTAL_HEAP_SIZE里定义的内存还是Heap_Size里定义的内存呢?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2019-5-31 16:44:55 | 显示全部楼层
502398542 发表于 2019-5-31 16:37
如果我使用pvPortMalloc申请内存,申请的是configTOTAL_HEAP_SIZE里定义的内存还是Heap_Size里定义的内存呢 ...

configTOTAL_HEAP_SIZE
回复

使用道具 举报

20

主题

72

回帖

132

积分

初级会员

积分
132
 楼主| 发表于 2019-5-31 16:54:29 | 显示全部楼层

哦,那我理解的是对的,看来问题不在这,多谢多谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-28 04:03 , Processed in 0.200469 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表