zA嵌入式系统设计与实例开发教学讲义.ppt 立即下载
2024-12-04
约2.5千字
约105页
0
1.9MB
举报 版权申诉
预览加载中,请您耐心等待几秒...

zA嵌入式系统设计与实例开发教学讲义.ppt

zA嵌入式系统设计与实例开发教学讲义.ppt

预览

免费试读已结束,剩余 100 页请下载文档后查看

10 金币

下载文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

嵌入式系统设计与实例开发
——ARM与C/OS-Ⅱ

第四讲实时嵌入式操作系统C/OS-Ⅱ
嵌入式实时操作系统C/OS[1]嵌入式实时操作系统C/OS[1]嵌入式实时操作系统C/OS[1]临界段(CriticalSections)临界段(CriticalSections)任务task任务状态任务控制块(TCB)任务控制块结构空任务列表就绪表1、使任务进入就绪态的程序编写2、从就绪表中删除一个任务的程序3、找出进入就绪态的优先级最高的任务程序编写源代码中使用了查表法任务的调度--OSSched任务的调度--OSSched任务的调度--OSSched任务的调度--OSSched给调度器上锁和开锁(LockingandUnLockingtheScheduler)给调度器上锁和开锁(LockingandUnLockingtheScheduler)空闲任务统计任务μC/OS-Ⅱ中的中断处理μC/OS-Ⅱ中的中断处理关于OSIntExit()中断与时钟节拍时钟节拍voidOSTimeTick(void)
{
OS_TCB*ptcb;
ptcb=OSTCBList;---OSTCB链表指针
while(ptcb->OSTCBPrio!=OS_IDLE_PRIO){看是不是空闲任务,空闲任务是最后的任务
if(ptcb->OSTCBDly!=0){是否延时
if(--ptcb->OSTCBDly==0){延时减一,看是否延时结束
if(!(ptcb->OSTCBStat&OS_STAT_SUSPEND)){
OSRdyGrp|=ptcb->OSTCBBitY;是的话将其列入准备就绪表
OSRdyTbl[ptcb->OSTCBY]|=ptcb->OSTCBBitX;
}else{ptcb->OSTCBDly=1;}
}}
ptcb=ptcb->OSTCBNext;指针指向下一个TCB结构
}
OSTime++;变量加一,记录系统启动以来的时钟滴答数
}OSTimeTick(void)时间μC/OS-Ⅱ初始化μC/OS-Ⅱ的启动μC/OS-Ⅱ的启动	bl		OSTaskSwHook用户自定义函数
把OSRunning设为1
	li		r0,1
	lis		r11,OSRunning@ha
	stb		r0,OSRunning@l(r11)
获取准备运行的任务TCB指针
	lis		r11,OSTCBHighRdy@ha
	lwz		r11,OSTCBHighRdy@l(r11)
设置当前运行任务TCB
	lis		r12,OSTCBCur@ha
	stw		r11,OSTCBCur@l(r12)
获取新的任务的堆栈指针
	lwz		r1,0(r11)
恢复新任务的上下文
	lwz		r2,XR2(r1)
.......
	rfivoidOSTimeDly(INT16Uticks)
{
if(ticks>0){确保tick大于0
OS_ENTER_CRITICAL();进入临界段代码
if((OSRdyTbl[OSTCBCur->OSTCBY]&=~OSTCBCur->OSTCBBitX)==0){/*Delaycurrenttask*/
OSRdyGrp&=~OSTCBCur->OSTCBBitY;设置任务为非就绪状态
}
OSTCBCur->OSTCBDly=ticks;在TCB中装载延时数
OS_EXIT_CRITICAL();退出临界段代码
OSSched();调度下一个任务开始运行
}
}任务管理
建立任务TaskCreate()TaskCreate()OSTaskCreateExt任务堆栈OSTaskCreateExt任务堆栈	删除任务,OSTaskDel()请求删除任务,OSTaskDelReq()改变任务的优先级,OSTaskChangePrio()挂起任务,OSTaskSuspend()恢复任务,OSTaskResume()获得有关任务的信息,OSTaskQuery()任务之间的通信与同步
任务间通信手段事件控制块ECB事件控制块ECB通信示例事件控制块ECB:程序结构事件控制块ECB等待任务列表1、将一个任务放到事件的等待任务列表中2、从等待任务列表中删除一个任务3、在等待任务列表中查最高优先级的任务使一个任务进入就绪态,OSEventTaskRdy()使一个任务进入等待某事件发生状态,OSEventTaskWait()由于等待超时而将任务置为就绪态,OSEventTO(信号量semaphore信号量semaphore信号量semaphore信号量semaphore建立一个信号量,OSSemCreate()等待一个信号量,OSSemPend()发送一个信号量,OSSemPost()无等待地请求一个信号量,OSSemAc
查看更多
王子****青蛙
实名认证
内容提供者
单篇购买
VIP会员(1亿+VIP文档免费下)

扫码即表示接受《下载须知》

zA嵌入式系统设计与实例开发教学讲义

文档大小:1.9MB

限时特价:扫码查看

• 请登录后再进行扫码购买
• 使用微信/支付宝扫码注册及付费下载,详阅 用户协议 隐私政策
• 如已在其他页面进行付款,请刷新当前页面重试
• 付费购买成功后,此文档可永久免费下载
全场最划算
12个月
199.0
¥360.0
限时特惠
3个月
69.9
¥90.0
新人专享
1个月
19.9
¥30.0
24个月
398.0
¥720.0
6个月会员
139.9
¥180.0

6亿VIP文档任选,共次下载特权。

已优惠

微信/支付宝扫码完成支付,可开具发票

VIP尽享专属权益

VIP文档免费下载

赠送VIP文档免费下载次数

阅读免打扰

去除文档详情页间广告

专属身份标识

尊贵的VIP专属身份标识

高级客服

一对一高级客服服务

多端互通

电脑端/手机端权益通用