zoukankan      html  css  js  c++  java
  • OSAL的原理

    讲解协议栈怎么运行起来!!
    回顾:1.应用层是一个任务,它有一个系统分配给他的数值唯一的编号叫做任务ID

    2.任务可以处理事件,处理事件的这些代码都在一个函数里,这个函数叫任务事件处理函数

    3.应用层任务还有一个2个字节的变量,叫做任务事件变量;

    任务事件变量和应用层定义的事件的关系,如果事件变量和某个事件的宏值与操作为1,那么表示应用层任务将要处理这个事件。

    系统在运行的时候会不断的去读应用层任务事件变量(events),当它发现这个变量为0,则认为应用层当前没有事件需要去处理,如果发现这个变量不为0,它就认为应用层任务有事件将要去处理,它就会去调用应用层任务事件处理函数UINT16 SDApp_ProcessEvent(byte task_id,UINT16 events),并且把任务事件变量的值传给events;在这个事件处理函数里,events这个变量会分别和应用层定义的所有事件宏值进行与操作,如果发现那个值为1,那么就会去处理相应的事件。

    设置任务事件函数osal_set_event(SDApp_TaskID,SDApp_MY_MSG_EVT);叫任务SDApp_TaskID来处理事件SDApp_MY_MSG_EVT;该函数体,如下:

    它的本质是把应用层任务事件变量和我们的事件同时进行或起来,如果有事件,那么或起来肯定非零,那么系统判断任务事件变量不为零,那么就进入任务处理事件函数里面来,那么再用该任务事件变量与事件变量进行与的时候,肯定能执行对应事件的代码。

    几乎每一个层都是一个任务,那么每一个层都有一个任务ID,都有一个任务处理函数,任务事件变量;

    系统把所有任务事件处理A,任务事件处理B,任务事件处理C,等等放到一个函数数组里面;

    系统把所有的任务事件变量放到一个变量数组里面来;

    验证:进入主函数ZMain.c里面,主要关注osal_init_system();函数和osal_start_system()函数

    我们来显示SDApp_TaskID这个值到底是多少,

    那么显示为8.

    tasksCnt总共有多少任务函数。

    以上是任务的初始化,

    下面进入函数osal_start_system

  • 相关阅读:
    @ControllerAdvice + @ExceptionHandler 使用
    将博客搬至CSDN
    Docker pull网络错误
    Centos7.5安装Docker
    Oracle18c创建不带C##的用户
    Centos7.5静默安装Oracle18c
    nodeJs和JavaScript的异同
    maven项目引入本地包,不使用中央仓库
    java中把指数形式的数字转为正常形式显示
    validateJarFile jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
  • 原文地址:https://www.cnblogs.com/gary-guo/p/5721449.html
Copyright © 2011-2022 走看看