大家好,怎么去确定一个任务的栈的大小和任务的优先级.比如在nucleus,rex或者threadX里面. 我是做手机开发的,这一方面一直没有想明白.是不是通过经验和实验和选择合适的栈的大小和任务的优先级呢. 比如先给新建的任务一个比较充裕的栈空间和估计的优先级,然后让任务在RTOS中跑起来,统计各种极限下栈的使用情况,和任务间的调度情况,最终修订栈的大小和优先级. 这是我的猜想,唯一可以自己做的东西让人给外包了.呵呵.
一般如果是应用而且实时性不高的话,优先级不必太高,否则会抢占其他的实时性要求高的任务。至于栈的大小,个人觉得1K~5K就非常足够了(针对Nucleus而言),除非定义了很多变量和很深层次的调用,另外最好不要用递归。
例如,对于5K的Stack,理论上可以容纳5*1024/4=1280个32bit的变量。
在各个Function里,局部数组不要定义很大,例如
char m_buf[1024*5];就很危险。
个人一点的经验。
如果需要大的Buffer或者大的structure,应该用Malloc从系统堆上分配。
实验和经验还是最重要的。