source: EcnlProtoTool/trunk/asp3_dcre/kernel/task.trb@ 429

Last change on this file since 429 was 429, checked in by coas-nagasima, 4 years ago

ASP3, TINET, mbed を更新

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-ruby;charset=UTF-8
File size: 5.5 KB
Line 
1# -*- coding: utf-8 -*-
2#
3# TOPPERS/ASP 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-2019 by Embedded and Real-Time Systems Laboratory
9# Graduate School of Information Science, Nagoya Univ., JAPAN
10#
11# 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
12# ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
13# 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
14# (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
15# 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
16# スコード中に含まれていること.
17# (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
18# 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
19# 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
20# の無保証規定を掲載すること.
21# (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
22# 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
23# と.
24# (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
25# 作権表示,この利用条件および下記の無保証規定を掲載すること.
26# (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
27# 報告すること.
28# (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
29# 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
30# また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
31# 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
32# 免責すること.
33#
34# 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
35# よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
36# に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
37# アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
38# の責任を負わない.
39#
40# $Id$
41#
42
43#
44# タスク管理モジュールの生成スクリプト
45#
46
47class TaskObject < KernelObject
48 def initialize()
49 super("tsk", "task", "t")
50 end
51
52 def prepare(key, params)
53 # パラメータが省略された時のデフォルト値の設定
54 params[:stk] ||= "NULL"
55
56 # tskatrが無効の場合(E_RSATR)[NGKI1028][NGKI3526][ASPS0009]
57 # [NGKI1016]
58 #(TA_ACT,TA_NOACTQUE,TARGET_TSKATR以外のビットがセットされている場合)
59 if (params[:tskatr] & ~($TA_ACT|$TA_NOACTQUE|$TARGET_TSKATR)) != 0
60 error_illegal_id("E_RSATR", params, :tskatr, :tskid)
61 end
62
63 # itskpriが有効範囲外の場合(E_PAR)[NGKI1034]
64 #(TMIN_TPRI <= itskpri && itskpri <= TMAX_TPRIでない場合)
65 if !($TMIN_TPRI <= params[:itskpri] && params[:itskpri] <= $TMAX_TPRI)
66 error_illegal_id("E_PAR", params, :itskpri, :tskid)
67 end
68
69 # stkszがターゲット定義の最小値(TARGET_MIN_STKSZ,未定義の場合は1)
70 # よりも小さい場合(E_PAR)[NGKI1042]
71 if params[:stksz] < $TARGET_MIN_STKSZ
72 error_wrong_id("E_PAR", params, :stksz, :tskid, "too small")
73 end
74
75 # スタック領域の設定[NGKI1041]
76 if params[:stk] == "NULL"
77 # スタック領域の生成[NGKI1049]
78 stkName = "_kernel_stack_#{params[:tskid]}"
79 params[:tinib_stksz] = AllocStack(stkName, params[:stksz])
80 params[:tinib_stk] = stkName
81 else
82 # stkszがターゲット定義の制約に合致しない場合(E_PAR)[NGKI1056]
83 if (params[:stksz] & ($CHECK_STKSZ_ALIGN - 1)) != 0
84 error_wrong_id("E_PAR", params, :stksz, :tskid, "not aligned")
85 end
86
87 params[:tinib_stksz] = params[:stksz]
88 params[:tinib_stk] = "(void *)(#{params[:stk]})"
89 end
90
91 # ターゲット依存の処理(ターゲット依存のエラーチェックを含む)
92 if defined? TargetTaskPrepare()
93 TargetTaskPrepare(key, params)
94 end
95 end
96
97 def generateInib(key, params)
98 if $USE_TSKINICTXB
99 tskinictxb = GenerateTskinictxb(key, params)
100 else
101 tskinictxb = "#{params[:tinib_stksz]}, #{params[:tinib_stk]}"
102 end
103 return("(#{params[:tskatr]}), (intptr_t)(#{params[:exinf]}), " \
104 "(TASK)(#{params[:task]}), INT_PRIORITY(#{params[:itskpri]}), " \
105 + tskinictxb)
106 end
107end
108
109# タスクが1つも登録されていない場合[NGKI0033]
110if $cfgData[:CRE_TSK].size() == 0
111 error("no task is registered")
112end
113
114#
115# タスク管理に関する情報の生成
116#
117$kernelCfgC.comment_header("Task Management Functions")
118TaskObject.new.generate()
119
120# タスク生成順序テーブルの生成
121$kernelCfgC.add("const ID _kernel_torder_table[TNUM_STSKID] = { ")
122$kernelCfgC.append("\t")
123$cfgData[:CRE_TSK].each_with_index do |(_, params), index|
124 $kernelCfgC.append(", ") if index > 0
125 $kernelCfgC.append("#{params[:tskid]}")
126end
127$kernelCfgC.add
128$kernelCfgC.add2("};")
Note: See TracBrowser for help on using the repository browser.