⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tskname.c

📁 一个可以立即使用的嵌入式操作系统
💻 C
字号:
/*
   --- Version 2.2 90-10-12 10:33 ---

   CTask Name searching routines

   Public Domain Software written by
      Thomas Wagner
      Ferrari electronic Gmbh
      Beusselstrasse 27
      D-1000 Berlin 21
      Germany

   This file is new with version 2.1.
   The find_name and find_group_name functions were moved here from
   'tsksub.c', since they are not needed in the basic kernel.
   This will save some code in applications not using the routines.

   The add_name function to add a statically allocated structure to
   the name list has been added in version 2.1.
*/

#include "tsk.h"
#include "tsklocal.h"

#if (TSK_NAMED)

local int Staticfunc tsk_streq (byteptr n1, byteptr n2)
{
   while (*n1 && *n1 == *n2)
      {
      n1++;
      n2++;
      }
   return *n1 == *n2; 
}

/*
   find_name
   find_group_name
      find structure, given name and type. 
      If type is less than zero, the first name-element matching the
      name is returned.
      If type is greater or equal to zero, the first structure matching
      the name and type is returned.
*/

#if (GROUPS)
farptr Globalfunc find_group_name (gcbptr group, byteptr name, int kind)
{
   queptr curr;

   if (kind == TYP_GROUP && tsk_streq (name, group->namelist.name))
      return group;

   for (curr = group->namelist.list.first; !(curr->kind & Q_HEAD); curr = curr->next)
      if (kind < 0 || (int)curr->kind == kind)
         if (tsk_streq (name, ((nameptr)curr)->name))
            return (kind >= 0) ? ((nameptr)curr)->strucp : curr;

   return LNULL;
}
#endif


farptr Globalfunc find_name (byteptr name, int kind)
{
#if (GROUPS)
   farptr curr;
   gcbptr group;

   if (tsk_global == LNULL)
      if (!ctask_resident ())
         return LNULL;

   for (group = GLOBDATA current_task->group; 
        group != LNULL; group = group->home)
      if ((curr = find_group_name (group, name, kind)) != LNULL)
         return curr;
#else
   queptr curr;

   if (kind == TYP_GROUP)
      return LNULL;

   for (curr = GLOBDATA name_list.list.first; !(curr->kind & Q_HEAD);
        curr = curr->next)
      if (kind < 0 || (int)curr->kind == kind)
         if (tsk_streq (name, ((nameptr)curr)->name))
            return (kind >= 0) ? ((nameptr)curr)->strucp : curr;
#endif

   return LNULL;
}


void Globalfunc add_event_name (nameptr elem)
{
   CRITICAL;

   if (elem->name [0] && elem->list.first == LNULL)
      {
      C_ENTER;
#if (GROUPS)
      tsk_putqueue (&GLOBDATA current_task->group->namelist.list, (queptr)&elem->list);
#else
      tsk_putqueue (&GLOBDATA name_list.list, (queptr)&elem->list);
#endif
      C_LEAVE;
      }
}
#endif


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -