USCOSII
一、要求
- 下载附件,尝试在vc6.0中编译运行ucos
- 下载附件,尝试在vs2017中编译运行ucos,给出你遇到的问题和解决方式
- ucos是如何分层的?
- HAL都有哪些代码?
- 分析任务是如何切换的?
- 在附件中增加两个任务,一个随机打印你的学号,一个打印你的姓名
- 给出运行结果截图
- 把代码提交到码云
二、步骤
认真学习云班课PPT——ch03a/b/c
vc6.0中编译运行ucos
vs2017中编译运行ucos
- 存在输入闪退的问题
三、结果
ucos分为硬件相关层、驱动接口层、应用接口层、应用层
- 硬件相关层:尽量所有硬件相关都囊括在其中,不论GPIO还是定时器或是串行接口,只要提供标准统一的接口,就可以让上层通畅,这其中有三个最为重要的接口
Open
,Close
,Ctrl
。Open主要来完成对应硬件初始化,形参中包括了些,初始化的相关参数。Close失能硬件。Ctrl来实现一些控制的修改如:优先级,中断回调函数等等,硬件的不同,内容也大为不同。 - 驱动接口层:其实在上一层也算是驱动层,只不过因为硬件相关,而把他分离。这层中会用到一个或多个硬件层的接口,进行组合来实现特定功能的程序。这部分程序可举例进行说明。以Flash为列,它这里主要调用硬件层的SPI函数接口,但是主要的写,读指令都是在这里函数中完成的。在这层中需要提供5个标准统一的接口函数:
XXXOpen
、XXXClose
、XXXWrite
、XXXRead
、XXXIoCtl
。
没有被用到的函数可以为空。本来还需要Install
函数来进行动态加载和删除,因为stm32
内存一般都很有限,所以舍弃动态分配。而把这5个函数用常量的形式直接编译到ROM中。在驱动的抽象接口层中可以做选择,哪些驱动要加载到内核,哪些不需要。不要的驱动不参与编译。这样有限的资源 可以得到合理的应用。这一层大部分工作可以说属于一次性投入。 - 应用接口层:主要连接驱动和应用。又是连接应用层模块与模块之间的一层, 这一块有很强的特殊性,第一包括了驱动抽象接口层,第二包括了模块与模块的接口层。第三又与应用层密不可分。
驱动抽象接口通过ID访问那ID对应的那五个函数。抽象接口也是一次性投入的函数,在设计时对其可靠性要很重视。
模块与模块的接口层,包括模块的接口头文件,这些头文件要求是非常独立的,不能加载模块内的内部头文件,应该包括接口函数的函数声明,在接口中尽量少用到全局变量。如果非要用到可以使用函数的方式进行传递,或ucos
消息队列方式。最好用ucos
进行传递,因为有很好的互斥保护功能。 - 应用层:所有模块都算是应用层,在模块内所有变量或函数(接口除处)应该都本地化。在模块内可以有本模块化共用的主头文件,来方便本模块的维护。对硬件的访问其实直接调用应用接口就可完成。
USCOSII的更多相关文章
随机推荐
- 【Amaple教程】6. 路由配置
在 第1节<启动路由> 章节中为了能让单页应用顺利跑起来,我们提前介绍了简单的路由配置方法.我们已了解路由配置的目的是指定不同的url下对应的 模块节点(也叫做模块容器)内应该显示哪个模块 ...
- 使用AQS自定义重入锁
一.创建MyLock import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.AbstractQueuedSyn ...
- javascript设计模式和开发实践(阶段一)
1,设计模式的作用:让人们写出可复用和可维护性高的程序,代价可能是,额外增加代码量: 比较形象的例子:空房间里面放东西,如果日复一日的往里面扔东西,时间久了,很难找到自己想要的东西,调整也不容易,但是 ...
- swoft 上传图片到 阿里云oss aliyun-oss
1.swoft 获取上传的文件 .官方文档上面没有看到 $files = $request->getUploadedFiles(); $file = $files['file']; 2.在模型 ...
- Spark RDD Tutorial
Spark RDD教程 这个教程将会帮助你理解和使用Apache Spark RDD.所有的在这个教程中使用的RDD例子将会提供在github上,供大家快速的浏览. 什么是RDD(Rssilient ...
- 网络编程---socket模块
内容中代码都是先写 server端, 再写 client端 1 TCP和UDP对比 TCP(Transmission Control Protocol)可靠的.面向连接的协议(eg:打电话).传输效 ...
- Deeplink推广,打开率很低怎么办?
但凡做TOC业务的多多少少都会用到Deeplink,这是一个重要的运营手段.但用了Deeplink却没有达到预期的目标,打开率不尽人意,你有没有想过到底是什么原因? 在Deeplink这条路上,我们当 ...
- 通过locust进行性能测试
首先我们需要准备好python环境 接口 安装python 插件 locust,网上有很多文章而且都很错,这里不再赘述 我是通过pycharm 编写的代码 导入 HttpLocust,TaskSet ...
- (转)浅析epoll – epoll函数深入讲解
原文地址:http://www.cppfans.org/1418.html 浅析epoll – epoll函数深入讲解 前一篇大致讲了一下epoll是个什么东西,优点等内容,这篇延续上一篇的内容,主要 ...
- win10安装ubuntu子系统和图形界面
子系统可以很方便的调用windows的文件(在/mnt里就有各个盘),也可以在windows里用VScode编辑linux的文件.还是很方便的.也可以切出去用QQ微信. 安装子系统参考教程:https ...