在熟悉UCOSIII应用的同时,对之前应用的UCOSII做一些归纳,供以后回顾。
1.UCOSII的任务如何分类?
1)用户创建的任务:用户最多可以创建63个任务,优先级0~62,0是最高优先级任务。
2)系统创建的任务:空闲任务和统计任务(计算在运行所有应用程序时,CPU的使用效率)。在使用UCOSII前,必须调用OSInit(),OSInit()可以建立了空闲任务和统计任务。
注:所有任务的优先级必须不相同。
2.UCOSII创建任务的要素?
1)编写自己的任务函数。
2)分配一个适合的任务堆栈。
3)分配一个合适的任务优先级。
4)可能还需要给任务传递一些参数。
3.任务函数的特点?
1)没有返回值。
2)都包含了一个死循环。
3)都有一个void型的指针形参。
4)死循环内必须有调度点。
5)高优先级的任务中必须有等待延迟,让低优先级的任务有被调度的机会。
4.用OSStart()开启了UCOSII后,每个任务建立的时候,UCOSII会判断新建立的任务是否具有最高优先级,如果其优先级最高,则立即运行该任务。
5.如何检测一个任务堆栈的大小?
考虑使用OSTaskStkChk()堆栈检查函数。此函数的运行时间与任务所指定的堆栈大小密切相关。当想确认一个任务需要多少堆栈时,此函数是很有用的。如果系统对稳定性要求高,实际分配的堆栈应大于检查的最大值得1倍。堆栈检查要求任务建立时给堆栈清零,也要注意,其实进行堆栈清零也可能是一项很费时的工作。执行OSTaskStkChk()堆栈检查函数,也就是从栈低向栈顶搜索非0的元素,记录0元素的个数。
6.何为消息邮箱?
消息邮箱仅能提供一个指针型变量的传递,至于此指针型变量到底指向什么样的数据结构,是由使用此邮箱的用户程序共同决定的。
7.如何确定每个任务的运行次数和运行时间?
系统的钩子函数可以解决此问题。钩子函数其实在应用中必不可少。