uCOS整体初步了解

首先在main函数中调用OSTaskCreate的理解。
OSTCBPrioTbl 

OSTaskStkInit() 设置堆栈
OS_TCBInit()TCB任务控制块初始化
OS_Sched()任务调度

在OS_Sched中,OS_SchedNew()函数负责找到新的最高优先级的
任务,并赋值给OSPrioHighRdy
     OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];
这行语句中的三个全局变量都是实现任务切换的优先级判断的关键。
OS_TASK_SW()宏定义,因为C不能操作寄存器,所以对于任务的切换是由这个宏定义,定义的汇编代码实现。
这个宏定义展开是汇编代码。

这些由uS/OC的书中的第三章都可以更详细的获得。

OS_ENTER_CRITICAL();
 OS_EXIT_CRITICAL();
uC/OS中用来实现,开关中断的一组宏定义。当调用功能函数时,必须关闭中断。

uC/OS中的互斥操作是由信号灯机制来实现的,
 OSSemCreate函数创建信号灯。
OSMutexCreate

uC/OS中的任务间通信机制
分为邮箱和队列。
 OSMboxCreate()创建一个邮箱
OSQCreate()创建一个队列。

他们传递的都是一个指针,队列可以看做是一组邮箱构成的数组,只不过他们是由相同的任务控制。
这里的指针可以是一个变量的地址,也可以是一个结构体变量的地址。
因为指针的存在,实现了不同任务间,大量数据的传输。

OSStart()函数开启us/os中真正多任务的开始。
没有返回。
 OS_SchedNew();找到最高优先级,
OSStartHighRdy();通过汇编代码,跳转到需要的地方执行,此时系统才开始真正运行起来。

uC/OS的任务切换是通过汇编代码实现的,
这里边使用的是
中断切换。
所有的切换代码是在
os_cpu_a.asm中,
依靠系统的时钟中断,
触发任务切换,实现当前任务的寄存器入栈及下一个将要运行任务的寄存器出栈,
完成切换。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值