[PSoC™]

使用FreeRTOS,删除任务导致程序异常的原因

[复制链接]
564|8
手机看帖
扫描二维码
随时随地手机跟帖
IFX_Ida|  楼主 | 2024-3-29 12:04 | 显示全部楼层 |阅读模式
问题:
PSoC6的一些例程会包含FreeRTOS, 在使用这些例程时,如果尝试删除任务,可能会出现程序异常

可能的原因:
如果去debug的话会发现,异常出现在free的位置,我们可以看到如下信息:

4195166063d7cef498.png
也就是说在配置FreeRTOS的heap策略时出现了问题,如果配置heap_1是不支持free的,可以修改成heap_2或者其他的策略。
删除任务导致程序异常,相关的原因有很多,这里只列举出了一种,如果大家有遇到过类似的问题,可以讨论区交流分享。


---------------------------------------------------------------------------------------------------------------
英飞凌 MCU微控制器产品系列涵盖了从简单低成本到高性能专用全系列的各种组合,为要求出色的性能、连接能力和安全功能的各种场合应用提供了理想之选。此英飞凌 MCU论坛专注于Infineon的各种MCU产品及其在消费电子、工业和汽车应用各种领域的技术问题讨论与经验分享。无论您是经验丰富的工程师、热心的业余爱好者还是好奇的学习者,欢迎积极参与讨论,另外Infineon和合作伙伴的各种线上或线下活动信息也会在此公布。
欢迎访问英飞凌官方网站www.infineon.com获取更多的产品信息和资料,也欢迎访问英飞凌开发者社区https://community.infineon.com/ 与全球的专家和爱好者们交流问题。

使用特权

评论回复
tpgf| | 2024-5-8 08:34 | 显示全部楼层
FreeRTOS提供5种动态内存管理策略,分别为heap_1到heap_5

使用特权

评论回复
heimaojingzhang| | 2024-5-8 09:38 | 显示全部楼层
heap_2适用于需要释放的场合,且每次申请释放的内存都是固定大小的

使用特权

评论回复
keaibukelian| | 2024-5-8 10:40 | 显示全部楼层
heap_4也是用链表来管理,但是链表头用的是结构体,链表尾用的是指针,链表尾占用ucHeap内存

使用特权

评论回复
renzheshengui| | 2024-5-8 22:51 | 显示全部楼层
heap2的管理结构体链表是按照xBlockSize大小升序串起来,所以空闲块插入也是按照空闲块大小升序插入

使用特权

评论回复
paotangsan| | 2024-5-8 23:24 | 显示全部楼层
heap4在heap2基础上加入了合并内存碎片算法,把相邻的内存碎片合并成一个更大的块、且xEnd结构体占用的是内存堆空间

使用特权

评论回复
guanjiaer| | 2024-5-8 23:57 | 显示全部楼层
heap_1适用于只需分配,不需释放场合,执行时间确定,不会产生碎片,但是内存利用率不高

使用特权

评论回复
Burnon_FAE_1| | 2024-5-20 17:56 | 显示全部楼层
Heap_3分配方案只是简单封装了标准库函数中的malloc()和free(),在操作内存前挂起调度器,完成后再恢复,内存申请和释放函数实现很简单。

使用特权

评论回复
Burnon_FAE_1| | 2024-5-20 17:57 | 显示全部楼层
Heap_5分配方案与Heap_4相似,也采用最佳匹配算法和和合并算法来实现动态的分配内存,不同的是该方案允许内存堆跨越非连续的内存区域,即支持在地址不连续的内存堆中实现动态内存分配

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:英飞凌科技股份公司
简介:关于英飞凌——我们致力于打造一个更加便利、安全和环保的世界,在赢得自身成功发展的同时,积极践行企业社会责任。

15

主题

23

帖子

2

粉丝