美文网首页RTOS和GUI_基于英飞凌tc2x及stm32开发板
etas os资源获取和释放源码分析--Apple的学习笔记

etas os资源获取和释放源码分析--Apple的学习笔记

作者: applecai | 来源:发表于2023-06-14 22:10 被阅读0次

一,前言

之前仅了解到资源共享的task在某个task执行的时候,会出现优先级翻转,而优先级就是拥有这个资源的最高task的优先级,这样可以保证有这些资源的其它task不会抢占,那么资源就可以被某个task独享了。但是资源有3中类型除了标准类型还有内部资源和link资源这2种不是很理解,之后再看。

二,源码分析

  1. 获取资源
    主要就是保存当前任务优先级,然后资源的优先级大于当前任务的优先级,就把当前任务对象的优先级设置为这个资源的优先级。主要代码如下
    /* Task-only resource */
    /* Save the current task priority mask */
    ResID->dynamic->saved_priority.tpmask = Os_RunningTPMask;

    /* Change the task priority iff higher. [$UKS 186] */
    if ((0U == (previous_imask & 0xFFU) ) && (ResID->tpmask.t0 > Os_RunningTPMask.t0)) {
       Os_RunningTPMask = ResID->tpmask;
    }
  1. 释放资源
    就是把当前任务对象的优先级还原,然后和core中的就绪任务中的优先级进行比较,若还原后优先级变低了,那么就切换为高优先级任务。
    /* Task-only resource */
    Os_RunningTPMask = ResID->dynamic->saved_priority.tpmask; /* Change the task priority. [$UKS 187] */
  
  
  if ((0U == (previous_imask & 0xFFU) )) {
    want_dispatch = (Os_ReadyTasks.p0 > Os_RunningTPMask.t0) /*lint !e931 PC-lint thinks there are side effects here */;
    if (want_dispatch) {
      Os_Dispatch();
    }
  }

三,小结

这个标准资源获取和释放的代码看起来比较简单,和我之前理解的需求一样。

相关文章

网友评论

    本文标题:etas os资源获取和释放源码分析--Apple的学习笔记

    本文链接:https://www.haomeiwen.com/subject/xgbtydtx.html