介绍一下Ucos—iii的优点:相比于Ucos—ii,UCOS-II主要针对8位、16位机以及低端32位机,UCOS-III主要针对高端32位处理器和64位处理器,在性能上有了很大的提升,有了不少的提升,例如任务数没有显示,不同的任务可以拥有相同的优先级,相同优先级的任务调度采用时间片轮转法。对一些内核对象,例如信号量,可以在运行过程中创建和删除,不用像ucos-ii那样必须在编译时分配好。内核对象数也没有限制。
Ps:不过如果芯片处理能力有限的话,建议还是量力而为,选择ucos—ii足够就没必要选择ucos—iii,ucos-iii显然适用于更加复杂的系统应用,本身占用的内存空间也较大,而且代码显得比较累赘。例如创建一个任务,就要这样的麻烦
void OSTaskCreate (OS_TCB *p_tcb,
CPU_CHAR *p_name,
OS_TASK_PTR p_task,
void *p_arg,
OS_PRIO prio,
CPU_STK *p_stk_base,
CPU_STK_SIZE stk_limit,
CPU_STK_SIZE stk_size,
OS_MSG_QTY q_size,
OS_TICK time_quanta,
void *p_ext,
OS_OPT opt,
OS_ERR *p_err);
这么多的参数,如果初学的话,一个个去弄懂也没必要,但是如果不弄懂又学不会,所以如果入门ucos操作系统的话,本人介意先学ucos—ii,学了ucos—ii在去开ucos—iii,你会发现系统时基,任务创建和调度原理其实是一样的,只不过部分功能做了优化,通俗点讲就是更加严谨了,好了,理论只是帮助实际应用的东西,太过于执着于理论就钻了牛角尖了,本人并非老师,只是一个普通的研发人员,所以以实际产品应用为主,所以就说一下实际应用吧。
首先我们要到网上下载ucos—iii的源码,官网是:http://micrium.com/打开看到
点击红色框部分,就会进入下载界面
然后就可以下载了
咱们下载的是下面这个,
下好以后,打开相关文件夹,将源码复制到工程目录下
然后打开keil5工程,在工程目录里添加源码,目录结构如下:
好了,上面只是基础的准备工作,熟了以后大家可以根据自己喜好去创建工程目录结构,目前来说先按作者的来就可以了,这些其实是无关紧要的事情,大家目的是为了学习原理并把它应用到实际工作中嘛。
下面我们就开始真正的将这个系统和cpu关联起来了,相信大家熟悉操作系统的都知道时基这个概念,ucos操作系统同样需要一个时基,正好我们的stm32芯片都有一个系统滴答计时器,这里我们将它作为ucos操作系统的时基刚好,那么怎么做呢,其实是有两个方法,
大致原理是一样的,我们打开startup_stm32f407xx.s文件,看到这里有栈空间申请的代码
下面有相关函数调用的声明:
那么这两个函数是做什么的呢?
一个是任务调度函数,一个是systick中断服务函数,我们打开os_cpu_a.asm和os_cpu_c.c,可以看到源码
只要相关名字对应就可以了,我这里是改的startup_stm32f407xx.s启动文件的相关联部分,不希望修改ucos—iii源码,但有的人是不希望修改stm32cubemx生成的源码,而去修改ucos—iii的相应部分,都可以,只要函数名一致就可。
Ps:stm32cubemx生成代码的systick定时器为1ms一次中断,如果需要调节,可以再时钟配置函数里去修改。