source: rubycfg_ssp/trunk/dataqueue.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: 5.8 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: dataqueue.trb 668 2016-03-03 13:57:53Z ertl-hiro $
43#
44
45#
46# データキュー機能の生成スクリプト
47#
48
49class DataqueueObject < KernelObject
50 def initialize()
51 super("dtq", "dataqueue")
52 end
53
54 def prepare()
55 $cfgData[@api].sort.each do |key, params|
56 # dtqatrが無効の場合(E_RSATR)
57 #(TA_NULL以外の場合)
58 if params[:dtqatr] != $TA_NULL
59 error_illegal_id("E_RSATR", params, :dtqatr, :dtqid)
60 end
61
62 # dtqmbがNULLでない場合(E_NOSPT)
63 if params[:dtqmb] != "NULL"
64 error_illegal_id("E_NOSPT", params, :dtqmb, :dtqid)
65 end
66
67 # データキューサイズdtqcntが0の場合(E_PAR)
68 if params[:dtqcnt] == 0
69 error_illegal_id("E_PAR", params, :dtqcnt, :dtqid)
70 end
71 end
72 end
73
74 def generateData()
75 if $cfgData[:CRE_DTQ].size() > 0
76 # 事前準備(エラーチェック,メモリ領域の生成)
77 prepare()
78
79 # データキュー領域
80 $cfgData[@api].each.with_index do |id, index|
81 $kernelCfgC.add("static intptr_t _kernel_dtqmb_#{id[1][:dtqid].str}[#{id[1][:dtqcnt]}];")
82 end
83
84 #
85 # データキュー初期化ブロック
86 #
87
88 # データキュー属性(dtqatr)
89 $kernelCfgC.append("const ATR\t_kernel_dtqinib_atr[TNUM_DTQID] = {")
90 $cfgData[@api].each.with_index do |id, index|
91 dtqatr = id[1][:dtqatr]
92 $kernelCfgC.append(",") if index > 0
93 $kernelCfgC.append("(#{dtqatr.str})")
94 end
95 $kernelCfgC.add("};")
96
97 # データキューサイズ(dtqcnt)
98 $kernelCfgC.append("const uint8_t\t_kernel_dtqinib_size[TNUM_DTQID] = {")
99 $cfgData[@api].each.with_index do |id, index|
100 $kernelCfgC.append(",") if index > 0
101 $kernelCfgC.append("(#{id[1][:dtqcnt].str})")
102 end
103 $kernelCfgC.add("};")
104
105 # データキュー管理領域(data)
106 $kernelCfgC.append("intptr_t * const\t_kernel_dtqinib_data[TNUM_DTQID] = {")
107 $cfgData[@api].each.with_index do |id, index|
108 $kernelCfgC.append(",") if index > 0
109 $kernelCfgC.append("(_kernel_dtqmb_#{id[1][:dtqid].str})")
110 end
111 $kernelCfgC.add2("};")
112
113 #
114 # データキューコントロールブロック
115 #
116 $kernelCfgC.add(<<EOS)
117uint8_t _kernel_dtqcb_count[TNUM_DTQID];
118uint8_t _kernel_dtqcb_head[TNUM_DTQID];
119uint8_t _kernel_dtqcb_tail[TNUM_DTQID];
120EOS
121
122 else
123 # オブジェクトが1つもない場合
124 $kernelCfgC.add("TOPPERS_EMPTY_LABEL(const ATR, _kernel_dtqinib_atr);")
125 $kernelCfgC.add("TOPPERS_EMPTY_LABEL(intptr_t * const, _kernel_dtqinib_data);")
126 $kernelCfgC.add("TOPPERS_EMPTY_LABEL(const uint8_t, _kernel_dtqinib_size);")
127 $kernelCfgC.add("TOPPERS_EMPTY_LABEL(uint8_t, _kernel_dtqcb_count);")
128 $kernelCfgC.add("TOPPERS_EMPTY_LABEL(uint8_t, _kernel_dtqcb_head);")
129 $kernelCfgC.add2("TOPPERS_EMPTY_LABEL(uint8_t, _kernel_dtqcb_tail);")
130 end
131 end
132end
133
134#
135# データキューに関する情報の生成
136#
137$kernelCfgC.comment_header("Dataqueue Functions")
138DataqueueObject.new.generate()
Note: See TracBrowser for help on using the repository browser.