メインページ | アルファベット順一覧 | 構成 | ファイル一覧 | 構成メンバ | ファイルメンバ | 関連ページ

# dkcTaskEngine.c

いわいるタスク処理 [詳細]

`#include "dkcTaskEngine.h"`

dkcTaskEngine.cのインクルード依存関係図

ソースコードを見る。

## マクロ定義
#define | DKUTIL_C_TASK_ENGINE_C
## 関数
DKC_TASK_ENGINE * | dkcAllocTaskEngine (size_t taskworksize)
int | dkcFreeTaskEngine (DKC_TASK_ENGINE **pp)
static void | Return (DKC_TASK_ENGINE *a, DKC_TASK *b)
void | dkcTaskEngineInit (DKC_TASK_ENGINE *p, DKC_TASK *TaskPool[dkcdTASK_NUM], BYTE *TaskWorkPool[dkcdTASK_NUM])
| 自分で確保したメモリ領域を割り当てて初期化する場合。
int | dkcTaskEngineSet (DKC_TASK_ENGINE *p, TASK_COUNT_T prio, DKC_TASK_PROC proc)
| タスクを設定します。使用済みのプライオリティーの場合等で設定できなかった場合はedk_FAILEDを返します。
int | dkcTaskEngineKill (DKC_TASK_ENGINE *p, TASK_COUNT_T prio)
| タスクを削除します。
int | dkcTaskEngineIteration (DKC_TASK_ENGINE *p)
| タスクエンジンに登録されているタスクをイテレーションします。
BOOL | dkcTaskEngineEmpty (DKC_TASK_ENGINE *p, TASK_COUNT_T prio)
| prioのタスクは空いているかどうか≠ﾈら空いている

## 説明

いわいるタスク処理

作者:
  d金魚

から:
  2004/08/22

dkcTaskEngine.c で定義されています。

## マクロ定義

#define DKUTIL_C_TASK_ENGINE_C

| dkcTaskEngine.c の 8 行で定義されています。

## 関数

DKC_TASK_ENGINE* dkcAllocTaskEngine | ( | size_t | taskworksize | ) |

| dkcTaskEngine.c の 11 行で定義されています。 参照先 BYTE, dkcAllocate(), dkcdTASK_NUM, dkcFree(), dkcTaskEngineInit(), と NULL.
    00011                                                         {
    00012     BYTE *temp = NULL;
    00013
    00014     DKC_TASK_ENGINE *p = NULL;
    00015     DKC_TASK *tp = NULL;
    00016
    00017     if(0==taskworksize){
    00018         return NULL;
    00019     }
    00020
    00021
    00022
    00023     p = dkcAllocate(sizeof(DKC_TASK_ENGINE));
    00024     if(NULL==p){
    00025         return NULL;
    00026     }
    00027
    00028     temp = dkcAllocate(taskworksize * dkcdTASK_NUM);
    00029     if(NULL==temp){
    00030         goto Error;
    00031     }
    00032     tp = dkcAllocate(sizeof(DKC_TASK) * dkcdTASK_NUM);
    00033     if(NULL==tp){
    00034         goto Error;
    00035     }
    00036
    00037
    00038
    00039     dkcTaskEngineInit(p,&tp,&temp);
    00040
    00041     return p;
    00042
    00043
    00044 Error:
    00045     //dkcFree((void **)&tp);
    00046     dkcFree((void **)&temp);
    00047     dkcFree((void **)&p);
    00048
    00049     return NULL;
    00050 }

int dkcFreeTaskEngine | ( | DKC_TASK_ENGINE ** | pp | ) |

| dkcTaskEngine.c の 52 行で定義されています。 参照先 dkcFree().
    00052                                            {
    00053     dkcFree((void **) (*pp)->mTaskPool );//&[0]
    00054     dkcFree((void **) (*pp)->mTaskWorkPool );//&[0]
    00055     return dkcFree((void **) pp );
    00056 }

BOOL dkcTaskEngineEmpty | ( | DKC_TASK_ENGINE * | p,
|  | TASK_COUNT_T | prio
| ) |

| prioのタスクは空いているかどうか≠ﾈら空いている dkcTaskEngine.c の 125 行で定義されています。 参照先 dkc_TaskEngine::mTaskPool, dkc_Task::proc, と Return().
    00125                                                              {
    00126     DKC_TASK_PROC tp = Return;
    00127     DKC_TASK *task_p = (DKC_TASK *)p->mTaskPool[prio];
    00128
    00129     return (task_p->proc==tp);
    00130 }

void dkcTaskEngineInit | ( | DKC_TASK_ENGINE * | p,
|  | DKC_TASK * | TaskPool[dkcdTASK_NUM],
|  | BYTE * | TaskWorkPool[dkcdTASK_NUM]
| ) |

  | 自分で確保したメモリ領域を割り当てて初期化する場合。 引数:
  | TaskPool[in] | タスクdkcdTASK_NUM個分のメモリ空間へのアドレス
  | TaskWorkPool[in] | タスクワークdkcdTASK_NUM個分のメモリ空間へのアドレス
覚え書き: 内部でmallocを使わない版 なぜこんなのを用意したかと言うと、タスク処理は組み込み系でも使われそうと思うので･･･？ かなり速度等にシビアなものだと考えているからだ･･･。 dkcTaskEngine.c の 63 行で定義されています。 参照先 BYTE, dkc_TaskEngine::mNowPriority, dkc_TaskEngine::mTaskPool, dkc_TaskEngine::mTaskWorkPool, dkc_TaskEngine::mTaskWorkSize, と Return(). 参照元 dkcAllocTaskEngine().
    00063                                                                                                             {
    00064     int i;
    00065     size_t taskworksize = p->mTaskWorkSize;
    00066     p->mNowPriority = 0;
    00067
    00068     for(i=0;i<dkcdTASK_NUM;i++){
    00069         p->mTaskWorkPool[i] = TaskWorkPool[i * taskworksize];
    00070
    00071         TaskPool[i]->proc = Return;
    00072         TaskPool[i]->work = p->mTaskWorkPool[i];
    00073
    00074         p->mTaskPool[i] = (BYTE *)TaskPool[i];
    00075     }
    00076 }

int dkcTaskEngineIteration | ( | DKC_TASK_ENGINE * | p | ) |

| タスクエンジンに登録されているタスクをイテレーションします。 dkcTaskEngine.c の 104 行で定義されています。 参照先 dkcdTASK_NUM, dkc_TaskEngine::mNowPriority, dkc_TaskEngine::mTaskPool, と dkc_Task::proc.
    00104                                               {
    00105     unsigned int i;
    00106     //一時変数
    00107     DKC_TASK_PROC proc;
    00108     DKC_TASK *task_p;
    00109
    00110     for(i=0;i<dkcdTASK_NUM;i++){
    00111         task_p = (DKC_TASK *)(p->mTaskPool[i]);
    00112         proc = task_p->proc;
    00113         p->mNowPriority = (TASK_COUNT_T)i;
    00114
    00115         //呼び出す。
    00116         proc(p,task_p);
    00117
    00118     }
    00119     return edk_SUCCEEDED;
    00120
    00121 }

int dkcTaskEngineKill | ( | DKC_TASK_ENGINE * | p,
|  | TASK_COUNT_T | prio
| ) |

| タスクを削除します。 dkcTaskEngine.c の 95 行で定義されています。 参照先 dkc_TaskEngine::mTaskPool, dkc_Task::proc, と Return().
    00096 {
    00097     DKC_TASK *pt = (DKC_TASK *)p->mTaskPool[prio];
    00098
    00099     pt->proc  = Return;
    00100     return edk_SUCCEEDED;
    00101 }

int dkcTaskEngineSet | ( | DKC_TASK_ENGINE * | p,
|  | TASK_COUNT_T | prio,
|  | DKC_TASK_PROC | proc
| ) |

| タスクを設定します。使用済みのプライオリティーの場合等で設定できなかった場合はedk_FAILEDを返します。 dkcTaskEngine.c の 79 行で定義されています。 参照先 dkc_TaskEngine::mTaskPool, dkc_Task::proc, と Return().
    00079                                                                              {
    00080     DKC_TASK_PROC sentinel = Return;
    00081     DKC_TASK *pt = (DKC_TASK *)p->mTaskPool[prio];
    00082
    00083     if(pt->proc != sentinel)
    00084     {   //使用している。
    00085         return edk_FAILED;
    00086     }
    00087
    00088     //使用していないなら登録
    00089     pt->proc = proc;
    00090
    00091     return edk_SUCCEEDED;
    00092 }

static void Return | ( | DKC_TASK_ENGINE * | a,
|  | DKC_TASK * | b
| ) | `[static]`

| dkcTaskEngine.c の 58 行で定義されています。 参照元 dkcTaskEngineEmpty(), dkcTaskEngineInit(), dkcTaskEngineKill(), と dkcTaskEngineSet().
    00059 {
    00060     return;
    00061 }