硬汉嵌入式论坛

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

[FreeRTOS] vTaskList()中必须用到大数组的问题

[复制链接]

65

主题

432

回帖

632

积分

金牌会员

积分
632
发表于 2018-1-8 12:41:36 | 显示全部楼层 |阅读模式
调用该函数,能把系统任务使用的堆栈等情况组装到一个大数组里,比如pcWriteBuffer[500],然后通过串口打印出来,对于观察系统资源的运行情况非常方便,但是里面有个问题,我用的是103C8T6,只有20K的内存,该数组的声明,直接导致我的内存使用超过20K,在 uC/OS-II 里不是这种方式,而是通过循环打印所有TCB的使用情况来实现的,这样不需要申请一个大数组了,FreeRTOS里,每个任务大概需要40个字节的空间来装下 vTaskList() 函数得到的信息,如果有20个任务,那就需要800个字节,这样的内存占用对于资源有限的小型M3来说,是致命的,有没有类似于 uC/OS-II 里访问资源运行情况的办法,不占用多少内存,还能访问打印出所有任务资源占用情况的办法?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107914
QQ
发表于 2018-1-8 14:51:04 | 显示全部楼层
FreeRTOS暂时没有好用的方式了,到时可以倒腾下IAR或者TrueSTUDIO带的FreeRTOS插件,效果还凑活。
回复

使用道具 举报

65

主题

432

回帖

632

积分

金牌会员

积分
632
 楼主| 发表于 2018-1-8 15:06:56 | 显示全部楼层
主要是要烧到产品里,监视运行情况
回复

使用道具 举报

65

主题

432

回帖

632

积分

金牌会员

积分
632
 楼主| 发表于 2018-1-8 20:54:18 | 显示全部楼层
安富莱有没有兴趣解决这个问题?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107914
QQ
发表于 2018-1-9 00:55:18 | 显示全部楼层
taobaofarmer 发表于 2018-1-8 20:54
安富莱有没有兴趣解决这个问题?

暂时没有精力去弄了,后面我研究下,可以像uCOS那样将部分源代码弄出来,直接让其打印。
回复

使用道具 举报

0

主题

4

回帖

4

积分

新手上路

积分
4
发表于 2018-1-9 17:29:57 | 显示全部楼层
动态申请试试,打印完就释放了
回复

使用道具 举报

65

主题

432

回帖

632

积分

金牌会员

积分
632
 楼主| 发表于 2018-1-10 12:39:14 | 显示全部楼层
跟动态不动态没关系,还是系统函数实现的问题,这个函数很致命,也不合理,其实把 vTaskList() 函数重载一遍应该就能实现像uC那样分任务块循环打印的功能,不消耗太大的内存,这个事情安富莱做一下是很有意义的,我这也研究一下按uC的方式把这个函数重载一下
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-18 14:20 , Processed in 0.269194 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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