搜索
bottom↓
回复: 17

使用FreeRTOS有没有特别注意的地方?

[复制链接]

出0入0汤圆

发表于 2010-2-24 13:55:43 | 显示全部楼层 |阅读模式
准备在LM3S8962上使用FreeRTOS,有没有特别注意的地方?特别是需要注意的Bug?

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2010-2-24 14:36:27 | 显示全部楼层
不要动态删除任务和创建任务,其他的没啥

出0入0汤圆

 楼主| 发表于 2010-2-24 15:59:57 | 显示全部楼层
谢谢楼上

出0入0汤圆

发表于 2010-2-24 16:08:21 | 显示全部楼层
每个任务堆栈分配大一点,别溢出了。

出0入0汤圆

 楼主| 发表于 2010-2-24 20:08:44 | 显示全部楼层
多谢

出0入0汤圆

 楼主| 发表于 2010-2-25 11:27:19 | 显示全部楼层
顶一下,希望用过的网友说一下经验。

出0入4汤圆

发表于 2010-3-3 19:42:48 | 显示全部楼层
内存管理做的不行,动态删除和创建都不行,初始分配的时候要多留点,但是这样设计很浪费ram

出0入0汤圆

发表于 2010-3-3 20:18:54 | 显示全部楼层
回复【6楼】MoMo_avr  
内存管理做的不行,动态删除和创建都不行,初始分配的时候要多留点,但是这样设计很浪费ram
-----------------------------------------------------------------------

限制这么多?看来这点上,RT-Thread很有先见之明,嘿嘿

出0入4汤圆

发表于 2010-3-3 21:12:26 | 显示全部楼层
开始设计任务时候留多点,再debug时候要修改一个配置选项。

/* 此项用于DEBUG,来看是否有栈溢出,需要你自己编相应检查函数void vApplicationStackOverflowHook(xTaskHandle *pxTask, signed portCHAR *pcTaskName )  */
#define configCHECK_FOR_STACK_OVERFLOW      0

堆栈溢出是系统开发时候常有的事情。

一般我使用的是Heap_2.c,因为我是用stm32。但是这个管理内存方法效率真是不高。若任务频繁申请与释放“随机”大小的内存,RAM的分配会很糟糕哦,宏观看不再是一块一块的连续,而是碎片,这时再申请大容量的内存,虽然总容量足够,但由于全为碎片,却申请不到内存。大家设计要注意哦。

出0入0汤圆

 楼主| 发表于 2010-3-5 14:35:39 | 显示全部楼层
谢谢

出0入0汤圆

发表于 2010-4-22 09:34:56 | 显示全部楼层
自带的内存管理程序确实不是很好,但是绝对是代码量最小。
就两个函数,你可以用你满意的内存管理程序。
这个问题都是小问题。

出0入0汤圆

发表于 2010-5-18 18:33:27 | 显示全部楼层
同意ls,自带的比较小巧,功能简单。heap_3应该是功能强了,但又太占资源。自己编写或者移植个满意的就好。比如 ucosII的内存管理,看能移植过来不?

出0入0汤圆

发表于 2010-5-18 19:48:15 | 显示全部楼层
没什么发现需要特别注意的地方,本来代码量就不很大。不过,有时间的话,最好彻底审阅一下。
FreeRTOS的任务间通信机制比较少,如果有比较多的这方面应用,需要注意。

出0入0汤圆

发表于 2010-5-18 19:54:01 | 显示全部楼层
uCOS/II的基于分片的内存管理函数很多,直接拿来用就行。这个算法是没有碎片了,但是RAM空间浪费严重。伙伴算法的不知道RT-Thread或者别的OS有没有现成的,能借用,这个好点。

Malloc总会有碎片/容量浪费的问题的。。。

出0入0汤圆

发表于 2010-7-19 10:15:50 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-9-29 15:36:04 | 显示全部楼层
不知为什么在FreeRTOS中消耗的内存特别大,总共开两个任务每个任务分配4k RAM,每个任务实际需要的RAM约几百字节:

xTask=xTaskCreate( vCheckTask, ( signed portCHAR * ) "Check", configMINIMAL_STACK_SIZE+1024*4, NULL, tskIDLE_PRIORITY+3, NULL );
xTask=xTaskCreate( vLCDTask, ( signed portCHAR * ) "LCD", configMINIMAL_STACK_SIZE+1024*4, NULL, tskIDLE_PRIORITY+4, NULL );

分配给OS内核为32K RAM时任务运行就不正常:
#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 32 * 1024 ) )


分配给OS内核为50K RAM时任务运行正常:
#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 50 * 1024 ) )

感觉应该内核不需要分这么大的RAM,3种内存调度方式都试过,结果都差不多

出0入0汤圆

发表于 2010-9-30 13:37:38 | 显示全部楼层
按正常的理解configTOTAL_HEAP_SIZE应该是所有任务分配的RAM总和加通讯变量空间加系统占用的几百字节就应该能正常运行才对

出0入0汤圆

发表于 2013-8-4 11:08:27 | 显示全部楼层
freertos做工程好不好?稳定吗?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 11:14

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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