From bc6c89675d551c8142d110ddd43e9d341a2e38fb Mon Sep 17 00:00:00 2001 From: Yuya Hamamachi Date: Tue, 7 Feb 2023 08:59:37 +0000 Subject: [PATCH 7/9] vm_atk2: Support basic timer function This patch makes taht MainTask does only count timer. Thus, command proc function is disabled. And, Task3 has simple task that sleep 1sec and output log. Signed-off-by: Yuya Hamamachi --- vm_atk2/vm2_atk2/sample1_vm2.c | 196 +++++---------------------------- 1 file changed, 29 insertions(+), 167 deletions(-) diff --git a/vm_atk2/vm2_atk2/sample1_vm2.c b/vm_atk2/vm2_atk2/sample1_vm2.c index 2e5f8bf..0ac63f7 100644 --- a/vm_atk2/vm2_atk2/sample1_vm2.c +++ b/vm_atk2/vm2_atk2/sample1_vm2.c @@ -540,6 +540,13 @@ static const char8 *alarm_name_tbl[] = { } #endif /* defined( CFG_USE_ERRORHOOK ) */ +/** + * Timer related definision +*/ +volatile uint32 g_timer_cnt = 0; +#define TICK_TO_MSEC(n) (n*10) +#define TICK_TO_SEC(n) (n/100) + /* * ユーザメイン関数 * @@ -581,13 +588,9 @@ main(void) */ TASK(MainTask) { - uint8 command; uint8 task_no; uint32 i; - TickType val = 0U; - TickType eval = 0U; - /* * タスク番号・コマンドバッファ初期化 */ @@ -601,6 +604,11 @@ TASK(MainTask) */ SetRelAlarm(MainCycArm, TICK_FOR_10MS, TICK_FOR_10MS); + /* + * コマンド実行用のTASK3を起動 + */ + PutActTsk(2); // Activate TASK3( 2 -> TASK3) + /* * コマンド実行ループ */ @@ -608,168 +616,8 @@ TASK(MainTask) WaitEvent(MainEvt); /* 10msの作業時間待ち */ ClearEvent(MainEvt); - /* - * 入力コマンド取得 - */ - syslog(LOG_INFO, "Input Command:"); - command = GetCommand(); - - /* - * 入力コマンドチェック - */ - if ((command <= (uint8) (0x1fU)) || (command >= (uint8) (0x80U))) { - syslog(LOG_INFO, "Not ASCII character"); - } - else { -#ifndef OMIT_ECHO - syslog(LOG_INFO, "%c", command); -#endif /* OMIT_ECHO */ - - /* - * コマンド判別 - */ - switch (command) { - case '1': - case '2': - case '3': - case '4': - case '5': - /* - * 処理対象タスクの変更 - */ - task_no = (uint8) (command - '1'); - break; - case 'A': - case '!': - case '"': - case '#': - case '$': - case '%': - case 'z': - case 'k': - case 'K': - case 'l': - case 'i': - case 'w': - case 'W': - /* - * タスクへのコマンド通知 - */ - command_tbl[task_no] = command; - break; - /* - * 以降はメインタスクでコマンド処理 - */ - case 'a': - PutActTsk(task_no); - break; - case 's': - PutSchedule(); - break; - case 'S': - PutActNonPriTsk(); - break; - case 'Z': - PutTaskState(task_no); - break; - case 'x': - syslog(LOG_INFO, "call RAISE_CPU_EXCEPTION"); - RAISE_CPU_EXCEPTION; - break; - case 'd': - PutDisAllInt(); - break; - case 'D': - PutSusAllInt(); - break; - case 'f': - PutSusOSInt(); - break; - case 'T': - PutHwCnt3(); - break; - case 'e': - PutSetEvt(task_no); - break; - case 'E': - PutGetEvt(task_no); - break; - case 'b': - PutArmBase(); - break; - case 'B': - PutArmTick(); - PutArmTick(); - break; - case 'v': - /* SetRelAlarm(ActTskArm, 500, 0)を実行 */ - PutSetRel(0U, 0U, 0U); - break; - case 'V': - /* SetRelAlarm(SetEvtArm, 500, 0)を実行 */ - PutSetRel(1U, 0U, 0U); - break; - case 'n': - /* SetRelAlarm(CallBackArm, 900, 0)を実行 */ - PutSetRel(2U, 1U, 0U); - break; - case 'N': - /* SetRelAlarm(CallBackArm, 900, 500)を実行 */ - PutSetRel(2U, 1U, 1U); - break; - case 'm': - /* SetAbsAlarm(CallBackArm, 900, 0)を実行 */ - PutSetAbs(2U, 1U, 0U); - break; - case 'M': - /* SetAbsAlarm(CallBackArm, 900, 500)を実行 */ - PutSetAbs(2U, 1U, 1U); - break; - case 'h': - /* CancelAlarm(CallBackArm)を実行 */ - PutCanArm(); - break; - case 'c': - syslog(LOG_INFO, "Call IncrementCounter(SampleCnt)"); - IncrementCounter(SampleCnt); - break; - case 'C': - syslog(LOG_INFO, "Call IncrementCounter(SampleCnt2)"); - IncrementCounter(SampleCnt2); - break; - case 'j': - syslog(LOG_INFO, "GetCounterValue(MAIN_HW_COUNTER, val)"); - GetCounterValue(MAIN_HW_COUNTER, &val); - syslog(LOG_INFO, " val = %d", val); - break; - case 'J': - syslog(LOG_INFO, "Pre val = %d", val); - syslog(LOG_INFO, "GetElapsedValue(MAIN_HW_COUNTER, val ,eval)"); - GetElapsedValue(MAIN_HW_COUNTER, &val, &eval); - syslog(LOG_INFO, " val = %d", val); - syslog(LOG_INFO, " eval = %d", eval); - break; - case 'r': - syslog(LOG_INFO, "GetISRID() Call from Task Context"); - syslog(LOG_INFO, "GetISRID() = %d", GetISRID()); - break; - case 'p': - PutAppMode(); - break; - case 't': - schedule_table_sample_routine(); - break; - case 'q': - ShutdownOS(E_OK); - break; - case 'Q': - ShutdownOS(E_OS_STATE); - break; - default: - /* 上記のコマンド以外の場合,処理を行わない */ - break; - } - } + g_timer_cnt++; + continue; } /* @@ -824,12 +672,26 @@ TASK(Task2) TaskProk(1U); } /* TASK( Task2 ) */ - /* * 並列実行タスク3 */ +// Timer resolution is 10 msec as same as interrupt timing of Maintask(TICK_FOR_10MS) +void ms_sleep(ms){ + volatile uint32 end; + end = TICK_TO_MSEC(g_timer_cnt) + ms; + while(end > TICK_TO_MSEC(g_timer_cnt)); +} TASK(Task3) { + uint32 wait_cnt = 0; + uint32 dummy = 0; + syslog(LOG_INFO, "TASK3 is called"); + + while (1) { + ms_sleep(1000); + syslog(LOG_INFO, "g_timer_cnt = %u", g_timer_cnt); + } + TaskProk(2U); } /* TASK( Task3 ) */ -- 2.34.1