自编STM32轻量级操作系统(一)------操作系统实现

你好,这里是风筝的博客,

欢迎和我一起交流。


寒假那段时间开始接触UCOS实时操作系统,感觉真的很神奇,还借了任哲和邵贝贝的书的来看,原来代码还可以写得那么美妙。

后来,在知乎上看到一位答主的文章(https://www.zhihu.com/question/25628124/answer/133388181),顿时对操作 系统兴趣大增,想着自己也简单写一个轻量级的嵌入式操作系统。

现在好几个月过去了,这个操作系统我用着感觉还不错,非常的小(自己写的嘛,功能有限,呵呵呵)。当然,当初写这个也是为了好玩而已,并不保证严格的实际用途。

就想着开源出来,与大家一起分享。


这一章并不打算就这样裸讲程序,感觉先把概念说一下比较好:

什么是操作系统?

所谓操作系统就是能有效地管理计算机系统中的各种硬件\软件资源、合理的组织计算机的工作流程,从而为程序员\操作员和各类用户创造良好的工作环境的系统软件.


由于我学习的操作系统为UCOS,所以也将参照他的风格来写。而且由于实时操作系统与通用操作系统的基本设计原则差别很大,因此在很多资源调度策略的选择上以及操作系统实现的方法上两者都具有较大的差异。

我们需要完成以下部分:

a.任务调度策略

b.内存管理

c.中断处理

d.共享资源的访问

恩.....大概就这些吧,反正我只实现了这些,,,,,,

我的实验平台为ST公司的STM32F1系列的板子,Cortex-M3的内核,属于ARMv7家族。

好了,写代码之前,我们得先确定下a点,任务调度策略:

采用基于优先级的抢先式调度策略。

但是我们怎么实现任务抢占(即任务切换)呢?

当一个运行中的任务A因为某种原因要切换到其他任务去运行时,A必须保存自己的"上下文"(进程的状态以及堆栈中的内容被称为该进程的上下文),以保证以后再次切换回A运行时,能从已保存的"上下文"中恢复回来。这样当A再次运行时,对A而言"上下文"根本没有变化过,好像从来没有进行过任务切换一样。

如果用汇编写程序就知道,很多东西都是存在寄存器里的。查看下《Cortex-M3权威指南》可以知道:


Cortex-M3有两个堆栈指针,但是同一时刻只能用一个,我们可以用一个来作为任务切换时保存"上下文"。如图


抽象图,嘿嘿。。。。。。。

此时在cpu在跑任务B,任务切换时,把运行任务B时的寄存器参数入栈保存到任务B栈中,再把任务A栈里的内容出栈处理,这样就可以实现任务切换了,从任务B切换到任务A。

其实在权威指南里也说有:


使用双堆栈指针。注意哦,M3的堆栈是"向下"的哦。


这图明显没我灵魂画师画得好,嘿嘿。不过看到一个有用的信息:SysTick作为系统"心跳"。

好了,知道是怎么切换任务的了,那问题又来了,谁来做这些操作呢?

当然是从权威指南里找答案了:


还有一张图,带你理解PendSV,真贴心:


到这里。任务切换部分算是知道是怎么回事了。。。

b.内存管理,这个以后再说。

c.中断处理,从之前的图可以看出,系统应当采用SysTick(滴答定时器)作为系统"心跳"。

因为是基于基于优先级的调度策略,所以每次"心跳",都要去检测有没有比当前任务更高优先级的任务产生,如果有,通过PendSV进行任务切换。当然,任务切换不仅限于此,可能还是任务自身让出CPU使用权。

d.共享资源的访问,因为是单核的CPU,打个比方,厕所(资源)只有一个,小A(任务A)和小B(任务B)都想去上厕所(资源),那不就出问题了吗?所以之后我们要注意这个问题,之后再深入讨论这个。


恩,,,,,,码了那么多,感觉就那么多了,就先这样了。下一章再分析具体程序。

先放个交流群:136045527


下一章:自编STM32轻量级操作系统(二)------任务调度




  • 38
    点赞
  • 194
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
STM32H750的LWIP的Ping实验中添加RT-Thread操作系统是可以实现的。下面是添加RT-Thread操作系统的步骤: 1. 准备工作:首先,确保已经配置好了STM32H750开发环境,并且已经安装好了RT-Thread操作系统。 2. 创建RT-Thread工程:使用RT-Thread提供的工具创建一个新的工程,并选择STM32H750作为目标硬件平台。 3. 导入LWIP库:将LWIP的库文件导入到RT-Thread的工程中。可以选择将LWIP的源代码直接添加到RT-Thread的代码库中,或者将LWIP的库文件作为一个静态库添加到RT-Thread的工程中。 4. 配置LWIP:根据需要配置LWIP的相关参数,例如IP地址、子网掩码、网关等。 5. 添加Ping应用:在RT-Thread的工程中编写Ping应用程序。可以参考LWIP的Ping应用程序的实现,或者根据需求自行编写。 6. 编译与下载:编译RT-Thread的工程,生成可执行文件,并将其下载到STM32H750开发板中进行调试和测试。 添加RT-Thread操作系统后,可以利用RT-Thread的线程调度和网络协议栈的功能,实现更多的功能和应用。例如,可以添加更多的线程用于处理其他任务,或者添加其他网络协议栈的功能模块,实现更复杂的网络应用。 总结起来,添加RT-Thread操作系统STM32H750的LWIP的Ping实验中需要进行一系列的配置和编程工作。通过合理利用RT-Thread和LWIP的功能,可以实现更多的网络应用和功能拓展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值