void net_test(void) { T_CSEM csem; T_CTSK ctsk; printf(" == net test == \n"); net_conf(NET_CONF_EMULATOR, NET_CONF_DHCP); net_show(); csem.maxsem = 100; csem.isemcnt = 0; csem.sematr = TA_TFIFO | TA_FIRST; semid = tk_cre_sem(&csem); semid2 = tk_cre_sem(&csem); bzero(&ctsk, sizeof ctsk); ctsk.tskatr = TA_HLNG | TA_RNG0; ctsk.task = server_task; ctsk.itskpri = 100; ctsk.stksz = 32 * 1024 * 2; server_tskid = tk_cre_tsk(&ctsk); DEBUG_PRINT(("start server task %d\n", server_tskid)); tk_sta_tsk(server_tskid, 0); DEBUG_PRINT(("wait server semaphore\n")); tk_wai_sem(semid, 1, TMO_FEVR); bzero(&ctsk, sizeof ctsk); ctsk.tskatr = TA_HLNG | TA_RNG0; ctsk.task = client_task; ctsk.itskpri = 101; ctsk.stksz = 4 * 1024 * 2; client_tskid = tk_cre_tsk(&ctsk); DEBUG_PRINT(("start client task %d\n", client_tskid)); tk_sta_tsk(client_tskid, 0); DEBUG_PRINT(("waiting for server and client semaphore\n")); tk_wai_sem(semid, 2, TMO_FEVR); printf(" == net test end == \n"); tk_del_sem(semid); tk_del_sem(semid2); }
/* * syslog initialization */ EXPORT ER initialize_syslog( void ) { #if USE_SYSLOG_CONSIO T_CMBF cmbf; T_CTSK ctsk; ID tskid; ER ercd; /* Generate message buffer */ SetOBJNAME(cmbf.exinf, OBJNAME_SYSLOG); cmbf.mbfatr = TA_TFIFO | TA_NODISWAI; cmbf.bufsz = MBF_LOG_BUFSZ; cmbf.maxmsz = MBF_LOG_MAXMSZ; ercd = tk_cre_mbf(&cmbf); if ( ercd < E_OK ) { goto err_ret1; } log_mbfid = ercd; /* Temporarily lower the local task priority so that the system log task executes initialization sequence. */ tk_chg_pri(TSK_SELF, 10); /* Start log task */ SetOBJNAME(ctsk.exinf, OBJNAME_SYSLOG); ctsk.tskatr = TA_HLNG | TA_RNG0; ctsk.task = log_task; ctsk.itskpri = 6; ctsk.stksz = 512; ercd = tk_cre_tsk(&ctsk); if ( ercd < E_OK ) { goto err_ret1; } tskid = ercd; ercd = tk_sta_tsk(tskid, CONSOLE_PORT); if ( ercd < E_OK ) { goto err_ret2; } /* Return local task priority */ tk_chg_pri(TSK_SELF, TPRI_INI); return E_OK; err_ret2: tk_del_tsk(tskid); err_ret1: DEBUG_PRINT(("initialize_syslog ercd = %d\n", ercd)); return ercd; #else return E_OK; #endif }
/* |------------------+-------------------------------------------------------------| */ StatusType ChainTask ( TaskType xTaskID ) { StatusType ercd; #ifdef DORMANT_STACK_SIZE /* To avoid destroying stack used in 'knl_make_dormant', allocate the dummy area on the stack. */ volatile VB _dummy[DORMANT_STACK_SIZE]; #endif /* Check context error */ #if CHK_CTX2 if ( in_indp() ) { #if USE_KERNEL_MESSAGE tm_putstring((UB*)"ChainTask was called in the task independent\n"); #endif tm_monitor(); /* To monitor */ } #endif #if CHK_CTX1 if ( in_ddsp() ) { #if USE_KERNEL_MESSAGE tm_putstring((UB*)"ChainTask was called in the dispatch disabled\n"); #endif } #endif DISABLE_INTERRUPT; ercd = tk_sta_tsk(xTaskID,xTaskID); if(ercd < E_OK) { ENABLE_INTERRUPT; return ercd; } knl_ter_tsk(knl_ctxtsk); knl_make_dormant(knl_ctxtsk); OsekStartHighReadyTask(); /* No return */ #ifdef DORMANT_STACK_SIZE /* for WARNING */ _dummy[0] = 0; #endif }
/* create & start task */ EXPORT INT kpCreTask(W name, FP entry) { T_CTSK ctsk; ID tskid; INT er; /* task creation */ ctsk.exinf = (void*)name; ctsk.task = entry; ctsk.itskpri = TaskPri; ctsk.stksz = TASK_STKSZ; ctsk.tskatr = TA_HLNG | TA_RNG0; tskid = er = tk_cre_tsk(&ctsk); if (er >= E_OK) { /* start task */ er = tk_sta_tsk(tskid, 0); if (er < E_OK) tk_del_tsk(tskid); } return (er >= E_OK) ? tskid : er; }
/* |------------------+------------------------------------------------------------| */ StatusType ActivateTask ( TaskType xTaskID ) { StatusType ercd = E_OK; ercd=tk_sta_tsk(xTaskID,/*stacd*/xTaskID); return ercd; }