嵌入式技术
在目前的 RTOS 中,主要有两种比较流行的编程方法,接下来我将通过伪代码的方式来讲解下这两种编程方式。
1main函数中初始化硬件和RTOS,创建所有任务
这种方法是在 main 函数中将硬件初始化,RTOS 系统初始化,所有任务都创建好,最后启动 RTOS 的调度器,开始多任务的调度。
伪代码如下所示:
程序说明如下:
(1)、硬件初始化。硬件初始化这一步还属于裸机的范畴,我们可以把需要使用到的硬件都初始化好而且测试好,确保无误。
(2)、RTOS 系统初始化。比如 RTOS 里面的全局变量的初始化,空闲任务的创建等。不同的 RTOS,它们的初始化有细微的差别。
(3)、创建各种任务。这里把所有要用到的任务都创建好,但还不会进入调度,因为这个时候 RTOS 的调度器还没有开启。
(4)、启动 RTOS 调度器,开始任务调度。这个时候调度器就从刚刚创建好的任务中选择一个优先级最高的任务开始运行。
(5)(6)、任务实体通常是一个不带返回值的无限循环的 C 函数,函数体必须有阻塞的情况出现,不然任务(如果优先权恰好是最高)会一直在 while 循环里面执行,导致其它任务没有执行的机会。
2main函数中初始化硬件和RTOS,创建启动任务
这种方法是在 main 函数中将硬件和 RTOS 系统先初始化好,然后创建一个启动任务后就启动任务调度器,然后在启动任务里面创建各种应用任务,当所有任务都创建成功后,启动任务把自己删除。
伪代码如下所示:
程序说明如下:
(1)、硬件初始化。来到硬件初始化这一步还属于裸机的范畴,我们可以把需要使用到的硬件都初始化好而且测试好,确保无误。
(2)、RTOS 系统初始化。比如 RTOS 里面的全局变量的初始化,空闲任务的创建等。不同的 RTOS,它们的初始化有细微的差别。
(3)、创建一个开始任务。然后在这个初始任务里面创建各种应用任务。
(4)、启动 RTOS 调度器,开始任务调度。这个时候调度器就去执行刚刚创建好的初始任务。
(5)、我们通常说任务是一个不带返回值的无限循环的 C函数,但是因为初始任务的特殊性,它不能是无限循环的,只执行一次后就关闭。在初始任务里面我们创建我们需要的各种任务。
(6)、创建任务。每创建一个任务后它都将进入就绪态,系统会进行一次调度,如果新创建的任务的优先级比初始任务的优先级高的话,那将去执行新创建的任务,当新的任务阻塞时再回到初始任务被打断的地方继续执行。反之,则继续往下创建新的任务,直到所有任务创建完成。
(7)、各种应用任务创建完成后,初始任务自己关闭自己,使命完成。
(8)(9)、任务实体通常是一个不带返回值的无限循环的 C 函数,函数体必须有阻塞的情况出现,不然任务(如果优先权恰好是最高)会一直在 while 循环里面执行,其它任务没有执行的机会。
那有关这两种方法孰优孰劣?我暂时没发现。LiteOS 和 ucos 第1种和第2种都可以使用,由用户选择,RT-Thread 和 FreeRTOS 则默认使用第二种。
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !