使用STM32编写一个简单的RTOS:0、为什么要用RTOS

    • 为什么要用RTOS
      • 一、前后台系统
      • 二、RTOS
    • 一些学习资料

为什么要用RTOS

一、前后台系统

我们刚开始学习单片机的时候,一般都是直接在裸机上写程序。如一个main函数里面加一个while大循环,循环里面做各种任务处理,这就是前后台系统了。如下:

	//中断处理函数
void irq_handler(void)
{
//前台
//按键处理
}

int main(void)
{
	init();	//做一些初始化操作
	
	while (1) {
	//后台
	task1();	//任务1,lcd显示按键
	task2();	//任务2
	.
	.
	.
	task10();	//任务10
	}
}

应用程序是一个无限的循环,循环中调用相应的函数完成相应的操作,这部分可以看成后台行为。前台程序通过中断来处理事件;后台程序则掌管整个嵌入式系统软、硬件资源的分配、管理以及任务的调度,是一个系统管理调度程序。这就是通常所说的前后台系统。(百科)
前后台系统的优点:
1、上手简单,
2、资源消耗少。
前后台系统的缺点:
1、实时性问题。例如在执行task2的时候,突然发生了按键事件,这个时候需要轮流执行完task2到task10,如果task2到task10之间的耗时较多,那么就不能及时的显示刚按下去的按键值。当while中的任务越复杂的时候,实时性就越差。
2、编程难度较大。由于其实时性问题,导致了我们必须保证各个任务尽量的耗时少,这就大大增加了编程的难度。需要考虑处理延时delay问题和稳定性,如果在某个task里while卡死,那么整个系统就卡死了。所以对编写程序的要求较高。

由于前后台系统的优缺点,决定了前后台比较适合用来编写任务简单的程序,对于复杂庞大的程序就不适合了。这个时候就要介绍我们的主角了,RTOS。

二、RTOS

RTOS即实时操作系统(Real Time Operating System)。实时操作系统是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统做出快速响应,调度一切可利用的资源完成实时任务,并控制所有实时任务协调一致运行的操作系统。提供及时响应和高可靠性是其主要特点。(百科)
RTOS和前后台系统的最大区别就是支持多任务了。每个任务都是相互独立的。对于前后台系统来说,所有的任务都是能放在一个while大循环里轮流执行,而RTOS则将每个任务分隔开来。可以在各自的while里运行。例如:

void task1(void)
{
	while(1) {
	//Do something
	}
}
	
void task2(void)
{
	while(1)  {
	//Do something
	}
}

各个任务同时进行,不必像前后台那样,需要等待前一个任务跑完才能执行。当然,这并不是真正的并行执行。而是RTOS帮我们在适当的时候,非常快速的切换到另外一个任务,所以看起来就像在并行执行一样。实际上只是一个任务跑一点,cpu再切到另外一个任务执行一点。当然,如果多核的话,那就真的存在并行执行了。

RTOS的优点:

1、实时性较高,不必像前后台那样需要等待其他任务完成才能执行。
2、利于开发、开发周期短,难度降低。
3、系统稳定性好,当然需要一个好的RTOS。

RTOS的缺点:

1、开销较大,系统需要占一定的资源。
2、上手难度相对较大

RTOS刚好补足了前后台系统的不足,非常适合用于复杂庞大的程序,而且也能降低开发周期,所以,我们非常有必要学习RTOS。
RTOS有很多个,其中比较出名的是FreeRTOS、uC/OS,但是我要介绍的是RT-Thread。是国内比较有名的RTOS,当然也是开源的。之所以用RTT,并不是因为它是国产的,而是因为我们公司刚好用的就是RTT。其他的RTOS我也有接触过,但因为其严重不喜欢他们的Code style(代码风格),刚好RTT的代码风格及架构又跟linux kernel比较像,好感就这样来了。而且RTT有个功能也是我十分喜欢的–finsh控制台。
其实不是很想写这一篇的,因为我接下来主要是介绍RT-Thread的内核部分,并不从基础开始,毕竟官网上的文档现在已经十分详细了。当你需要深入学习RTT的内核时,就已经证明了你已经对RTT有了一定的了解了,所以这一篇可能有点多余。

RTT的内核介绍

RTT的内核实现的部分有:对象管理、线程管理及调度器、线程间通信管理、时钟管理及内存管理等等,当然这是每个RTOS都需要提供的,只是实现过程不同,原理基本都是一样的,所以了解了一个RTOS,基本上其他RTOS你都能快速掌握。
所以学习掌握操作系统很有必要。因为做成笔记能更深入的检测对知识的掌握情况,一边学习RTT,一边模仿写一个RTOS。额,就先不要脸的叫RTT-Mini了。所以这个笔记就诞生了,主要是记录内核部分的笔记。欢迎讨论和指正。(菜的有点虚)

使用STM32编写一个简单的RTOS:0、为什么要用RTOS_第1张图片

一些学习资料

RTT官网文档
《cortex-M3权威指南》
《How To Design Multiple Tasks Embedded System Demo》

你可能感兴趣的:(使用STM32编写一个简单的RTOS:0、为什么要用RTOS)