ubinos
|
ubik task API More...
Go to the source code of this file.
Classes | |
struct | __task_tip_t |
Macros | |
#define | TASK_WAITOPT__IGNOREINVALID 0x80 |
#define | TASK_WAITOPT__ALL 0x40 |
#define | TASK_OPT__NOAUTODEL 0x40 |
Typedefs | |
typedef void(* | taskfunc_ft) (void *) |
typedef struct __task_tip_t | _task_tip_t |
typedef _task_tip_t * | task_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_noautodel (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) |
void | task_yield (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) |
int | task_join_and_delete (task_pt *task_p, int *result_p, int count) |
int | task_join_and_delete_timed (task_pt *task_p, int *result_p, int count, unsigned int tick) |
int | task_join_and_delete_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) |
int | task_is_idle (task_pt task) |
ubik task API
ubik 태스크 API를 정의합니다.
#define TASK_OPT__NOAUTODEL 0x40 |
태스크 선택 사항: 사용자가 명시적으로 task_delete 함수를 호출할 때까지 태스트 정보 메모리를 유지함 (이 선택 사항을 선택하지 않을 경우 태스크 수행이 끝나면 태스크 정보 메모리가 자동으로 할당 해제된다.)
#define TASK_WAITOPT__ALL 0x40 |
기다리는 방법 선택 사항: 기다리는 신호 객체들 모두로부터 신호를 받을 때까지 기다림 (모두 기다리기 선택 사항)
#define TASK_WAITOPT__IGNOREINVALID 0x80 |
기다리는 방법 선택 사항: 기다리는 신호 객체들 중 NULL이거나 유효성 비트valid bit가 0인 것이 있더라도 그것들을 제외한 나머지 신호 객체들을 기다림 (유효하지 않은 신호 객체 무시하고 기다리기 선택 사항)
typedef struct __task_tip_t _task_tip_t |
API용 태스크 형 정의
typedef _task_tip_t* task_pt |
API용 태스크 포인터 형 정의
typedef void(* taskfunc_ft) (void *) |
태스크 함수 포인터 형 정의
int task_create | ( | task_pt * | task_p, |
taskfunc_ft | func, | ||
void * | arg, | ||
int | priority, | ||
unsigned int | stackdepth, | ||
const char * | name | ||
) |
태스크를 생성하는 함수
task_p | 생성한 태스크의 주소를 저장할 포인터의 주소 NULL: 생성한 태스크의 주소를 저장하지 않음 |
func | 태스크가 실행할 함수 포인터 |
arg | 태스크가 실행할 함수로 전달할 매개변수 |
priority | 우선순위 큰 숫자가 높은 우선순위 최고 우선순위는 task_gethighestpriority 함수가 돌려 주는 값 중간 우선순위는 task_getmiddlepriority 함수가 돌려주는 값 최저 우선순위는 task_getlowestpriority 함수가 돌려주는 값 |
stackdepth | 스택 깊이(스택 영역 크기는 stackdepth * INT_SIZE 바이트가 됨) 0: 기본 스택 깊이 값(task_getdefaultstackdepth 함수가 돌려주는 값) 1 ~ 최저 스택 깊이 값: 최저 스택 깊이 값(task_getminstackdepth 함수가 돌려주는 값) |
name | 태스크 이름 NULL: 태스크 이름을 지정하지 않음 |
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 | ||
) |
태스크를 생성하는 함수 확장형
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: 어느 것도 선택하지 않음 |
int task_create_noautodel | ( | task_pt * | task_p, |
taskfunc_ft | func, | ||
void * | arg, | ||
int | priority, | ||
unsigned int | stackdepth, | ||
const char * | name | ||
) |
자동 삭제 안 되는 태스크를 생성하는 함수
task_join 함수를 사용할 경우 반드시 이 함수로 태스크를 생성해야함.
task_p | 생성한 태스크의 주소를 저장할 포인터의 주소 NULL: 생성한 태스크의 주소를 저장하지 않음 |
func | 태스크가 실행할 함수 포인터 |
arg | 태스크가 실행할 함수로 전달할 매개변수 |
priority | 우선순위 큰 숫자가 높은 우선순위 최고 우선순위는 task_gethighestpriority 함수가 돌려 주는 값 중간 우선순위는 task_getmiddlepriority 함수가 돌려주는 값 최저 우선순위는 task_getlowestpriority 함수가 돌려주는 값 |
stackdepth | 스택 깊이(스택 영역 크기는 stackdepth * INT_SIZE 바이트가 됨) 0: 기본 스택 깊이 값(task_getdefaultstackdepth 함수가 돌려주는 값) 1 ~ 최저 스택 깊이 값: 최저 스택 깊이 값(task_getminstackdepth 함수가 돌려주는 값) |
name | 태스크 이름 NULL: 태스크 이름을 지정하지 않음 |
int task_delete | ( | task_pt * | task_p | ) |
대상 태스크를 제거하는 함수
task_p | 제거할 대상 태스크의 주소가 저장된 포인터의 주소 task_p 또는 *task_p가 NULL: 현재 태스크를 제거함 제거에 성공하면 *task_p는 NULL이 됨 |
task_pt task_getcur | ( | void | ) |
현재 태스크 포인터를 돌려주는 함수
unsigned int task_getdefaultstackdepth | ( | void | ) |
스택 깊이 기본값을 돌려주는 함수
int task_gethighestpriority | ( | void | ) |
태스크가 가질 수 있는 최고 우선순위를 돌려주는 함수
int task_getlowestpriority | ( | void | ) |
태스크가 가질 수 있는 최저 우선순위를 돌려주는 함수
int task_getmaxstackusage | ( | task_pt | task, |
unsigned int * | maxstackusage_p | ||
) |
해당 태스크의 최대 스택 사용량을 돌려주는 함수
task | 대상 태스크 포인터 NULL: 현재 태스크 |
maxstackusage_p | 최대 스택 사용량을 저장할 변수의 주소 |
int task_getmaxwaitsigobj | ( | task_pt | task | ) |
대상 태스크가 동시에 기다릴 수 있는 신호 객체 최대 수를 돌려주는 함수
task | 대상 태스크 포인터 NULL: 현재 태스크 |
int task_getmiddlepriority | ( | void | ) |
태스크가 가질 수 있는 중간 우선순위를 돌려주는 함수
unsigned int task_getminstackdepth | ( | void | ) |
스택 깊이 최저값을 돌려주는 함수
int task_getpriority | ( | task_pt | task | ) |
대상 태스크의 우선순위를 돌려주는 함수
대상 태스크가 NULL이고 커널이 활성화 상태가 아니면(ubik_comp_start 함수를 호출하기 전이면) 중간 우선 순위(task_getmiddlepriority 함수가 돌려 주는 값)를 돌려줌
task | 대상 태스크 포인터 NULL: 현재 태스크 |
unsigned int task_getremainingtimeout | ( | void | ) |
현재 태스크의 남은 제한 시간을 돌려주는 함수
제한 시간을 두고 신호 객체를 기다리는 태스크가 제한 시간이 다하기 전에 신호를 받고 깨어났을 경우, 이 함수를 사용해 남은 제한 시간을 알아낼 수 있음
unsigned int task_getremainingtimeoutms | ( | void | ) |
현재 태스크의 남은 제한 시간을 돌려주는 함수
제한 시간을 두고 신호 객체를 기다리는 태스크가 제한 시간이 다하기 전에 신호를 받고 깨어났을 경우, 이 함수를 사용해 남은 제한 시간을 알아낼 수 있음
int task_getstacksize | ( | task_pt | task, |
unsigned int * | stacksize_p | ||
) |
해당 태스크의 스택 영역 크기를 돌려주는 함수
task | 대상 태스크 포인터 NULL: 현재 태스크 |
stacksize_p | 스택 영역 크기를 저장할 변수의 주소 |
int task_is_idle | ( | task_pt | task | ) |
해당 태스크가 아이들 태스크인지 여부를 돌려주는 함수
task | 대상 태스크 포인터 NULL: 현재 태스크 |
int task_join | ( | task_pt * | task_p, |
int * | result_p, | ||
int | count | ||
) |
대상 태스크들이 종료되기를 기다리는 함수
task_p | 대상 태스크 포인터 배열 대상 테스크는 task_create_noautodel 함수로 생성한 수동 삭제 태스크여야 함 |
result_p | 결과값을 저장할 배열 NULL: 결과값을 저장하지 않음 결과값 0: 정상 종료 UBIK_ERR__DEADLOCK : 데드락 발생 가능성이 있음 |
count | 배열 길이 (UBINOS__UBIK__TASK_MAXWAITSIGOBJ_MAX 보다 작거나 같아야 함) |
int task_join_and_delete | ( | task_pt * | task_p, |
int * | result_p, | ||
int | count | ||
) |
대상 태스크들이 종료되기를 기다린 후 삭제하는 함수
task_p | 대상 태스크 포인터 배열 대상 테스크는 task_create_noautodel 함수로 생성한 수동 삭제 태스크여야 함 |
result_p | 결과값을 저장할 배열 NULL: 결과값을 저장하지 않음 결과값 0: 정상 종료 UBIK_ERR__DEADLOCK : 데드락 발생 가능성이 있음 |
count | 배열 길이 (UBINOS__UBIK__TASK_MAXWAITSIGOBJ_MAX 보다 작거나 같아야 함) |
int task_join_and_delete_timed | ( | task_pt * | task_p, |
int * | result_p, | ||
int | count, | ||
unsigned int | tick | ||
) |
제한 시간 동안 대상 태스크들이 종료되기를 기다린 후 삭제하는 함수
task_p | 대상 태스크 포인터 배열 대상 테스크는 task_create_noautodel 함수로 생성한 수동 삭제 태스크여야 함 |
result_p | 결과값을 저장할 배열 NULL: 결과값을 저장하지 않음 결과값 0: 정상 종료 UBIK_ERR__DEADLOCK : 데드락 발생 가능성이 있음 |
count | 배열 길이 (UBINOS__UBIK__TASK_MAXWAITSIGOBJ_MAX 보다 작거나 같아야 함) |
tick | 제한 시간 (시스템 틱tick 수) |
int task_join_and_delete_timedms | ( | task_pt * | task_p, |
int * | result_p, | ||
int | count, | ||
unsigned int | timems | ||
) |
제한 시간 동안 대상 태스크들이 종료되기를 기다린 후 삭제하는 함수 (천분의 일초 단위)
task_p | 대상 태스크 포인터 배열 대상 테스크는 task_create_noautodel 함수로 생성한 수동 삭제 태스크여야 함 |
result_p | 결과값을 저장할 배열 NULL: 결과값을 저장하지 않음 결과값 0: 정상 종료 UBIK_ERR__DEADLOCK : 데드락 발생 가능성이 있음 |
count | 배열 길이 (UBINOS__UBIK__TASK_MAXWAITSIGOBJ_MAX 보다 작거나 같아야 함) |
timems | 제한 시간 (천분의 일초) |
int task_join_timed | ( | task_pt * | task_p, |
int * | result_p, | ||
int | count, | ||
unsigned int | tick | ||
) |
제한 시간 동안 대상 태스크들이 종료되기를 기다리는 함수
task_p | 대상 태스크 포인터 배열 대상 테스크는 task_create_noautodel 함수로 생성한 수동 삭제 태스크여야 함 |
result_p | 결과값을 저장할 배열 NULL: 결과값을 저장하지 않음 결과값 0: 정상 종료 UBIK_ERR__TIMEOUT : 제한 시간 초과 UBIK_ERR__DEADLOCK : 데드락 발생 가능성이 있음 |
count | 배열 길이 (UBINOS__UBIK__TASK_MAXWAITSIGOBJ_MAX 보다 작거나 같아야 함) |
tick | 제한 시간 (시스템 틱tick 수) |
int task_join_timedms | ( | task_pt * | task_p, |
int * | result_p, | ||
int | count, | ||
unsigned int | timems | ||
) |
제한 시간 동안 대상 태스크들이 종료되기를 기다리는 함수 (천분의 일초 단위)
task_p | 대상 태스크 포인터 배열 대상 테스크는 task_create_noautodel 함수로 생성한 수동 삭제 태스크여야 함 |
result_p | 결과값을 저장할 배열 NULL: 결과값을 저장하지 않음 결과값 0: 정상 종료 UBIK_ERR__TIMEOUT : 제한 시간 초과 UBIK_ERR__DEADLOCK : 데드락 발생 가능성이 있음 |
count | 배열 길이 (UBINOS__UBIK__TASK_MAXWAITSIGOBJ_MAX 보다 작거나 같아야 함) |
timems | 제한 시간 (천분의 일초) |
void task_lock | ( | void | ) |
태스크 전환을 금지하는 함수
int task_resume | ( | task_pt | task | ) |
중지suspend된 대상 태스크를 재시작resume하는 함수
task | 대상 태스크 포인터 |
int task_setmaxwaitsigobj | ( | task_pt | task, |
int | max | ||
) |
대상 태스크가 동시에 기다릴 수 있는 신호 객체 최대 수를 설정하는 함수
task | 대상 태스크 포인터 NULL: 현재 태스크 |
max | 동시에 기다릴 수 있는 신호 객체 최대 수 (UBINOS__UBIK__TASK_MAXWAITSIGOBJ_MAX 보다 작거나 같아야 함) |
int task_setpriority | ( | task_pt | task, |
int | priority | ||
) |
대상 태스크의 우선순위를 변경하는 함수
task | 대상 태스크 포인터 NULL: 현재 태스크 |
priority | 우선순위 큰 숫자가 높은 우선순위 최고 우선순위는 task_gethighestpriority 함수가 돌려 주는 값 중간 우선순위는 task_getmiddlepriority 함수가 돌려주는 값 최저 우선순위는 task_getlowestpriority 함수가 돌려주는 값 |
int task_sleep | ( | unsigned int | tick | ) |
현재 태스크를 휴면sleep시키는 함수
tick | 휴면sleep시킬 시간(시스템 틱tick 수) |
int task_sleepms | ( | unsigned int | timems | ) |
현재 태스크를 휴면sleep시키는 함수 (천분의 일초 단위)
timems | 휴면sleep시킬 시간(천분의 일초) |
int task_suspend | ( | task_pt | task | ) |
대상 태스크를 중지suspend하는 함수
task | 대상 태스크 포인터 NULL: 현재 태스크 |
void task_unlock | ( | void | ) |
태스크 전환을 허가하는 함수
int task_waitforsigobjs | ( | void ** | sigobj_p, |
int * | sigtype_p, | ||
void ** | param_p, | ||
int | count, | ||
unsigned int | waitopt | ||
) |
신호 객체 여러 개를 동시에 기다리는 함수
동시에 기다릴 수 있는 신호 객체 수 기본값은 1이며, task_setmaxwaitsigobj 함수로 변경할 수 있음
동시에 기다리는 신호 객체 수가 많으면 함수 내부의 크리티컬 상태(인터럽트 비활성화 상태) 유지 시간이 길어지기 때문에, 성능이 낮은 시스템에서 문제가 발생할 수 있음
sigobj_p | 대상 개체 포인터 배열 |
sigtype_p | 받은 신호를 저장할 배열 |
param_p | 신호 객체와 같이 전달할 매개변수 NULL: 매개변수를 전달하지 않음 매개변수 신호 객체가 메시지큐일 경우 받은 메시지를 저장할 버퍼 신호 객체가 조건변수condition variable일 경우 조건변수condition variable를 보호하는 뮤텍스 |
count | 배열 길이 |
waitopt | 기다리는 방법 선택 사항 (TASK_WAITOPT__...) 0: 어느 것도 선택하지 않음 기다리는 방법을 선택하지 않으면 기다리는 신호 객체들 중 하나 이상으로부터 신호를 받을 때까지 기다림 |
int task_waitforsigobjs_timed | ( | void ** | sigobj_p, |
int * | sigtype_p, | ||
void ** | param_p, | ||
int | count, | ||
unsigned int | waitopt, | ||
unsigned int | tick | ||
) |
제한 시간 동안 신호 객체 여러 개를 동시에 기다리는 함수
동시에 기다릴 수 있는 신호 객체 수 기본값은 1이며, task_setmaxwaitsigobj 함수로 변경할 수 있음
동시에 기다리는 신호 객체 수가 많으면 함수 내부의 크리티컬 상태(인터럽트 비활성화 상태) 유지 시간이 길어지기 때문에, 성능이 낮은 시스템에서 문제가 발생할 수 있음
sigobj_p | 대상 개체 포인터 배열 |
sigtype_p | 받은 신호를 저장할 배열 |
param_p | 신호 객체와 같이 전달할 매개변수 NULL: 매개변수를 전달하지 않음 매개변수 신호 객체가 메시지큐일 경우 받은 메시지를 저장할 버퍼 신호 객체가 조건변수condition variable일 경우 조건변수condition variable를 보호하는 뮤텍스 |
count | 배열 길이 |
waitopt | 기다리는 방법 선택 사항 (TASK_WAITOPT__...) 0: 어느 것도 선택하지 않음 기다리는 방법을 선택하지 않으면 기다리는 신호 객체들 중 하나 이상으로부터 신호를 받을 때까지 기다림 |
tick | 제한 시간 (시스템 틱tick 수) |
int task_waitforsigobjs_timedms | ( | void ** | sigobj_p, |
int * | sigtype_p, | ||
void ** | param_p, | ||
int | count, | ||
unsigned int | waitopt, | ||
unsigned int | timems | ||
) |
제한 시간 동안 신호 객체 여러 개를 동시에 기다리는 함수 (천분의 일초 단위)
동시에 기다릴 수 있는 신호 객체 수 기본값은 1이며, task_setmaxwaitsigobj 함수로 변경할 수 있음
동시에 기다리는 신호 객체 수가 많으면 함수 내부의 크리티컬 상태(인터럽트 비활성화 상태) 유지 시간이 길어지기 때문에, 성능이 낮은 시스템에서 문제가 발생할 수 있음
sigobj_p | 대상 개체 포인터 배열 |
sigtype_p | 받은 신호를 저장할 배열 |
param_p | 신호 객체와 같이 전달할 매개변수 NULL: 매개변수를 전달하지 않음 매개변수 신호 객체가 메시지큐일 경우 받은 메시지를 저장할 버퍼 신호 객체가 조건변수condition variable일 경우 조건변수condition variable를 보호하는 뮤텍스 |
count | 배열 길이 |
waitopt | 기다리는 방법 선택 사항 (TASK_WAITOPT__...) 0: 어느 것도 선택하지 않음 기다리는 방법을 선택하지 않으면 기다리는 신호 객체들 중 하나 이상으로부터 신호를 받을 때까지 기다림 |
timems | 제한 시간 (천분의 일초) |
void task_yield | ( | void | ) |
현재 태스크의 제어권을 양보하는 함수