首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
在μCOS-II操作系统下,能使运行态任务转入等待态的系统
[单选题]
在μC/OS-II操作系统下,能使运行态任务转入等待态的系统函数是( )。
OSSemPost()
OSTaskCreate()
OSTaskDel()
OSTimeDly()
查看答案及解析
添加笔记
求解答(0)
邀请回答
收藏(20)
分享
纠错
1个回答
添加回答
3
dylmail
等待信号量函数OSSemPend (OS_EVENT *pevent, INT16U timeout, INT8U *err)
发送信号量函数
OSSemPost (OS_EVENT *pevent)
信号量挂起函数OSSemPost()
如果我们想对一个公共资源进行互斥访问,例如:如果我们想让两个任务Task1和Task2都可以调用Fun()函数,但不能同时调用,最好定义Semp = OSSemCreate(1),同理在各自的任务中都需要调用OSSemPend(Semp,0,&err)请求此信号量,如果可用,则调用Fun(),然后再调用OSSemPost(Semp)释放该信号量。这里就实现了一个资源的互斥访问。(注:初始化OSSemCreate(1),那么一个任务中有OSSemPend,那么可以执行,执行之后cnt==0,其他任务的OSSemPend无法获得sem,只能等待,除非任务一有OSSemPost,使其cnt++,这样其他任务的Pend可以执行。)
任务创建函数OSTaskCreate(void(*task)(void *pd),void *pdata,OS_STK *ptos,INT8U prio)
创建
task任务
,设置优先级
prio,参数表
第一个是指向该任务运行代码的指针,第二个是指向数据初始化的指针,第三个是任务堆栈的栈顶,第四个是任务优先级
。
任务删除函数
OSTaskDel
在uc/os中任务的删除是任务创建的逆过程,主要是取消就续表、就绪组的标志,删除就绪链
。
在uc/os中删除一个任务,一般情况下是自己删除自己。如果任务A直接调用OSTaskDel (INT8U prio)函数来直接删除任务B,任务B占用的资源会得不到释放,系统到最后会没有内存可用。所以当任务A想要删除任务B的时候,会调用OSTaskDelReq (INT8U prio)函数来请求任务B删除自己,比如B的优先级是10,即调用OSTaskDelReq (10)。
任务延时函数OSTimeDly用于阻塞任务一定时间,将任务转入等待。
这个时间以参数的形式给出,如果这个参数的值是N,那么在N个时间片(时钟滴答)之后,任务才能回到就绪态获得继续运行的机会。
——操作系统在每个时钟中断都要对每个OSTCBDly大于0的任务块的OSTCBDly进行减1操作和进行调度,那么当任务的延迟时间到了的时候(OSTCBDly为0)就可以恢复到就绪态。
发表于 2020-07-29 16:23:17
回复(0)
这道题你会答吗?花几分钟告诉大家答案吧!
提交观点
问题信息
嵌入式
上传者:
小小
难度:
1条回答
20收藏
579浏览
热门推荐
相关试题
代码中使用const定义的变量,存...
Java工程师
C++工程师
顺丰集团
基础
嵌入式
评论
(8)
来自
顺丰科技2019秋招嵌入...
支持时间片轮转调度的实时操作系统中...
操作系统
Java工程师
C++工程师
顺丰集团
基础
嵌入式
评论
(1)
来自
顺丰科技2019秋招嵌入...
sizeof(int)的结果是多少?()
Java工程师
C++工程师
顺丰集团
基础
嵌入式
评论
(3)
来自
顺丰科技2019秋招嵌入...
之前的经历中单品数据分析的经验丰富...
评论
(1)
什么样的人适合做数据分析
评论
(1)
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题