source: rubycfg_ssp/trunk/alarm.trb

Last change on this file was 285, checked in by nmir-saito, 7 years ago

Tracのソース閲覧時に文字化けするためmimetypewo

  • Property svn:mime-type set to text/plain; charset=utf-8
File size: 4.9 KB
Line 
1# -*- coding: utf-8 -*-
2#
3# TOPPERS/SSP Kernel
4# Toyohashi Open Platform for Embedded Real-Time Systems/
5# Advanced Standard Profile Kernel
6#
7# Copyright (C) 2015 by FUJI SOFT INCORPORATED, JAPAN
8# Copyright (C) 2015,2016 by Embedded and Real-Time Systems Laboratory
9# Graduate School of Information Science, Nagoya Univ., JAPAN
10# Copyright (C) 2017 by Naoki Saito
11# Nagoya Municipal Industrial Research Institute, JAPAN
12#
13# 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
14# ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
15# 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
16# (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
17# 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
18# スコード中に含まれていること.
19# (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
20# 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
21# 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
22# の無保証規定を掲載すること.
23# (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
24# 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
25# と.
26# (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
27# 作権表示,この利用条件および下記の無保証規定を掲載すること.
28# (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
29# 報告すること.
30# (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
31# 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
32# また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
33# 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
34# 免責すること.
35#
36# 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
37# よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
38# に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
39# アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
40# の責任を負わない.
41#
42# $Id: alarm.trb 588 2016-02-05 12:54:58Z ertl-hiro $
43#
44
45#
46# アラーム通知機能の生成スクリプト
47#
48
49class AlarmObject < KernelObject
50 def initialize()
51 super("alm", "alarm")
52 end
53
54 def prepare()
55 $cfgData[@api].sort.each do |key, params|
56 # almatrが無効の場合(E_RSATR)
57 #(TA_STA以外のビットがセットされている場合)
58 if (params[:almatr] & ~($TA_STA)) != 0
59 error_illegal_id("E_RSATR", params, :almatr, :almid)
60 end
61 end
62 end
63
64 def generateData()
65
66 if $cfgData[:CRE_ALM].size() > 0
67
68 # 事前準備(エラーチェック,メモリ領域の生成)
69 prepare()
70
71 # アラームハンドラアドレス(almhdr)
72 $kernelCfgC.append("const ALMHDR\t_kernel_alminib_almhdr[TNUM_ALMID] = {")
73 $cfgData[@api].each.with_index do |id, index|
74 $kernelCfgC.append(",") if index > 0
75 $kernelCfgC.append("(#{id[1][:almhdr]})")
76 end
77 $kernelCfgC.add("};")
78
79 # アラームハンドラ拡張情報(exinf)
80 $kernelCfgC.append("const intptr_t\t_kernel_alminib_exinf[TNUM_ALMID] = {")
81 $cfgData[@api].each.with_index do |id, index|
82 exinf = id[1][:exinf]
83 $kernelCfgC.append(",") if index > 0
84 $kernelCfgC.append("(intptr_t)(#{exinf})")
85 end
86 $kernelCfgC.add2("};")
87 else
88 # オブジェクトが1つもない場合
89 $kernelCfgC.add("TOPPERS_EMPTY_LABEL(const ALMHDR, _kernel_alminib_almhdr);")
90 $kernelCfgC.add2("TOPPERS_EMPTY_LABEL(const intptr_t, _kernel_alminib_exinf);")
91 end
92
93 # アラームハンドラのタイムイベントIDオフセット
94 $kernelCfgC.add2("const uint_t _kernel_almevtid_offset = #{$cfgData[:CRE_CYC].size};")
95
96 # アラームハンドラの動作状態
97 $kernelCfgC.add2("uint16_t\t_kernel_almcb_almact;")
98 end
99end
100
101#
102# アラーム通知に関する情報の生成
103#
104$kernelCfgC.comment_header("Alarm Notification Functions")
105
106if $cfgData[:CRE_ALM].size() > $TMAX_MAXALM
107 error("The number of CRE_ALM must be equal to or less than #{$TMAX_MAXALM}")
108end
109
110AlarmObject.new.generate()
Note: See TracBrowser for help on using the repository browser.