超简单单片机操作系统的实现(1)
什么是操作系统?操作系统管理计算机的软硬件资源,为开发者提供友好的软件界面,为用户提供良好的交互界面。当操作系统可以做得更多的时候,实际上操作系统中有很多技术和算法,所以很多人花了很多精力去开发一个好的、优秀的操作系统。但是我的技术有限,所以我没有实现很多操作确认功能,有一些基本功能可以实现两种任务堆栈模式,快速模式和慢速模式;两种调度机制,抢先调度和轮询调度;实现功能包括:创建任务、终止任务、暂停任务、解除任务、休眠任务、信号量和任务间通信。同时,如果文章中有任何问题,请指正。
所以今天,我将讨论如何在8051内核下的操作系统中实现它。我将花几篇文章来详细解释,最后几篇文章将进行源代码分析,所以您需要源代码才能看到本文的结尾。
多任务操作系统:
在我们的电脑上,我们可以一边听歌一边上网和聊天。因此,在多任务操作系统中,可以同时执行多个任务,并且每个任务不会相互干扰。从宏观上看,感觉每个任务都有一个cpu,这实现了真正的并发。事实上,在单个中央处理器的情况下,没有真正的多任务机制,只有不同的任务轮流使用中央处理器,所以它本质上是单任务。然而,由于中央处理器的快速执行速度和频繁快速的任务切换,我们感觉好像有许多任务同时运行。这就是所谓的多任务处理机制。多任务处理的最大优势是充分利用硬件资源。例如,当单个任务(大循环结构,如大多数51个程序)遇到延迟函数时,它使用while(i -)来延迟,并且中央处理器以空旋转;在多任务系统中,当遇到延迟或等待资源时,系统会自动运行下一个任务,然后在满足条件时返回运行前一个任务,从而充分利用了cpu,提高了效率。所以在这里,它会自动跳转到下一个任务。如何跳转,如何返回,这是关键点,所以要实现跳转,首先要了解51单片机的运行模式,每个学习过微机原理的人都知道,在内核中有一个重要的东西,它控制着程序下一条指令的位置,而这个东西就是pc指针。因此,如果我们能控制电脑指针中的值,我们就能随意跳转程序。但是想想看,仅仅控制个人电脑指针的值就足够了吗?明显的问题是不够的!如果你只是想让程序跳转,控制pc机是可以的,但是对于一个完整的任务,任务有它自己的状态和一些重要的参数,而且这个状态和参数都存储在中央处理器内核的一些重要寄存器中,所以跳转时有必要保存这些寄存器。让我们看看哪些寄存器需要保存在51微控制器中:
个人电脑:这个收银机很特别。它不能被直接访问,因为它不能被寻址。它是一个16位寄存器。
累加器,是一个八位寄存器。一些算术逻辑需要这个寄存器。这个寄存器中的大多数指令都需要它。这很重要。
做乘法和除法的时候会用到乘数或除数。
dptr:这个登记簿有点特别。它是一个16位寄存器,用作数据指针。你可以把它分成两个8位,dpl和dph,或者你可以直接访问dptr。
程序状态字:这个寄存器包含在执行期间中央处理器的一些状态。
ar0 - ar7:通用寄存器组,用于在操作过程中存储中间变量以及传递参数。
有13个寄存器需要保护,总大小为15字节。
现在我们知道哪些寄存器需要保护,如何保护它们是一个问题,这个问题的解决可以通过51单片机的一些机制来实现。这种机制是中断超能契约书最新章节(interrupt:当有需要时,中央处理器暂时停止当前程序的执行,而是执行程序和执行过程来处理新的情况。也就是说,在运行程序的过程中,系统中出现了必须由中央处理器立即处理的情况。此时,中央处理器暂时中止程序执行并处理这种新情况的过程称为中断。让我们来分析一下51单片机在中学之前做了什么,图1
图1这是一个定时为0的中断响应:当执行中断服务功能时,它只推动堆栈来保护我上面提到的15个寄存器,但肯定有一些疑问。为什么电脑指针没有看到它被保存?因为前面说过,个人电脑指针不能直接寻址,所以无论如何,个人电脑不能直接访问,所以直接访问是不够的。间接访问怎么样?这里的重点是:当调用(这是由硬件完成的)中断时,一个分支指令被存储在相应的物理地址(定时器0物理地址0x000b),当调用时,硬件会自动推送pc值,所以实际上,pc是在acc之前保存的,当中断服务功能结束时会依次弹出。
图2与图1成对出现,并且pc指针值的恢复位于指令reti中。这条指令将把栈指针指向的地址弹出两个字节到pc机,这样我们就可以间接地改变pc机中的值。只有通过控制sp中的值,我们才能通过reti(中断服务函数返回)或ret(普通函数返回)间接控制pc中的值,从而控制程序的运行。
因此,每个任务都需要保存这些值,也就是说,每个任务都需要有自己的任务控制块(保存任务堆栈地址、任务延迟、任务通信参数、任务状态)和自己的堆栈空,并且当任务不调用子功能(调用子功能,当不使用优化时,每个调用函数都将堆栈两个字节,因为51 mcu是八位的,而内存的最大直接寻址是255。所以当51单片机使用大量递归时,尽量不要堆叠至少15+2个字节,总共17生化全球最新章节个字节。因此,根据其他任务函数,还有一些其他分散的内存开销。因此,即使任务堆栈被设置为30字节(尽可能安全而不溢出),也将有多达6个任务,如果每个任务堆栈空被减少,将有多达9个任务,这相当于限制。因此,后来出现了该系统的改进版本,使用51单片机的dptr访问外部扩展存储器,使理论任务达到32个,任务堆栈超过50+字节。
因此,这里有一个51单片机如何切换上下文的一般解释,这当然是最重要的部分!!
下一个解释——调度和任务控制块的设计!
源代码地址:ftp://47.93.48.255/
用户名:znzn
密码:123456
文章来源:www.atolchina.com