找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2407|回复: 4
打印 上一主题 下一主题
收起左侧

STM32之uCOS-II基础、移植、创建任务

  [复制链接]
跳转到指定楼层
#
ID:763998 发表于 2020-6-26 19:26 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

5.1 uCOS-II操作系统

5.1.1 什么是操作系统

              《1》管理软件硬件的程序集合。

              《2》软硬件的沟通桥梁。

举个栗子:当你要播放音乐时,假设是电脑,装的是Window操作系统,步骤如下:

  • 打开酷狗音乐软件
  • 找需要播放的歌曲
  • 点击播放

这时,你就能听到优美动听的歌曲了。但底层操作是如何操作的呢?是谁操作呢?

是操作系统帮你完成了这一切工作。当你点击播放,操作系统工作流程如下:

  • 你点击播放按钮,操作系统读取你需要播放歌曲的源文件(mp3文件)
  • 操作系统调用音乐解析驱动,解析你的mp3文件,转成播放器(喇叭)认识的二进制文件。
  • 操作系统把解析好音乐的二进制文件,发送给播放器(硬件设备),若此时音乐播放器,一切都准备就绪了,就可以播放音乐了。

总结,对硬件的操作,由操作系统来完成,操作系统直接与硬件交互。用户如果想控制底层硬件,必须经过操作系统进行间接控制,操作系统提供系统调用给用户,用户就可以与硬件交互了。系统调用是封装了操作各部分硬件的API。


5.1.2 为什么要使用操作系统

              《1》屏蔽硬件。使应用程序不依赖硬件,提高了程序的可移植性。

              《2》多任务。因为消费者想同时聊QQ、聊、看电视剧等。早期单核CPU想完成这些功能,就需要使用操作系统,实现不同任务之间高速的切换。


5.1.3 操作系统分类

              《1》分时操作系统:以时间片为基本调度原则。给每个任务分配一段固定的CPU时间,时间到就切换下一个任务,时间不到不切换任务。如:Windows—95/98,Linux内核2.6以前。

              《2》实时操作系统:以优先级为基本调度原则。不是给每个任务分配一段固定的CPU时间,而是根据优先级分配CPU执行时间,谁优先级高,先执行谁,分配的CPU时间就多,如uCOS-II。

              《3》半实时操作系统:部分使用分时操作系统、部分使用实时操作系统。如Windows----7/8/10,Linux内核2.6以后。



5.1.3 为何学uCOS-II

《1》代码量少,容易上手。

《2》多任务,实现复杂功能

《3》提高内外功(内功:阅读代码能力 外功:编程能力)

《4》为学习其他操作系统打下基础


5.1.4 其他补充

学操作系统的难点

《1》逻辑理解、代码运行流程

《2》术语的理解、领悟

uCOS-II理解

u---微型

C---控制器

              OS—操作系统

UCOS-II代码来源

《1》官网

《2》示例代码


5.2 UCOS操作系统

5.2.1 操作系统的调度原则

《1》分时操作系统调度原则:

以时间片为基本调度原则,为每个任务分配固定的CPU执行时间,时间到,切换下一个任务,时间不到,不切换任务。

《2》实时操作系统调度原则

以优先级为基本调度原则,不是固定为每个任务分配CPU执行时间,而是根据优先级高低分配CPU时间,优先级低的分配CPU执行时间就短,优先级高的分配的CPU时间就长。



5.2.2 操作系统程序结构

《1》裸机代码

整个工程只有一个main函数,在main函数执行中只有一个真正意义上死循环其他死循环都是有退出条件或永远不会执行了的死循环。

《2》操作系统代码

整个工程只有一个main函数,在mian函数中,至少创建一个任务,每个任务都有一个死循环。操作系统要切换任务需要高优先级任务释放CPU使用权。


5.2.3操作系统的任务结构

《1》任务的构成:任务控制块,任务函数、任务优先级、任务栈。

《2》 任务控制块:任务先内存空间申请的一块内存空间,用于执行任务使用的,任务控制块包含、任务函数、任务优先级、任务栈。

《3》任务函数:任务的执行入口,任务的具体功能在这里实现。

《4》任务优先级:任务的能执行的唯一标识。用来规定任务的执行先后顺序。

《5》任务栈:保存任务在切换过程中的现场信息。任务在切换前,把当前执行任务的现在信息保存在栈中,该过程称为压栈,当执行完其他任务完后,又切换回来,读取栈里面保存的现场信息,继续执行任务,该过程称为弹栈。

简单理解:在栈中进入一个元素,称为压栈或入栈,出来一个元素称为弹栈或出栈。

5.2.4 操作系统的任务切换

在哪些情况下,会进行任务切换?

  • 心跳节拍到达的时候会进行切换。心跳节拍来源于系统滴答时间,所以用Tick表示心跳节拍。
  • 调用任务调度函数。用操作系统内核进行调用。

5.2.5 操作系统的任务中断

与裸机编程中断基本一致,但需要注意两点

  • 在操作系统的中断服务函数的第一句代码,调用一个函数,目的是告诉操作系统当前进入中断功能。
  • 在操作系统的中断服务函数的最后一句代码,调用一个函数,目的是告诉操作系统当前退出了中断功能。

裸机中断与ucos中断的深入理解

  • 裸机中断,中断后会返回原点,原点就是主栈。从中断栈切换回到主栈。
  • ucos中断,中断后不一定返回原点,因为返回前有任务调度,如果中断完后,有任务优先级高过当前任务,当前任务就失去了CPU的使用权。

5.2.6 操作系统的任务状态

《1》停止/休眠态:任务创建之前和删除之后的状态。

《2》就绪态:任务具有了可执行条件。

《3》运行态:任务得到了CPU的使用权。

《4》等待/挂起态:任务被挂起或等待某件事情发生。

《5》中断态:正在执行的任务,被中断了。

任务状态转换关系如下图:

5.3 创建UCOS工程模板

5.3.1 获取UCOS源码

官网太卡了,所以给你准备UCOS例程,如下。

5.3.2 UCOS过程文件分析

5.3.3 新建UCOS工程


5.3.4 创建一个任务

5.3.5 补充、小结

移植Ucos-II总结:

配置基本流程:

《1》找到Ucos-II源码(来源:官网、例程、别人的代码、自己的代码)

《2》添加到过程文件中,添加对应头文件

《3》编写系统滴答定时器,开启中断模式

《4》编写滴答中断服务函数

《5》编写主函数

主函数编写流程:

  • 系统滴答初始化
  • 串口初始化(用于调试)
  • 操作系统初始化
  • 创建任务
  • 启动操作系统
  • 实现任务函数

关于延时OSTimeDly(100);?

一次系统滴答为5ms,所以写100,就是500ms。


关于任务函数OSTaskCreate(Task0,NULL,&stack0[TASK0_STK_SIZE-1],TASK0_PRI);?

  • 第一个参数为一个函数的名字(实现任务的函数的名字)
  • 传给实现任务函数的参数(形参)
  • 任务栈栈顶(高地址、数组最后一个元素)
  • 优先级(0-61中间的选一个,63留给了空闲任务、62留给了统计任务)

全部资料51hei下载地址:
0.新建工程.7z (351.93 KB, 下载次数: 36)
uCOS-II.zip (94.6 KB, 下载次数: 35)
UCOS.docx (1000.62 KB, 下载次数: 29)

评分

参与人数 2黑币 +70 收起 理由
gracture + 20 赞一个!
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏8 分享淘帖 顶1 踩
回复

使用道具 举报

地板
ID:848719 发表于 2020-11-24 22:37 | 只看该作者

好东东,支持一下。
回复

使用道具 举报

板凳
ID:288751 发表于 2020-11-24 18:07 | 只看该作者
马一下,学习了谢谢/
回复

使用道具 举报

沙发
ID:162136 发表于 2020-10-10 23:16 | 只看该作者
好东东,支持一下。
回复

使用道具 举报

楼主
ID:328014 发表于 2020-6-28 16:16 | 只看该作者
好资料,51黑有你更精彩!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表