ubinos
Classes | Macros | Typedefs | Functions
task.h File Reference

ubik task API More...

#include <ubinos_config.h>
#include <ubinos/type.h>

Go to the source code of this file.

Classes

struct  __task_tip_t
 

Macros

#define TASK_WAITOPT__IGNOREINVALID   0x80
 
#define TASK_WAITOPT__ALL   0x40
 

Typedefs

typedef void(* taskfunc_ft) (void *)
 
typedef struct __task_tip_t _task_tip_t
 
typedef _task_tip_ttask_pt
 

Functions

int task_create (task_pt *task_p, taskfunc_ft func, void *arg, int priority, unsigned int stackdepth, const char *name)
 
int task_create_ext (task_pt *task_p, taskfunc_ft func, void *arg, int priority, unsigned int stackdepth, const char *name, unsigned int tag, unsigned int option)
 
int task_delete (task_pt *task_p)
 
int task_suspend (task_pt task)
 
int task_resume (task_pt task)
 
int task_sleep (unsigned int tick)
 
int task_sleepms (unsigned int timems)
 
int task_setpriority (task_pt task, int priority)
 
int task_getpriority (task_pt task)
 
int task_gethighestpriority (void)
 
int task_getlowestpriority (void)
 
int task_getmiddlepriority (void)
 
void task_lock (void)
 
void task_unlock (void)
 
int task_setmaxwaitsigobj (task_pt task, int max)
 
int task_getmaxwaitsigobj (task_pt task)
 
int task_waitforsigobjs (void **sigobj_p, int *sigtype_p, void **param_p, int count, unsigned int waitopt)
 
int task_waitforsigobjs_timed (void **sigobj_p, int *sigtype_p, void **param_p, int count, unsigned int waitopt, unsigned int tick)
 
int task_waitforsigobjs_timedms (void **sigobj_p, int *sigtype_p, void **param_p, int count, unsigned int waitopt, unsigned int timems)
 
int task_join (task_pt *task_p, int *result_p, int count)
 
int task_join_timed (task_pt *task_p, int *result_p, int count, unsigned int tick)
 
int task_join_timedms (task_pt *task_p, int *result_p, int count, unsigned int timems)
 
task_pt task_getcur (void)
 
unsigned int task_getremainingtimeout (void)
 
unsigned int task_getremainingtimeoutms (void)
 
unsigned int task_getminstackdepth (void)
 
unsigned int task_getdefaultstackdepth (void)
 
int task_getstacksize (task_pt task, unsigned int *stacksize_p)
 
int task_getmaxstackusage (task_pt task, unsigned int *maxstackusage_p)
 

Detailed Description

ubik task API

ubik 태스크 API를 정의합니다.

Macro Definition Documentation

◆ TASK_WAITOPT__ALL

#define TASK_WAITOPT__ALL   0x40

기다리는 방법 선택 사항: 기다리는 신호 객체들 모두로부터 신호를 받을 때까지 기다림 (모두 기다리기 선택 사항)

Examples
tasktest07.c.

◆ TASK_WAITOPT__IGNOREINVALID

#define TASK_WAITOPT__IGNOREINVALID   0x80

기다리는 방법 선택 사항: 기다리는 신호 객체들 중 NULL이거나 유효성 비트valid bit가 0인 것이 있더라도 그것들을 제외한 나머지 신호 객체들을 기다림 (유효하지 않은 신호 객체 무시하고 기다리기 선택 사항)

Typedef Documentation

◆ _task_tip_t

typedef struct __task_tip_t _task_tip_t

API용 태스크 형 정의

◆ task_pt

typedef _task_tip_t* task_pt

API용 태스크 포인터 형 정의

◆ taskfunc_ft

typedef void(* taskfunc_ft) (void *)

태스크 함수 포인터 형 정의

Function Documentation

◆ task_create()

int task_create ( task_pt task_p,
taskfunc_ft  func,
void *  arg,
int  priority,
unsigned int  stackdepth,
const char *  name 
)

태스크를 생성하는 함수

Parameters
task_p생성한 태스크의 주소를 저장할 포인터의 주소
NULL: 생성한 태스크의 주소를 저장하지 않음

func태스크가 실행할 함수 포인터

arg태스크가 실행할 함수로 전달할 매개변수

priority우선순위

큰 숫자가 높은 우선순위
최고 우선순위는 task_gethighestpriority 함수가 돌려 주는 값
중간 우선순위는 task_getmiddlepriority 함수가 돌려주는 값
최저 우선순위는 task_getlowestpriority 함수가 돌려주는 값

stackdepth스택 깊이(스택 영역 크기는 stackdepth * INT_SIZE 바이트가 됨)
0: 기본 스택 깊이 값(task_getdefaultstackdepth 함수가 돌려주는 값)
1 ~ 최저 스택 깊이 값: 최저 스택 깊이 값(task_getminstackdepth 함수가 돌려주는 값)

name태스크 이름
NULL: 태스크 이름을 지정하지 않음

Returns
0: 성공

-1: 오류
-n: n-1 번째 매개변수가 잘못되었음
Examples
condvtest01.c, condvtest02.c, condvtest03.c, intrtest00.c, msgqtest00.c, msgqtest01.c, msgqtest02.c, msgqtest03.c, mutextest00.c, mutextest01.c, mutextest02.c, mutextest03.c, semtest00.c, semtest01.c, semtest02.c, semtest03.c, signaltest01.c, signaltest02.c, signaltest03.c, stimertest00.c, stimertest01.c, stimertest02.c, tasktest00.c, tasktest01.c, tasktest02.c, tasktest03.c, tasktest04.c, tasktest05.c, tasktest06.c, tasktest07.c, tasktest08.c, and tasktest09.c.

◆ task_create_ext()

int task_create_ext ( task_pt task_p,
taskfunc_ft  func,
void *  arg,
int  priority,
unsigned int  stackdepth,
const char *  name,
unsigned int  tag,
unsigned int  option 
)

태스크를 생성하는 함수 확장형

Parameters
task_p생성한 태스크의 주소를 저장할 포인터의 주소
NULL: 생성한 태스크의 주소를 저장하지 않음

func태스크가 실행할 함수 포인터

arg태스크가 실행할 함수로 전달할 매개변수

priority우선순위

큰 숫자가 높은 우선순위
최고 우선순위는 task_gethighestpriority 함수가 돌려 주는 값
중간 우선순위는 task_getmiddlepriority 함수가 돌려주는 값
최저 우선순위는 task_getlowestpriority 함수가 돌려주는 값

stackdepth스택 깊이(스택 영역 크기는 stackdepth * INT_SIZE 바이트가 됨)
0: 기본 스택 깊이 값(task_getdefaultstackdepth 함수가 돌려주는 값)
1 ~ 최저 스택 깊이 값: 최저 스택 깊이 값(task_getminstackdepth 함수가 돌려주는 값)

name태스크 이름
NULL: 태스크 이름을 지정하지 않음

tag커널 객체를 구별하기 위해 사용하는 꼬리표
0: 0 ~ UBIK_TAG__USRSTART-1 사이의 값으로 자동할당됨
1 ~ UBIK_TAG__USRSTART-1: 오류

사용자가 직접 지정할 경우 UBIK_TAG__USRSTART ~ UINT_MAX 사이의 값을 사용해야 함

option선택 사항 (TASK_OPT__...)
0: 어느 것도 선택하지 않음

Returns
0: 성공

-1: 오류
-n: n-1 번째 매개변수가 잘못되었음

◆ task_delete()

int task_delete ( task_pt task_p)

대상 태스크를 제거하는 함수

Parameters
task_p제거할 대상 태스크의 주소가 저장된 포인터의 주소
task_p 또는 *task_p가 NULL: 현재 태스크를 제거함

제거에 성공하면 *task_p는 NULL이 됨

Returns
0: 성공

-1: 오류
-n: n-1 번째 매개변수가 잘못되었음

◆ task_getcur()

task_pt task_getcur ( void  )

현재 태스크 포인터를 돌려주는 함수

Returns
현재 태스크 포인터

NULL: ubik이 활성화되지 않았음

◆ task_getdefaultstackdepth()

unsigned int task_getdefaultstackdepth ( void  )

스택 깊이 기본값을 돌려주는 함수

Returns
스택 깊이 기본값

◆ task_gethighestpriority()

int task_gethighestpriority ( void  )

태스크가 가질 수 있는 최고 우선순위를 돌려주는 함수

Returns
태스크가 가질 수 있는 최고 우선순위

◆ task_getlowestpriority()

int task_getlowestpriority ( void  )

태스크가 가질 수 있는 최저 우선순위를 돌려주는 함수

Returns
태스크가 가질 수 있는 최저 우선순위

◆ task_getmaxstackusage()

int task_getmaxstackusage ( task_pt  task,
unsigned int *  maxstackusage_p 
)

해당 태스크의 최대 스택 사용량을 돌려주는 함수

Parameters
task대상 태스크 포인터
NULL: 현재 태스크

maxstackusage_p최대 스택 사용량을 저장할 변수의 주소

Returns
0: 성공

-1: 오류
-n: n-1 번째 매개변수가 잘못되었음

◆ task_getmaxwaitsigobj()

int task_getmaxwaitsigobj ( task_pt  task)

대상 태스크가 동시에 기다릴 수 있는 신호 객체 최대 수를 돌려주는 함수

Parameters
task대상 태스크 포인터
NULL: 현재 태스크

Returns
동시에 기다릴 수 있는 신호 객체 최대 수

-1: 오류
-n: n-1 번째 매개변수가 잘못되었음

◆ task_getmiddlepriority()

int task_getmiddlepriority ( void  )

태스크가 가질 수 있는 중간 우선순위를 돌려주는 함수

Returns
태스크가 가질 수 있는 중간 우선순위

◆ task_getminstackdepth()

unsigned int task_getminstackdepth ( void  )

스택 깊이 최저값을 돌려주는 함수

Returns
스택 깊이 최저값

◆ task_getpriority()

int task_getpriority ( task_pt  task)

대상 태스크의 우선순위를 돌려주는 함수

대상 태스크가 NULL이고 커널이 활성화 상태가 아니면(ubik_comp_start 함수를 호출하기 전이면) 중간 우선 순위(task_getmiddlepriority 함수가 돌려 주는 값)를 돌려줌

Parameters
task대상 태스크 포인터
NULL: 현재 태스크

Returns
대상 태스크의 우선순위

-1: 오류
-n: n-1 번째 매개변수가 잘못되었음
Examples
condvtest01.c, condvtest02.c, condvtest03.c, intrtest00.c, msgqtest00.c, msgqtest01.c, msgqtest02.c, msgqtest03.c, mutextest00.c, mutextest01.c, mutextest02.c, mutextest03.c, semtest00.c, semtest01.c, semtest02.c, semtest03.c, signaltest01.c, signaltest02.c, signaltest03.c, stimertest00.c, stimertest01.c, stimertest02.c, tasktest00.c, tasktest01.c, tasktest02.c, tasktest03.c, tasktest04.c, tasktest05.c, tasktest06.c, tasktest07.c, tasktest08.c, and tasktest09.c.

◆ task_getremainingtimeout()

unsigned int task_getremainingtimeout ( void  )

현재 태스크의 남은 제한 시간을 돌려주는 함수

제한 시간을 두고 신호 객체를 기다리는 태스크가 제한 시간이 다하기 전에 신호를 받고 깨어났을 경우, 이 함수를 사용해 남은 제한 시간을 알아낼 수 있음

Returns
남은 제한 시간 (시스템 틱tick 수)
Examples
tasktest08.c.

◆ task_getremainingtimeoutms()

unsigned int task_getremainingtimeoutms ( void  )

현재 태스크의 남은 제한 시간을 돌려주는 함수

제한 시간을 두고 신호 객체를 기다리는 태스크가 제한 시간이 다하기 전에 신호를 받고 깨어났을 경우, 이 함수를 사용해 남은 제한 시간을 알아낼 수 있음

Returns
남은 제한 시간 (천분의 일초 단위)

◆ task_getstacksize()

int task_getstacksize ( task_pt  task,
unsigned int *  stacksize_p 
)

해당 태스크의 스택 영역 크기를 돌려주는 함수

Parameters
task대상 태스크 포인터
NULL: 현재 태스크

stacksize_p스택 영역 크기를 저장할 변수의 주소

Returns
0: 성공

-1: 오류
-n: n-1 번째 매개변수가 잘못되었음

◆ task_join()

int task_join ( task_pt task_p,
int *  result_p,
int  count 
)

대상 태스크들이 종료되기를 기다리는 함수

Parameters
task_p대상 태스크 포인터 배열

result_p결과값을 저장할 배열
NULL: 결과값을 저장하지 않음

결과값
0: 정상 종료
UBIK_ERR__DEADLOCK : 데드락 발생 가능성이 있음

count배열 길이 (UBINOS__UBIK__TASK_MAXWAITSIGOBJ_MAX 보다 작거나 같아야 함)

Returns
0: 성공

-1: 오류
-n: n-1 번째 매개변수가 잘못되었음
UBIK_ERR__DEADLOCK : 데드락 발생 가능성이 있음
Examples
condvtest01.c, condvtest02.c, condvtest03.c, intrtest00.c, msgqtest00.c, msgqtest01.c, msgqtest02.c, msgqtest03.c, mutextest00.c, mutextest01.c, mutextest02.c, mutextest03.c, semtest00.c, semtest01.c, semtest02.c, semtest03.c, signaltest01.c, signaltest02.c, signaltest03.c, stimertest00.c, stimertest01.c, stimertest02.c, tasktest00.c, tasktest01.c, tasktest02.c, tasktest03.c, tasktest04.c, tasktest05.c, tasktest07.c, tasktest08.c, and tasktest09.c.

◆ task_join_timed()

int task_join_timed ( task_pt task_p,
int *  result_p,
int  count,
unsigned int  tick 
)

제한 시간 동안 대상 태스크들이 종료되기를 기다리는 함수

Parameters
task_p대상 태스크 포인터 배열

result_p결과값을 저장할 배열
NULL: 결과값을 저장하지 않음

결과값
0: 정상 종료
UBIK_ERR__TIMEOUT : 제한 시간 초과
UBIK_ERR__DEADLOCK : 데드락 발생 가능성이 있음

count배열 길이 (UBINOS__UBIK__TASK_MAXWAITSIGOBJ_MAX 보다 작거나 같아야 함)

tick제한 시간 (시스템 틱tick 수)

Returns
0: 성공

-1: 오류
-n: n-1 번째 매개변수가 잘못되었음
UBIK_ERR__TIMEOUT : 제한 시간 초과
UBIK_ERR__DEADLOCK : 데드락 발생 가능성이 있음

◆ task_join_timedms()

int task_join_timedms ( task_pt task_p,
int *  result_p,
int  count,
unsigned int  timems 
)

제한 시간 동안 대상 태스크들이 종료되기를 기다리는 함수 (천분의 일초 단위)

Parameters
task_p대상 태스크 포인터 배열

result_p결과값을 저장할 배열
NULL: 결과값을 저장하지 않음

결과값
0: 정상 종료
UBIK_ERR__TIMEOUT : 제한 시간 초과
UBIK_ERR__DEADLOCK : 데드락 발생 가능성이 있음

count배열 길이 (UBINOS__UBIK__TASK_MAXWAITSIGOBJ_MAX 보다 작거나 같아야 함)

timems제한 시간 (천분의 일초)

Returns
0: 성공

-1: 오류
-n: n-1 번째 매개변수가 잘못되었음
UBIK_ERR__TIMEOUT : 제한 시간 초과
UBIK_ERR__DEADLOCK : 데드락 발생 가능성이 있음

◆ task_lock()

void task_lock ( void  )

태스크 전환을 금지하는 함수

◆ task_resume()

int task_resume ( task_pt  task)

중지suspend된 대상 태스크를 재시작resume하는 함수

Parameters
task대상 태스크 포인터

Returns
0: 성공

-1: 오류
-n: n-1 번째 매개변수가 잘못되었음
Examples
tasktest03.c, and tasktest09.c.

◆ task_setmaxwaitsigobj()

int task_setmaxwaitsigobj ( task_pt  task,
int  max 
)

대상 태스크가 동시에 기다릴 수 있는 신호 객체 최대 수를 설정하는 함수

Parameters
task대상 태스크 포인터
NULL: 현재 태스크

max동시에 기다릴 수 있는 신호 객체 최대 수 (UBINOS__UBIK__TASK_MAXWAITSIGOBJ_MAX 보다 작거나 같아야 함)

Returns
0: 성공

-1: 오류
-n: n-1 번째 매개변수가 잘못되었음
Examples
tasktest07.c.

◆ task_setpriority()

int task_setpriority ( task_pt  task,
int  priority 
)

대상 태스크의 우선순위를 변경하는 함수

Parameters
task대상 태스크 포인터
NULL: 현재 태스크

priority우선순위

큰 숫자가 높은 우선순위
최고 우선순위는 task_gethighestpriority 함수가 돌려 주는 값
중간 우선순위는 task_getmiddlepriority 함수가 돌려주는 값
최저 우선순위는 task_getlowestpriority 함수가 돌려주는 값

Returns
0: 성공

-1: 오류
-n: n-1 번째 매개변수가 잘못되었음
Examples
tasktest05.c.

◆ task_sleep()

int task_sleep ( unsigned int  tick)

◆ task_sleepms()

int task_sleepms ( unsigned int  timems)

현재 태스크를 휴면sleep시키는 함수 (천분의 일초 단위)

Parameters
timems휴면sleep시킬 시간(천분의 일초)

Returns
0: 성공

-1: 오류

◆ task_suspend()

int task_suspend ( task_pt  task)

대상 태스크를 중지suspend하는 함수

Parameters
task대상 태스크 포인터
NULL: 현재 태스크

Returns
0: 성공

-1: 오류
-n: n-1 번째 매개변수가 잘못되었음
Examples
tasktest03.c, and tasktest09.c.

◆ task_unlock()

void task_unlock ( void  )

태스크 전환을 허가하는 함수

◆ task_waitforsigobjs()

int task_waitforsigobjs ( void **  sigobj_p,
int *  sigtype_p,
void **  param_p,
int  count,
unsigned int  waitopt 
)

신호 객체 여러 개를 동시에 기다리는 함수

동시에 기다릴 수 있는 신호 객체 수 기본값은 1이며, task_setmaxwaitsigobj 함수로 변경할 수 있음
동시에 기다리는 신호 객체 수가 많으면 함수 내부의 크리티컬 상태(인터럽트 비활성화 상태) 유지 시간이 길어지기 때문에, 성능이 낮은 시스템에서 문제가 발생할 수 있음

Parameters
sigobj_p대상 개체 포인터 배열

sigtype_p받은 신호를 저장할 배열

param_p신호 객체와 같이 전달할 매개변수
NULL: 매개변수를 전달하지 않음

매개변수
신호 객체가 메시지큐일 경우 받은 메시지를 저장할 버퍼
신호 객체가 조건변수condition variable일 경우 조건변수condition variable를 보호하는 뮤텍스

count배열 길이

waitopt기다리는 방법 선택 사항 (TASK_WAITOPT__...)
0: 어느 것도 선택하지 않음

기다리는 방법을 선택하지 않으면 기다리는 신호 객체들 중 하나 이상으로부터 신호를 받을 때까지 기다림

Returns
0: 성공

-1: 오류
-n: n-1 번째 매개변수가 잘못되었음
UBIK_ERR__DEADLOCK : 데드락 발생 가능성이 있음
Examples
tasktest07.c.

◆ task_waitforsigobjs_timed()

int task_waitforsigobjs_timed ( void **  sigobj_p,
int *  sigtype_p,
void **  param_p,
int  count,
unsigned int  waitopt,
unsigned int  tick 
)

제한 시간 동안 신호 객체 여러 개를 동시에 기다리는 함수

동시에 기다릴 수 있는 신호 객체 수 기본값은 1이며, task_setmaxwaitsigobj 함수로 변경할 수 있음
동시에 기다리는 신호 객체 수가 많으면 함수 내부의 크리티컬 상태(인터럽트 비활성화 상태) 유지 시간이 길어지기 때문에, 성능이 낮은 시스템에서 문제가 발생할 수 있음

Parameters
sigobj_p대상 개체 포인터 배열

sigtype_p받은 신호를 저장할 배열

param_p신호 객체와 같이 전달할 매개변수
NULL: 매개변수를 전달하지 않음

매개변수
신호 객체가 메시지큐일 경우 받은 메시지를 저장할 버퍼
신호 객체가 조건변수condition variable일 경우 조건변수condition variable를 보호하는 뮤텍스

count배열 길이

waitopt기다리는 방법 선택 사항 (TASK_WAITOPT__...)
0: 어느 것도 선택하지 않음

기다리는 방법을 선택하지 않으면 기다리는 신호 객체들 중 하나 이상으로부터 신호를 받을 때까지 기다림

tick제한 시간 (시스템 틱tick 수)

Returns
0: 성공

-1: 오류
-n: n-1 번째 매개변수가 잘못되었음
UBIK_ERR__TIMEOUT : 제한 시간 초과
UBIK_ERR__DEADLOCK : 데드락 발생 가능성이 있음
Examples
tasktest07.c.

◆ task_waitforsigobjs_timedms()

int task_waitforsigobjs_timedms ( void **  sigobj_p,
int *  sigtype_p,
void **  param_p,
int  count,
unsigned int  waitopt,
unsigned int  timems 
)

제한 시간 동안 신호 객체 여러 개를 동시에 기다리는 함수 (천분의 일초 단위)

동시에 기다릴 수 있는 신호 객체 수 기본값은 1이며, task_setmaxwaitsigobj 함수로 변경할 수 있음
동시에 기다리는 신호 객체 수가 많으면 함수 내부의 크리티컬 상태(인터럽트 비활성화 상태) 유지 시간이 길어지기 때문에, 성능이 낮은 시스템에서 문제가 발생할 수 있음

Parameters
sigobj_p대상 개체 포인터 배열

sigtype_p받은 신호를 저장할 배열

param_p신호 객체와 같이 전달할 매개변수
NULL: 매개변수를 전달하지 않음

매개변수
신호 객체가 메시지큐일 경우 받은 메시지를 저장할 버퍼
신호 객체가 조건변수condition variable일 경우 조건변수condition variable를 보호하는 뮤텍스

count배열 길이

waitopt기다리는 방법 선택 사항 (TASK_WAITOPT__...)
0: 어느 것도 선택하지 않음

기다리는 방법을 선택하지 않으면 기다리는 신호 객체들 중 하나 이상으로부터 신호를 받을 때까지 기다림

timems제한 시간 (천분의 일초)

Returns
0: 성공

-1: 오류
-n: n-1 번째 매개변수가 잘못되었음
UBIK_ERR__TIMEOUT : 제한 시간 초과
UBIK_ERR__DEADLOCK : 데드락 발생 가능성이 있음