$ $ TOPPERS Automotive Kernel $ Toyohashi Open Platform for Embedded Real-Time Systems $ Automotive Kernel $ $ Copyright (C) 2010 by Meika Sugimoto $ $ 上記著作権者は,以下の (1)〜(4) の条件か,Free Software Foundation $ によって公表されている GNU General Public License の Version 2 に記 $ 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア $ を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下, $ 利用と呼ぶ)することを無償で許諾する. $ (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 $ 権表示,この利用条件および下記の無保証規定が,そのままの形でソー $ スコード中に含まれていること. $ (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 $ 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 $ 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 $ の無保証規定を掲載すること. $ (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 $ 用できない形で再配布する場合には,次のいずれかの条件を満たすこ $ と. $ (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 $ 作権表示,この利用条件および下記の無保証規定を掲載すること. $ (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに $ 報告すること. $ (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 $ 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. $ $ 本ソフトウェアは,無保証で提供されているものである.上記著作権者お $ よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も $ 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 $ 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. $ $FILE "kernel_id.h"$ /*$NL$ $SPC$*$TAB$kernel_id.h$NL$ $SPC$*$TAB$Generated time : $+CFG_VERSION$$NL$ $SPC$*$TAB$CFG Vertion : $CFG_VERSION$$NL$ $SPC$*/$NL$ $NL$$NL$ #ifndef KERNEL_ID_H$NL$ #define KERNEL_ID_H$NL$ $NL$ $ OSオブジェクトの設定の出力 /****** Object OS ******/$NL$ $NL$ $IF EQ(OS.STARTUPHOOK[0] , "TRUE")$ #define$SPC$USE_STARTUPHOOK$NL$ $END$ $IF EQ(OS.SHUTDOWNHOOK[0] , "TRUE")$ #define$SPC$USE_SHUTDOWNHOOK$NL$ $END$ $IF EQ(OS.ERRORHOOK[0] , "TRUE")$ #define$SPC$USE_ERRORHOOK$NL$ $END$ $IF EQ(OS.PRETASKHOOK[0] , "TRUE")$ #define$SPC$USE_PRETASKHOOK$NL$ $END$ $IF EQ(OS.POSTTASKHOOK[0] , "TRUE")$ #define$SPC$USE_POSTTASKHOOKK$NL$ $END$ $NL$ $ これらのオブジェクトは特に出力する内容はない. /****** Object TASK ******/$NL$ $NL$ /****** Object COUNTER ******/$NL$ $NL$ /****** Object ALARM ******/$NL$ $NL$ /****** Object RESOURCE ******/$NL$ $NL$ /****** Object EVENT ******/$NL$ $NL$ /****** Object ISR ******/$NL$ $NL$ /****** Object APPMODE ******/$NL$ $NL$ $ $ アプリケーションモード $ $ 一つもない場合は警告とする(DEFAULT_APPMODEは使用可能O) $IF LENGTH(APPMODE.ID_LIST) == 0$ $WARNING$ $FORMAT("No Application Mode defined , you can use OSDEFAULTAPPMODE")$ $END$ $ELSE$ $IF LENGTH(APPMODE.ID_LIST) >= APPMODE_BITS$ $ERROR$ $FORMAT("Application Mode defined over %1%." , +APPMODE_BITS)$ $END$ $END$ $END$ $ アプリケーションモードの値を付加して出力 $FOREACH appmode APPMODE.ORDER_LIST$ #define$TAB$$appmode$$TAB$(AppModeType)(1U << $+appmode$)$NL$ $END$ $NL$ #endif /* ! KERNEL_ID_H */$NL$ $ $ カウンタ及びアラームのオブジェクト定義 $ $FILE "kernel_cfg.c"$ /****** Object COUNTER ******/$NL$ $NL$ $ カウンタIDの定義 $FOREACH cntid COUNTER.ID_LIST$ const CounterType $cntid$ = $+cntid$;$NL$ $END$ $NL$ const TickType cntinib_maxval[TNUM_COUNTER] =$NL$ {$NL$ $JOINEACH cntid COUNTER.ID_LIST " , \n"$ $TAB$$COUNTER.MAXALLOWEDVALUE[cntid]$$TAB$/* $cntid$ */ $END$ $NL$ }; $NL$ $NL$ const TickType cntinib_maxval2[TNUM_COUNTER] =$NL$ {$NL$ $JOINEACH cntid COUNTER.ID_LIST " , \n"$ $TAB$(($COUNTER.MAXALLOWEDVALUE[cntid]$ * 2) + 1)$TAB$/* $cntid$ */ $END$ $NL$ }; $NL$ $NL$ const TickType cntinib_tickbase[TNUM_COUNTER] =$NL$ {$NL$ $JOINEACH cntid COUNTER.ID_LIST " , \n"$ $TAB$$COUNTER.TICKSPERBASE[cntid]$$TAB$/* $cntid$ */ $END$ $NL$ }; $NL$ $NL$ const TickType cntinib_mincyc[TNUM_COUNTER] =$NL$ {$NL$ $JOINEACH cntid COUNTER.ID_LIST " , \n"$ $TAB$$COUNTER.MINCYCLE[cntid]$$TAB$/* $cntid$ */ $END$ $NL$ }; $NL$ $NL$ AlarmType cntcb_almque[TNUM_COUNTER];$NL$ TickType cntcb_curval[TNUM_COUNTER];$NL$ $NL$ $NL$ /****** Object ALARM ******/$NL$ $NL$ $ アラームIDの定義 /* アラームIDの定義 */$NL$ $FOREACH almid ALARM.ID_LIST$ const AlarmType $almid$ = $+almid$;$NL$ $END$ $NL$ $ コールバックルーチンの生成 $FOREACH almid ALARM.ID_LIST$ /* $almid$アラームで実行するコールバック関数の定義 */$NL$ $IF EQ(ALARM.ACTION[almid] , "SETEVENT")$ DeclareTask($ALARM.ACTION.SETEVENT.TASK[almid]$);$NL$ DeclareEvent($ALARM.ACTION.SETEVENT.EVENT[almid]$);$NL$ $NL$ static void _setevent_alarm_$almid$(void);$NL$ static void _setevent_alarm_$almid$(void)$NL$ {$NL$ $TAB$(void)SetEvent($ALARM.ACTION.SETEVENT.TASK[almid]$ , $ALARM.ACTION.SETEVENT.EVENT[almid]$);$NL$ }$NL$ $NL$ $ELSE$ $IF EQ(ALARM.ACTION[almid] , "ACTIVATETASK")$ DeclareTask($ALARM.ACTION.ACTIVATETASK.TASK[almid]$);$NL$ $NL$ static void _activatetak_alarm_$almid$(void);$NL$ static void _activatetak_alarm_$almid$(void)$NL$ {$NL$ $TAB$(void)ActivateTask($ALARM.ACTION.ACTIVATETASK.TASK[almid]$);$NL$ }$NL$ $NL$ $ELSE$ $IF EQ(ALARM.ACTION[almid] , "ALARMCALLBACK")$ extern void ALARMCALLBACKNAME( $UNESCSTR(ALARM.ACTION.ALARMCALLBACK.ALARMCALLBACKNAME[almid])$)(void);$NL$ $NL$ $END$ $END$ $END$ $END$ $NL$ $ データブロックの定義 /* データブロックの定義 */$NL$ const CounterType alminib_cntid[TNUM_ALARM] =$NL$ {$NL$ $JOINEACH almid ALARM.ID_LIST " , \n"$ $TAB$$+ALARM.COUNTER[almid]$$TAB$/* ( = $ALARM.COUNTER[almid]$) $almid$ */ $END$ $NL$ }; $NL$ $NL$ const FP alminib_cback[TNUM_ALARM] =$NL$ {$NL$ $JOINEACH almid ALARM.ID_LIST " , \n"$ $IF EQ(ALARM.ACTION[almid] , "SETEVENT")$ $TAB$_setevent_alarm_$almid$$TAB$/* $almid$ */ $ELSE$ $IF EQ(ALARM.ACTION[almid] , "ACTIVATETASK")$ $TAB$_activatetak_alarm_$almid$$TAB$/* $almid$ */ $ELSE$ $IF EQ(ALARM.ACTION[almid] , "ALARMCALLBACK")$ $TAB$ALARMCALLBACKNAME( $UNESCSTR(ALARM.ACTION.ALARMCALLBACK.ALARMCALLBACKNAME[almid])$ )$TAB$/* $almid$ */ $END$ $END$ $END$ $END$ $NL$ }; $NL$ $NL$ const AppModeType alminib_autosta[TNUM_ALARM] =$NL$ {$NL$ $JOINEACH almid ALARM.ID_LIST " , \n"$ $IF EQ(ALARM.AUTOSTART[almid] , "TRUE")$ $TAB$( $JOINEACH alm_appmode ALARM.AUTOSTART.TRUE.APPMODE[almid] " | "$ $alm_appmode$ $END$ )$TAB$/* $almid$ */ $ELSE$ $TAB$0x00000000$TAB$/* $almid$ */ $END$ $END$ $NL$ }; $NL$ $NL$ const TickType alminib_almval[TNUM_ALARM] =$NL$ {$NL$ $JOINEACH almid ALARM.ID_LIST " , \n"$ $IF EQ(ALARM.AUTOSTART[almid] , "TRUE")$ $TAB$$ALARM.AUTOSTART.TRUE.ALARMTIME[almid]$$TAB$/* $almid$ */ $ELSE$ $TAB$0$TAB$/* $almid$ */ $END$ $END$ $NL$ }; $NL$ $NL$ const TickType alminib_cycle[TNUM_ALARM] =$NL$ {$NL$ $JOINEACH almid ALARM.ID_LIST " , \n"$ $IF EQ(ALARM.AUTOSTART[almid] , "TRUE")$ $TAB$$ALARM.AUTOSTART.TRUE.CYCLETIME[almid]$$TAB$/* $almid$ */ $ELSE$ $TAB$0$TAB$/* $almid$ */ $END$ $END$ $NL$ }; $NL$ $NL$ AlarmType almcb_next[TNUM_ALARM];$NL$ AlarmType almcb_prev[TNUM_ALARM];$NL$ TickType almcb_almval[TNUM_ALARM];$NL$ TickType almcb_cycle[TNUM_ALARM];$NL$ $NL$ $NL$