找回密码
 立即注册

QQ登录

只需一步,快速开始

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

uCOSII源代码剖析—终极篇(共17页pdf下载)

[复制链接]
跳转到指定楼层
#
启动工作原理
刚接触操作系统的时候觉得这个最神秘,到底里面做了什么,怎么就成了个操作系统,它到底有什么用,为什么要引进来着个东东。学了之后才知道,原来最根本的思想还是源于汇编里面的跳转和压栈,以调用一个函数为例,编译后的汇编肯定是先通过 SP压入当前代码段地址然后就是保存一些寄存器的值放栈里面(51单片机好像不是这样),然后执行程序,完了之后,出栈把寄存器恢复,最后把原来存的代码段地址付给 PC 然后回到原来的程序,这是汇编执行函数的做法,而操作系统人为强行的模拟这样操作,把代码写成不同代码块假定为 A、B,要相互之间执行似乎不受影响,是这么实现的,假设首先代码在 A 中执行,代码段一直往下指,如果我要执行 B,首先把 A 的代码段压入栈,所有的寄存器值存入 A 的栈,然后让 SP 强行指到 B 的栈执行出栈操作,把寄存器恢复成 B 的,B 的代码段地址放入 PC,这样就 B 在执行,如果又要 A 接着上次执行,又强行把 B 的寄存器、当前代码段地址压入 B 的栈,然后 SP 强行指到 A 的栈恢复的时候恢复成 A 最近一次保存的东西(和函数调用不同每次切换栈里面的东西是随机的),这样,可以很自由的在 A、B 中切换,如果切换足够快,A、B 看以来好像同时在执行,这就是并行,A、B 就是任务。如果这个切操作放到定时器函数中来做,就可以严格按照时间来切换,这就是操作系统雏形。另外,各个任务之间有存在一定的关系,有逻辑上的先后等,必须引进全局的结构体、变量来标记一些信息,全局的这些数据是不会被释放的,所以所有的任务可以去通过读、写这些数据来实现各个程序块交流信息,实现所谓的同步、 互斥。 这就是操作系统的原理, 而这些不同的通信方式按功能细分就成事件管理、内存管理啥玩意。有这些基本的管理就是一个只有内核操作系统了。配上文件系统、图形界面这些个模块功能就能做出想 Window 这样的东东。只有引入操作系统才能更好的写程序,才能让性能发挥到极致。具体到 uCOSII 也是这样: 首先是主函数, 然后是 OSInit(),这个函数就是对那些全局的数据结构初始化,建立希望的链表等数据结构,为后面全局变量通信做好准备,并且创建了 1-2个系统任务(空闲任务必须,统计任务可选),而所谓的创建任务 OSTaskCreate(另外在这个系统里还有个OSTaskCreateExt也是一种创建任务函数,只不过多了些检测栈、清楚栈的功
能而已)就是把一个函数,的函数地址、自己的栈建立联系、优先级啥弄好为任务切换做好准备。设置好定时切换的相关信息类似定时器,按照节拍在中断中进行任务切换判断、 发生切换, 这个时候还没有开启开关, 所以的任务创建完成后,启动多任务函数 OSStart(),这个函数是让 SP指到其中的一个站然后出栈就跳到一个任务函数里去了,接下来就是正常的任务运行了。

0.png (45.47 KB, 下载次数: 140)

0.png

0.png (81.3 KB, 下载次数: 142)

0.png

0.png (146.19 KB, 下载次数: 128)

0.png

0.png (76.17 KB, 下载次数: 139)

0.png

uCOSII源代码剖析—终极篇.pdf

214.4 KB, 下载次数: 110, 下载积分: 黑币 -5

uCOSII源代码剖析—终极篇

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

板凳
ID:761100 发表于 2020-5-25 21:17 | 只看该作者
正好学到这里了,感谢分享
回复

使用道具 举报

沙发
ID:687872 发表于 2020-1-22 15:57 | 只看该作者
谢谢分享~~!!
回复

使用道具 举报

楼主
ID:20672 发表于 2018-10-18 14:20 | 只看该作者
谢谢分享~~!!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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