アットウィキロゴ

解答例3-2

■ ex3-2.c

#include <t_services.h>
#include "kernel_id.h"
#include "ex3-2.h"

#define PB_DDR (*(volatile unsigned char *)0xFFFFD4)
#define PB_DR (*(volatile unsigned char *)0xFFFFD6)

#define PA_DDR (*(volatile unsigned char *)0xFFFFD1)
#define PA_DR (*(volatile unsigned char *)0xFFFFD3)

unsigned char Led = 0xFF;

void task1(VP_INT exinf)      // LED点滅タスク
{
    long int w;

    PB_DDR = 0xFF;
    
    while(1)
    {    
        PB_DR |= 0x1;  // PB0消灯
        for (w=0;w<0x8FFFFF;w++);
        dly_tsk(1);   // タスク切り替えのため

        PB_DR &= ~0x1;  // PB0点灯
        for (w=0;w<0x8FFFFF;w++);
        dly_tsk(1);   // タスク切り替えのため
    }
}

void task2(VP_INT exinf)      // LED点滅タスク
{
    long int w = 0;

    while(1)
    {    
        PB_DR |= 0x2;  // PB0消灯
        dly_tsk(1);   // タスク切り替えのため

        PB_DR &= ~0x2;  // PB0点灯
        dly_tsk(1);   // タスク切り替えのため
    }
}

 ■ex3-2.cfg

#define _MACRO_ONLY
#include "ex3-2.h"

INCLUDE("\"ex3-2.h\"");

CRE_TSK(TASK1, { TA_HLNG|TA_ACT, (VP_INT)0, task1, HIGH_PRIORITY, STACK_SIZE, NULL });
CRE_TSK(TASK2, { TA_HLNG|TA_ACT, (VP_INT)0, task2, MID_PRIORITY, STACK_SIZE, NULL });

#include "../../systask/timer.cfg"
#include "../../systask/serial.cfg"
#include "../../systask/logtask.cfg"


■ex3-2.h

#include <t_services.h>

/* 各タスクの優先度の定義*/
#define MAIN_PRIORITY    5        /* メインタスクの優先度 */
                                /* HIGH_PRIORITY より高くすること */
#define HIGH_PRIORITY    9        /* 並列に実行されるタスクの優先度 */
#define MID_PRIORITY    10
#define LOW_PRIORITY    11

#undef CPUEXC1                /* CPU例外ハンドラをサポートしない */

#ifndef TASK_PORTID
#define    TASK_PORTID    1        /* 文字入力するシリアルポートID */
#endif /* TASK_PORTID */

#ifndef STACK_SIZE
#define    STACK_SIZE    8192        /* タスクのスタックサイズ */
#endif /* STACK_SIZE */

#ifndef LOOP_REF
#define LOOP_REF    1000000        /* 速度計測用のループ回数 */
#endif /* LOOP_REF */

/* 関数のプロトタイプ宣言 */
#ifndef _MACRO_ONLY

extern void    task1(VP_INT exinf);
extern void    task2(VP_INT exinf);

#endif /* _MACRO_ONLY */

 

最終更新:2014年11月12日 16:39