FreeRTOS+cJSON记录自己一个愚蠢的问题

FreeRTOS+cJSON记录自己一个愚蠢的问题

这二天在整cJSON,用的是STM32L151C8的片子,首先上了FreeRTOS,妥妥的跑起来了,然后上了cJSON,去的官网下载的库
在这里插入图片描述

这个真心有点大。
然后就出现了问题,一直卡在线程中切换不了了。
if( listCURRENT_LIST_LENGTH( &( pxReadyTasksLists[ tskIDLE_PRIORITY ] ) ) > ( UBaseType_t ) 1 ) { taskYIELD(); } else { mtCOVERAGE_TEST_MARKER(); }
就是卡死在这里了,也不知道原因。最开始以为是官方库有问题呢。
后来问人要了一份库,小了挺多的,还是卡死了(不应该啊,人家用的好好的。)仔细看了下代码,原来这个库把malloc的函数替换了。有思路了,应该是内存开辟不够的原因。
这个库的思想是替换cJSON中的内存申请函数,用mymalloc去管理,这样这部分的内存就单独管理了不用算在任务堆中了。
在这里插入图片描述
我这也没有cJSON具体的内存需要的计算方式。可以给大家一个大概的。
在这里插入图片描述
这个用库组合小于2k
在这里插入图片描述
这个2k不够,我开了4k大小

我觉得以后小型号的片子上这些大量内存的库还是要小心,最好不要用。(而且不要一位的上最新的,MD真心大的要命)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`pxReadyTasksLists`是FreeRTOS一个非常重要的全局变量,它是一个指向就绪任务列表数组的指针,每个就绪任务列表都代表一个优先级,列表中存放着优先级相同的准备好运行的任务。 在FreeRTOS中,任务的调度是基于优先级的,优先级越高的任务在任务调度器中被调度的概率越大,因此优先级越高的任务会更早地得到执行。当一个任务准备好运行时,它会被添加到相应的就绪任务列表中,等待任务调度器调度。 `pxReadyTasksLists`数组的下标即为任务的优先级,例如`pxReadyTasksLists[0]`表示优先级为0的就绪任务列表,`pxReadyTasksLists[1]`表示优先级为1的就绪任务列表,以此类推。每个就绪任务列表都是一个指向`xList`结构体的指针,`xList`结构体定义了一个双向链表,用于存放任务控制块(TCB)。 具体来说,当一个任务准备好运行时,它的TCB会被插入到相应的就绪任务列表中。当任务调度器需要选择下一个要执行的任务时,它会从就绪任务列表中选择优先级最高的任务,并将该任务从就绪任务列表中移除,然后切换到该任务的上下文,开始执行该任务。 需要注意的是,`pxReadyTasksLists`数组并不直接记录任务的状态,而是记录了准备好运行的任务的控制块。如果一个任务被阻塞了,它的TCB就会从就绪任务列表中移除,等到任务解除阻塞后,它的TCB会再次被插入到相应的就绪任务列表中。因此,在使用`pxReadyTasksLists`数组时,需要注意区分任务的阻塞状态和就绪状态。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值