操作系统原理----uCOSII源代码剖析

uCOSII源代码剖析—终极篇
接触操作系统的时候觉得这个最神秘,到底里面做了什么,怎么就成了个操作系统,它到底有什么用,为什么要引进来着个东东。学了之后才知道,原来最根本的思想还是源于汇编里面的跳转和压栈,以调用一个函数为例,编译后的汇编肯定是先通过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指到其中的一个站然后出栈就跳到一个任务函数里去了,接下来就是正常的任务运行了。

https://blog.csdn.net/xkf321/article/details/53888125?ops_request_misc=&request_id=&biz_id=&utm_medium=distribute.pc_search_result.none-task-blog-2alles_rank~default-5-53888125.pc_search_es_clickV2&utm_term=ucosii%E6%BA%90%E4%BB%A3%E7%A0%81%E5%89%96%E6%9E%90&spm=1018.2226.3001.4187

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学无止境2022

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值