tsktick.c

来自「一个多任务操作系统CTask的源代码 用C语言编写」· C语言 代码 · 共 122 行

C
122
字号
/*
   --- Version 2.2 91-05-16 23:56 ---

   TSKTICK.C - CTask - Ticker routines.

   CTask - a Multitasking Kernel for C

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

   No rights reserved.

   This file is new with 2.1. The ticker related functions were moved
   from tsktimer to this module.

   Timer logic has been significantly changed in version 2.0.
*/

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

/*
   create_ticker
      link element into ticker chain.
*/

tick_ptr Globalfunc create_ticker (tick_ptr elem, dword val)
{
   CRITICAL;

#if (TSK_DYNAMIC)
   if (elem == LNULL)
      {
      if ((elem = (tick_ptr)tsk_palloc (sizeof (ticker))) == LNULL)
         return LNULL;
      elem->flags = F_TEMP;
      }
   else
      elem->flags = 0;
#else
   if (elem == LNULL)
      return LNULL;
#endif

   elem->ticks = val;
   C_ENTER;
   elem->next = GLOBDATA ticker_chain;
   GLOBDATA ticker_chain = elem;
   tsk_putqueue (&GLOBDATA current_task->group->ticker_list, (queptr)&elem->chain);
   C_LEAVE;

   return elem;
}


/*
   delete_ticker
      unlink element from ticker chain.
*/

void Globalfunc delete_ticker (tick_ptr elem)
{
   tick_ptr curr;
   CRITICAL;

   curr = (tick_ptr)&GLOBDATA ticker_chain;

   C_ENTER;
   while (curr->next != LNULL && curr->next != elem)
      curr = curr->next;

   curr->next = elem->next;
#if (GROUPS)
   tsk_dequeue ((queptr)&elem->chain);
#endif
   C_LEAVE;
#if (TSK_DYNAMIC)
   if (elem->flags & F_TEMP)
      tsk_pfree (elem);
#endif
}

/*
   set_ticker
      set new ticker value.
*/

void Globalfunc set_ticker (tick_ptr elem, dword val)
{
   CRITICAL;

   C_ENTER;
   elem->ticks = val;
   C_LEAVE;
}


/*
   get_ticker
      get current ticker value.
*/

dword Globalfunc get_ticker (tick_ptr elem)
{
   dword tck;
   CRITICAL;

   C_ENTER;
   tck = elem->ticks;
   C_LEAVE;
   return tck;
}





⌨️ 快捷键说明

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