使用FreeRTOS有没有特别注意的地方?
准备在LM3S8962上使用FreeRTOS,有没有特别注意的地方?特别是需要注意的Bug? 不要动态删除任务和创建任务,其他的没啥 谢谢楼上 每个任务堆栈分配大一点,别溢出了。 多谢 顶一下,希望用过的网友说一下经验。 内存管理做的不行,动态删除和创建都不行,初始分配的时候要多留点,但是这样设计很浪费ram 回复【6楼】MoMo_avr内存管理做的不行,动态删除和创建都不行,初始分配的时候要多留点,但是这样设计很浪费ram
-----------------------------------------------------------------------
限制这么多?看来这点上,RT-Thread很有先见之明,嘿嘿 开始设计任务时候留多点,再debug时候要修改一个配置选项。
/* 此项用于DEBUG,来看是否有栈溢出,需要你自己编相应检查函数void vApplicationStackOverflowHook(xTaskHandle *pxTask, signed portCHAR *pcTaskName )*/
#define configCHECK_FOR_STACK_OVERFLOW 0
堆栈溢出是系统开发时候常有的事情。
一般我使用的是Heap_2.c,因为我是用stm32。但是这个管理内存方法效率真是不高。若任务频繁申请与释放“随机”大小的内存,RAM的分配会很糟糕哦,宏观看不再是一块一块的连续,而是碎片,这时再申请大容量的内存,虽然总容量足够,但由于全为碎片,却申请不到内存。大家设计要注意哦。 谢谢 自带的内存管理程序确实不是很好,但是绝对是代码量最小。
就两个函数,你可以用你满意的内存管理程序。
这个问题都是小问题。 同意ls,自带的比较小巧,功能简单。heap_3应该是功能强了,但又太占资源。自己编写或者移植个满意的就好。比如 ucosII的内存管理,看能移植过来不? 没什么发现需要特别注意的地方,本来代码量就不很大。不过,有时间的话,最好彻底审阅一下。
FreeRTOS的任务间通信机制比较少,如果有比较多的这方面应用,需要注意。 uCOS/II的基于分片的内存管理函数很多,直接拿来用就行。这个算法是没有碎片了,但是RAM空间浪费严重。伙伴算法的不知道RT-Thread或者别的OS有没有现成的,能借用,这个好点。
Malloc总会有碎片/容量浪费的问题的。。。 mark 不知为什么在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种内存调度方式都试过,结果都差不多 按正常的理解configTOTAL_HEAP_SIZE应该是所有任务分配的RAM总和加通讯变量空间加系统占用的几百字节就应该能正常运行才对 freertos做工程好不好?稳定吗?
页:
[1]