zoukankan      html  css  js  c++  java
  • 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中,
    依靠系统的时钟中断,
    触发任务切换,实现当前任务的寄存器入栈及下一个将要运行任务的寄存器出栈,
    完成切换。
  • 相关阅读:
    xml传数据
    简单实用的GroupBox控件
    漂亮的NavMenu导航控件
    使用设计模式构建通用数据库访问类
    Windows路由表详解
    zz Linux Shell常用技巧(目录)
    Ubuntu Linux 环境变量PATH设置
    zz eclipse.ini内存设置
    find 用法
    zz【java规范】Java spi机制浅谈
  • 原文地址:https://www.cnblogs.com/skl374199080/p/3107717.html
Copyright © 2011-2022 走看看