ucosII实时操作系统 实现--问答》》待续
来源:互联网 发布:ubuntu gcc下载 编辑:程序博客网 时间:2024/05/17 04:40
疑问:
1、何时发生调度?
2、怎么发生的调度?如何实现的,凭什么高优先级的任务到了,能够及时带走? 靠异常吗?
3、为什么从中断服务子程序出来后,可能会发生调度/切换?
4、μC/OS-Ⅱ任务调度所花的时间是常数,与应用程序中建立的任务数无关? 不相信是个常数。任务调度算法?定义?
5、近期弄得一个项目,加了些功能,结果频繁进入hard fault异常,结果找到两处根源。。擦–一处是:生命了一个全局文件指针,之前测试用着,整合程序时 少干掉了.fclose(file);另一处便是常见的任务栈分配少啦,512*4没够,有点陶醉–一怒之下–》1024*4 ,搞定,然而问题也来了,任务栈的分配?给谁使儿?用来确定以后如何估算任务栈的大小,然后再*1.5啥的,心里就妥妥的踏实啦。
带着疑问,查资料+找源码,
1、2、何时发生调度?
- OSIntExit–OS_SchedNew
- OSStart–OS_SchedNew
- OS_Sched–OS_SchedNew
- OSEventPendMulti–OS_Sched;以下都是OS_Sched–OS_SchedNew的调度
- OSSchedUnlock
- OSFlagDel
- OSFlagPend
- OSFlagPost
- OSMboxDel
- OSMboxPend
- OSMboxPendAbort
- OSMboxPost
- OSMboxPostOpt
- OSMutexDel
- OSMutexPend
- OSMutexPost
- OSQDel
- OSQPend
- OSQPendAbort
- OSQPost
- OSQPostFront
- OSQPostOpt
- OSSemDel
- OSSemPend
- OSSemPendAbort
- OSSemPost
- OSTaskChangePrio
- OSTaskCreate
- OSTaskCreateExt
- OSTaskDel
- OSTaskResume
- OSTaskSuspend
- OSTimeDly
- OSTimeDlyResume
以上这些函数均会导致调度的发生,当然OSTimeDlyHMSM内部调用OSTimeDly的函数也在这个行列中。
ucosII操作系统,主要有以下几个任务调度时机:
- 进程状态转换时刻,进程终止、睡眠时;
- 可运行队列中增加一个进程时;
- 内核处理完成后,由中断返回时;
任务调度依据:根据最高就绪优先级值OSPrioHighRdy在任务控制块数组OSTCBPrioTbl中找到最高就绪优先级任务OSTCBHighRdy,然后进行任务切换调度。
为了让任务主动让出CPU,在没有同步关系的任务中需要使用OSTimeDly进行延时以便任务切换。OSTimeDly通过调用任务切换函数OS_Sched切换任务。对于延时任务,其关键的处理在系统时钟中断处理函数OSTimeTick中。此函数每个时钟tick被调用一次,把延时的任务置为“非就绪”状态,并对任务延时时间进行计时。在OS_SchedNew中判断任务的优先级和最高任务优先级是否一致,如果一样,表示是一个任务,不调度。否则,就暂停当前任务而切换到高优先级任务。
3、为什么从中断服务子程序出来后,可能会发生调度/切换?
可能直接继续进行下一个中断服务程序,这不称为调度。
4、
任务调度:
- ucosII实时操作系统 实现--问答》》待续
- ucosII占先式实时操作系统思想
- ucosii实时操作系统的任务调度
- ucOSII 学习之初识实时操作系统-时间管理
- Ucosii的实时操作系统(任哲)——第二章
- ucosii的实时操作系统(任哲)——第一章
- 嵌入式实时操作系统UCOSII(邵贝贝)--笔记之实时系统概念(第二章)
- 实时操作系统基础概念总结——基于ucosii的使用
- 嵌入式实时操作系统ucosii原理及应用(任哲)-- --阅读笔记1
- 嵌入式实时操作系统ucosii原理及应用(任哲)-- --阅读笔记2
- ucosII操作系统文件结构
- ucosii操作系统基础知识
- 面试问答—软实时和硬实时操作系统的区别
- ucosii操作系统分析(一)
- windows下面编译ucosII操作系统
- 实时操作系统的忙等延迟实现
- 实时操作系统
- 实时操作系统
- codeforces 567E President and Roads Dijikstra
- boost asio的异步事件处理函数是在执行异步事件的run函数所在的线程里面执行的
- 队列的知识
- [62]Unique Paths
- mac 配置sourcetree、git和phabricator环境
- ucosII实时操作系统 实现--问答》》待续
- DL:受限波尔兹曼机(RBM)能量模型
- 垃圾回收算法
- Android百分比布局:PercentFrameLayout
- 使用sLDA
- 快速开发平台ServerURL()使用介绍
- 关于时间:UTC时间、GMT时间、本地时间、Unix时间戳
- 人生感悟-成熟
- ECMAScript 6 入门 ----Generator 函数