Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
TA
Uploaded by
Takuya Azumi
7,907 views
カーネルオブジェクト(ETロボコン向けTOPPERS活用セミナー2-2)
カーネルオブジェクト(ETロボコン向けTOPPERS活用セミナー2-2)
Software
◦
Read more
1
Save
Share
Embed
Embed presentation
Download
Download to read offline
1
/ 39
2
/ 39
3
/ 39
4
/ 39
5
/ 39
6
/ 39
7
/ 39
8
/ 39
9
/ 39
10
/ 39
11
/ 39
12
/ 39
13
/ 39
14
/ 39
15
/ 39
16
/ 39
17
/ 39
18
/ 39
19
/ 39
20
/ 39
21
/ 39
22
/ 39
23
/ 39
24
/ 39
25
/ 39
26
/ 39
27
/ 39
28
/ 39
29
/ 39
30
/ 39
31
/ 39
32
/ 39
33
/ 39
34
/ 39
35
/ 39
36
/ 39
37
/ 39
38
/ 39
39
/ 39
More Related Content
PDF
NXTプラットフォーム(ETロボコン向けTOPPERS活用セミナー4)
by
Takuya Azumi
PDF
TECSの基礎(ETロボコン向けTOPPERS活用セミナー2-1)
by
Takuya Azumi
PDF
Mindstorms NXT用 toppersプラットフォームの概要(ETロボコン向けTOPPERS活用セミナー1)
by
Takuya Azumi
PDF
NXT走行体サンプルプログラム(ETロボコン向けTOPPERS活用セミナー3)
by
Takuya Azumi
PDF
NXT開発環境(ETロボコン向けTOPPERS活用セミナー5)
by
Takuya Azumi
PDF
TOPPERS TECS WG 2016
by
Hiroshi Oyama
PDF
ET2016 組込みシステムに適したコンポーネントシステムTECSの最新状況
by
Takuya Azumi
PPTX
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)
by
NTT DATA Technology & Innovation
NXTプラットフォーム(ETロボコン向けTOPPERS活用セミナー4)
by
Takuya Azumi
TECSの基礎(ETロボコン向けTOPPERS活用セミナー2-1)
by
Takuya Azumi
Mindstorms NXT用 toppersプラットフォームの概要(ETロボコン向けTOPPERS活用セミナー1)
by
Takuya Azumi
NXT走行体サンプルプログラム(ETロボコン向けTOPPERS活用セミナー3)
by
Takuya Azumi
NXT開発環境(ETロボコン向けTOPPERS活用セミナー5)
by
Takuya Azumi
TOPPERS TECS WG 2016
by
Hiroshi Oyama
ET2016 組込みシステムに適したコンポーネントシステムTECSの最新状況
by
Takuya Azumi
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)
by
NTT DATA Technology & Innovation
What's hot
PPTX
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
by
NTT DATA Technology & Innovation
PDF
C21 SQL Server のスレッド管理 by 古賀啓一郎
by
Insight Technology, Inc.
PPTX
Ll tiger clojure
by
Toshiaki Maki
PDF
RFC6243(With-defaults Capability for NETCONF)の勉強資料
by
Tetsuya Hasegawa
PDF
RFC6241(Network Configuration Protocol (NETCONF))の勉強資料
by
Tetsuya Hasegawa
PDF
オンライン広告入札システムとZGC ( JJUG CCC 2021 Spring )
by
Hironobu Isoda
PPTX
How to use STARC RTL Design Style Guide Verilog-HDL 2011 version
by
Kiyoshi Ogawa
PDF
Oracle Database In Lock
by
Ryota Watabe
PPTX
STARC RTL設計スタイルガイドによるVerilog HDL並列記述の補強
by
Kiyoshi Ogawa
PPTX
Starc verilog hdl2013d
by
Kiyoshi Ogawa
PPT
SAStruts Seminar In Tripodworks
by
tripodworks
PPT
Javaでトランザクショナルメモリを使う
by
Kenji Kazumura
PPTX
JVMに裏から手を出す!JVMTIに触れてみよう(オープンソースカンファレンス2020 Online/Hiroshima 講演資料)
by
NTT DATA Technology & Innovation
PDF
RFC5717(Partial Lock Remote Procedure Call (RPC) for NETCONF)の勉強資料
by
Tetsuya Hasegawa
PPTX
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
by
NTT DATA Technology & Innovation
PPTX
RLSを用いたマルチテナント実装 for Django
by
Takayuki Shimizukawa
PDF
Dbts2013 特濃jpoug log_file_sync
by
Koji Shinkubo
PDF
20130329 rtm3
by
openrtm
PDF
RFC5277(NETCONF Event Notifications)の勉強資料
by
Tetsuya Hasegawa
PDF
分散ストリーム処理フレームワーク Apache S4
by
AdvancedTechNight
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
by
NTT DATA Technology & Innovation
C21 SQL Server のスレッド管理 by 古賀啓一郎
by
Insight Technology, Inc.
Ll tiger clojure
by
Toshiaki Maki
RFC6243(With-defaults Capability for NETCONF)の勉強資料
by
Tetsuya Hasegawa
RFC6241(Network Configuration Protocol (NETCONF))の勉強資料
by
Tetsuya Hasegawa
オンライン広告入札システムとZGC ( JJUG CCC 2021 Spring )
by
Hironobu Isoda
How to use STARC RTL Design Style Guide Verilog-HDL 2011 version
by
Kiyoshi Ogawa
Oracle Database In Lock
by
Ryota Watabe
STARC RTL設計スタイルガイドによるVerilog HDL並列記述の補強
by
Kiyoshi Ogawa
Starc verilog hdl2013d
by
Kiyoshi Ogawa
SAStruts Seminar In Tripodworks
by
tripodworks
Javaでトランザクショナルメモリを使う
by
Kenji Kazumura
JVMに裏から手を出す!JVMTIに触れてみよう(オープンソースカンファレンス2020 Online/Hiroshima 講演資料)
by
NTT DATA Technology & Innovation
RFC5717(Partial Lock Remote Procedure Call (RPC) for NETCONF)の勉強資料
by
Tetsuya Hasegawa
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
by
NTT DATA Technology & Innovation
RLSを用いたマルチテナント実装 for Django
by
Takayuki Shimizukawa
Dbts2013 特濃jpoug log_file_sync
by
Koji Shinkubo
20130329 rtm3
by
openrtm
RFC5277(NETCONF Event Notifications)の勉強資料
by
Tetsuya Hasegawa
分散ストリーム処理フレームワーク Apache S4
by
AdvancedTechNight
Similar to カーネルオブジェクト(ETロボコン向けTOPPERS活用セミナー2-2)
PDF
中3女子でもわかる constexpr
by
Genya Murakami
PPT
オブジェクト指向入門4
by
Kenta Hattori
PDF
Adding simpl GVN path into GHC
by
Kei Hibino
PDF
Async design with Unity3D
by
Kouji Hosoda
PPT
言語処理系入門8
by
Kenta Hattori
PDF
Coq Party 20101127
by
tmiya
PDF
BNN CAMP vol.3 インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 2
by
Atsushi Tadokoro
PDF
TOPPERSプロジェクトの紹介 OSC2018 Tokyo Spring
by
Center for Embedded Computing Systems, Nagoya Univ.
PDF
テンプレートメタプログラミング as 式
by
digitalghost
PDF
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
by
Yoshifumi Kawai
PDF
Misrac20150523
by
Kiyoshi Ogawa
PDF
LINQ in Unity
by
Yoshifumi Kawai
PPT
Component basedgameenginedesign
by
DADA246
PDF
OpenCL Overview JP Translation
by
The Khronos Group Inc.
PDF
中3女子が狂える本当に気持ちのいい constexpr
by
Genya Murakami
PPTX
Interaction channel
by
信之 岩永
PPT
言語処理系入門10
by
Kenta Hattori
PDF
さわってみようTOPPERS/SSP
by
NSaitoNmiri
PDF
Test-Driven Development for [Embedded] C by James Grenning at Agile Japan 2013
by
Yohei Onishi
PDF
AtCoder Beginner Contest 006 解説
by
AtCoder Inc.
中3女子でもわかる constexpr
by
Genya Murakami
オブジェクト指向入門4
by
Kenta Hattori
Adding simpl GVN path into GHC
by
Kei Hibino
Async design with Unity3D
by
Kouji Hosoda
言語処理系入門8
by
Kenta Hattori
Coq Party 20101127
by
tmiya
BNN CAMP vol.3 インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 2
by
Atsushi Tadokoro
TOPPERSプロジェクトの紹介 OSC2018 Tokyo Spring
by
Center for Embedded Computing Systems, Nagoya Univ.
テンプレートメタプログラミング as 式
by
digitalghost
What, Why, How Create OSS Libraries - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの...
by
Yoshifumi Kawai
Misrac20150523
by
Kiyoshi Ogawa
LINQ in Unity
by
Yoshifumi Kawai
Component basedgameenginedesign
by
DADA246
OpenCL Overview JP Translation
by
The Khronos Group Inc.
中3女子が狂える本当に気持ちのいい constexpr
by
Genya Murakami
Interaction channel
by
信之 岩永
言語処理系入門10
by
Kenta Hattori
さわってみようTOPPERS/SSP
by
NSaitoNmiri
Test-Driven Development for [Embedded] C by James Grenning at Agile Japan 2013
by
Yohei Onishi
AtCoder Beginner Contest 006 解説
by
AtCoder Inc.
カーネルオブジェクト(ETロボコン向けTOPPERS活用セミナー2-2)
1.
TOPPERSプロジェクト認定 12012/06/02 2.2 カーネルオブジェクト 安積卓也(⽴命館⼤学) 最終更新⽇
: 2012/ 5/18
2.
TOPPERSプロジェクト認定 22012/06/02 概要 • カーネルオブジェクトのコンポーネント化 –
例:タスクの利⽤ • 複合コンポーネント – 周期タスク • 例:周期タスクを利⽤したカウントアッププログラム – 初期化ルーチン • require カーネルセルタイプ
3.
TOPPERSプロジェクト認定 32012/06/02 カーネルオブジェクトのコンポーネント化 • カーネルオブジェクト •
例:タスクの利⽤
4.
TOPPERSプロジェクト認定 42012/06/02 カーネルオブジェクトのコンポーネント化 • カーネルオブジェクト⼀覧 アクティブなセルタイプ –
タスク – 初期化処理ルーチン – 終了処理ルーチン – 割込みサービスルーチン – 周期ハンドラ – アラームハンドラ その他のセルタイプ – セマフォ – イベントフラグ – データキュー – 優先度データキュー – 固定⻑メモリプール – 割込み要求ライン – カーネル
5.
TOPPERSプロジェクト認定 52012/06/02 カーネルオブジェクトのコンポーネント化 • カーネルオブジェクト –
タスク – セマフォ – データキュー • 利点 – 静的APIを⾃動⽣成 – ソフトウェアの部品化を 促進 テンプレート コード TECS CDL(コンポーネント記述言語) シグニチャ記述 (インタフェースの定義) セルタイプ記述 (コンポーネントの定義) 組上げ記述 (コンポーネントの 構成の定義) TECS ジェネレータ ヘッダ インタフェース コード Cコンパイラ セルタイプコード (コンポーネントの ソースコード) リンカ アプリケーション 開発者 コンポーネント 開発者 アプリケーションモジュ ール コンポーネント図 製品 エンドユーザー コンポーネント 仕様開発者 仕 様 の 規定 設計 設計 利用 カーネル設定 ファイル コンフィギュレータ カーネル設定 コード
6.
TOPPERSプロジェクト認定 62012/06/02 カーネルオブジェクトのコンポーネント化 • カーネルオブジェクト –
タスク – セマフォ – データキュー • 利点 – 静的APIを⾃動⽣成 – ソフトウェアの部品化を 促進 テンプレート コード TECS CDL(コンポーネント記述言語) シグニチャ記述 (インタフェースの定義) セルタイプ記述 (コンポーネントの定義) 組上げ記述 (コンポーネントの 構成の定義) TECS ジェネレータ ヘッダ インタフェース コード Cコンパイラ セルタイプコード (コンポーネントの ソースコード) リンカ アプリケーション 開発者 コンポーネント 開発者 アプリケーションモジュ ール コンポーネント図 製品 エンドユーザー コンポーネント 仕様開発者 仕 様 の 規定 設計 設計 利用 カーネル設定 ファイル コンフィギュレータ カーネル設定 コードタスク CRE_TSK(TSKID_tTask_LogTask_Task, { TA_ACT, &tTask_CB_tab[0], tTask_start_task, 3, 131072, NULL }); 周期ハンドラ CRE_CYC( CYCHDLRID_tCyclicHandler_CyclicHandler, { TA_NULL, &tCyclicHandler_CB_tab[0], tCyclicHandler_start, 2000, 0 } ); セマフォ CRE_SEM(SEMID_tSemaphore_SerialPort1_ReceiveSemaphore, { TA_NULL, 0, 1 });
7.
TOPPERSプロジェクト認定 72012/06/02 タスクのシグニチャ記述(⼀部抜粋) /* タスク本体を呼び出すためのシグニチャ*/ signature
sTaskBody { void main(void); }; /* タスク例外処理ルーチン本体を呼び出すシグニチャ*/ signature sTaskExceptionBody { void main([in] TEXPTN pattern); }; /* タスクを操作するためのシグニチャ(タスクコンテキスト⽤)*/ signature sTask { ER activate(void); ER_UINT cancelActivate(void); ER terminate(void); ... }; /* タスクを操作するためのシグニチャ(⾮タスクコンテキスト⽤) */ signature siTask { ER activate(void); ER wakeup(void); ... }; asp+tecs/include/kernel.cdl
8.
TOPPERSプロジェクト認定 82012/06/02 タスクのセルタイプ定義(前半) [active] celltype tTask
{ [inline] entry sTask eTask; /* タスク操作(タスクコンテキスト⽤)*/ [inline] entry siTask eiTask; /* タスク操作(⾮タスクコンテキスト⽤)*/ call sTaskBody cBody; /* タスク本体 */ [optional] call sTaskExceptionBody cExceptionBody; /* タスク例外処理ルーチン本体 */ attr{ }; factory { }; FACTORY { }; }; [inline]で指定された受け⼝はinline関数として実装する ⽣成されるテンプレートコードもinline関数が⽣成される [optional]で指定された呼び⼝は未結合を許す セルタイプコード(C⾔語の実装コード)では、 呼び出す前に結合されているかの確認をする必要がある asp+tecs/include/kernel.cdl
9.
TOPPERSプロジェクト認定 92012/06/02 [optional]の例 void tTask_start_exception(TEXPTN
texptn, intptr_t exinf) { CELLCB *p_cellcb = (CELLCB *) exinf; if(is_cExceptionBody_joined()){ cExceptionBody_main(texptn); } } asp+tecs/tecs_kernel/tTask.c [active] celltype tTask { ... [optional] call sTaskExceptionBody cExceptionBody; /* タスク例外処理ルーチン本体 */ ... }; asp+tecs/include/kernel.cdl 結合されているかどうか?
10.
TOPPERSプロジェクト認定 102012/06/02 タスクのセルタイプ定義(後半) celltype tTask
{ ... attr{ ID id = C_EXP("TSKID_$id$"); [omit] ATR taskAttribute = C_EXP("TA_NULL"); [omit] ATR exceptionAttribute = C_EXP("TA_NULL"); [omit] PRI priority; [omit] SIZE stackSize; }; factory { write("tecsgen.cfg", "CRE_TSK(%s, { %s, $cbp$, tTask_start_task, %s, %s, NULL });", id, taskAttribute, priority, stackSize); }; FACTORY { write("tecsgen.cfg", "#include ¥"$ct$_tecsgen.h¥""); }; }; 各セルごとに出力 セルタイプで一度だけ出力 C_EXP(“”);はC⾔語での表現 コンポーネント記述で意味解釈をしないことを⽰す asp+tecs/include/kernel.cdl
11.
TOPPERSプロジェクト認定 112012/06/02 celltype tTask
{ ... factory { write("tecsgen.cfg", "CRE_TSK(%s, { %s, $cbp$, tTask_start_task, %s, %s, NULL });", id, taskAttribute, priority, stackSize); }; FACTORY { write("tecsgen.cfg", "#include ¥"$ct$_tecsgen.h¥""); }; }; ファクトリ • セル(コンポーネント)⽣成時に静的APIなどを 開発者が意図的に出⼒するために使⽤する 出力したいファイル名 出力内容 printf形式で出力 asp+tecs/include/kernel.cdl
12.
TOPPERSプロジェクト認定 122012/06/02 ファクトリでの名前置換 ID id
= C_EXP(“TSKID_$id$”); write("tecsgen.cfg","CRE_TSK(%s, { %s, $cbp$, tTask_start_task, %s, %s, NULL });", id, taskAttribute, priority, stackSize); $id$ … セルタイプ名とセル名を '_' で連結したものに置換 $cell$ … セル名に置換 $cb$ … セルの CB の C ⾔語名に置換 $cbp$ … セルのCB へのポインタ(CB が⽣成されない場合はNULL に置換) $cb_proto$ … セルの CB の C ⾔語名(プロトタイプ宣⾔⽤)に置換 $ct$ … セルタイプ名に置換 $idx$ … セルの CB の IDX (idx_is_id の場合は整数、そうでない場合は CB へのポインタ)に置換 $ID$ … セルの ID(idx_is_id の場合 IDX に⼀致)に置換 $$ … $ に置換 CRE_TSK(TSKID_tTask_MainTask, { TA_ACT, &tTask_CB_tab[1], tTask_start_task, MAIN_PRIORITY, STACK_SIZE, NULL }); 例えば、セルタイプ名tTask、セル名MainTaskの場合 セル名セルタイプ名 tecsgen.cfg
13.
TOPPERSプロジェクト認定 132012/06/02 tecsgen.cfg i INCLUDE("target_timer.cfg"); INCLUDE("syssvc/banner.cfg"); #include "tSample1.h" #ifdef
CPUEXC1 DEF_EXC(CPUEXC1, { TA_NULL, cpuexc_handler }); #endif /* CPUEXC1 */ tSample1.cfg INCLUDE("tecsgen.cfg"); #include "cb_type_only.h" #include "tTask_tecsgen.h" CRE_TSK(TSKID_tTask_LogTask_Task, { TA_ACT, &tTask_CB_tab[0], tTask_start_task, 3, 131072, NULL }); DEF_TEX(TSKID_tTask_LogTask_Task, { TA_NULL, tTask_start_exception }); ... #include "tInitializeRoutine_tecsgen.h" ATT_INI({ TA_NULL, NULL, tInitializeRoutine_start }); #include "tTerminateRoutine_tecsgen.h" ATT_TER({ TA_NULL, NULL, tTerminateRoutine_start }); #include "tISR_tecsgen.h" ATT_ISR({ TA_NULL, NULL, 2, tISR_start, 1 }); CFG_INT( 2,{ TA_NULL, -2}); #include "tCyclicHandler_tecsgen.h" CRE_CYC( CYCHDLRID_tCyclicHandler_CyclicHandler, { TA_NULL, &tCyclicHandler_CB_tab[0], tCyclicHandler_start, 2000, 0 } ); #include "tAlarmHandler_tecsgen.h" CRE_ALM(ALMHDLRID_tAlarmHandler_AlarmHandler, { TA_NULL, &tAlarmHandler_CB_tab[0], tAlarmHandler_start}); CRE_SEM(SEMID_tSemaphore_SerialPort1_ReceiveSemaphore, {TA_NULL, 0, 1}); CRE_SEM(SEMID_tSemaphore_SerialPort1_SendSemaphore, { TA_NULL, 1, 1 }); #include "syssvc/tLogTask.h" ATT_TER({ TA_NULL, 0, tLogTask_terminate });
14.
TOPPERSプロジェクト認定 142012/06/02 タスクセルの使い⽅ • タスクのインスタンスの記述 ①タスク処理本体と結合 ②タスクの属性の設定:カーネル起動時のタスクの状態 •
TA_ACT:実⾏可能状態 • TA_NULL(デフォルト):休⽌状態 ③タスクの優先度:1が最⾼優先度 ④スタックサイズ:バイト cell tTask MainTask { /* 呼び⼝の結合 */ cBody = Sample1.eMainTask; //① /* 属性の設定 */ taskAttribute = C_EXP(“TA_ACT”); //② priority = MAIN_PRIORITY;//③ stackSize = STACK_SIZE; //④ }; 記述の順番は 結合と属性の設定 どちらが先でもよい
15.
TOPPERSプロジェクト認定 152012/06/02 カーネルオブジェクトのコンポーネント化 • カーネルオブジェクト •
例:タスクの利⽤
16.
TOPPERSプロジェクト認定 162012/06/02 例:タスクセルの利⽤ • タスクセルの利⽤⽅法を理解する –
組上げ記述 • Displayセルを利⽤する • tSample.cdlにタスクを⽣成するコンポーネント記述 する tHelloTaskBody HelloTaskBody tTask StartTask tDisplay Display
17.
TOPPERSプロジェクト認定 172012/06/02 タスクコンポーネントの使い⽅(組み上げ) /* * タスク */ cell
tHelloTaskBody HelloTaskBody{ cDisplay = Display.eDisplay; // ディスプレイの呼び⼝ }; cell tTask StarterTask{ taskAttribute = C_EXP("TA_ACT"); priority = 5; stackSize = 1024; cBody = HelloTaskBody.eBody; }; tHelloTaskBody HelloTaskBody tTask StartTask tDisplay Display /* * ディスプレイ */ cell tDisplay Display{ width = 100; depth = 8; cellWidth = 6; charWidth = (100 / 6); charDepth = (8); }; asp+tecs/tecs_lib/mindstorms_nxt/ tNXTMiddle_inst.cdl asp+tecs/nxt_sample/sample_hello/tSample.cdl
18.
TOPPERSプロジェクト認定 182012/06/02 TECSジェネレータの設定 • tecsgen(TECSジェネレータ)へのシンボリックリ ンクを張る –
tecs_package/asp+tecs/に移動 し、../bin/tecsgen.exeへのシンボリックリンク tecsgen.exeを作成 $ cd tecs_package/asp+tecs/ $ ln -s ../bin/tecsgen.exe tecsgen.exe
19.
TOPPERSプロジェクト認定 192012/06/02 コンパイラの設定 • 環境に依存する定義は、 target/mindstorms_nxt_gcc/Makefile.targetに記 述されおり、各⾃の環境に応じて変更する必要があ る 1.
クロスツールチェーンのパス • 使⽤するクロスツールチェーン(GNU ARM)のパスを, GCC_TARGETに定義する. • デフォルト: GCC_TARGET = /usr/local/GNUARM/bin/arm-elf 2. ダウンロードツールのパス • NexTTool.exeのパスを,NEXTTOOLに定義する. • デフォルト: NEXTTOOL = /usr/local/nexttool/NexTTool.exe
20.
TOPPERSプロジェクト認定 202012/06/02 ビルド⼿順 1. プロジェクトディレクトリに移動 2.
TECSジェネレータの実⾏ – コンポーネントの⽣成と結合に関するファイル、 およびコンポーネントに関する定義ファイルが gen/以下に⽣成される。 3. 依存関係 4. コンパイル&リンク • asp.rxeとrxe.shが⽣成される $ cd /nxt_sample/sample_hello/ $ make tecs TECSジェネレータの実⾏ $ make depend 依存関係の更新 $ make コンパイル&リンク
21.
TOPPERSプロジェクト認定 212012/06/02 ジェネレータが⾃動⽣成するファイル • Makefile.depend •
Makefile.tecsgen • Makefile.templ • global_tecsgen.h • sDisplay_tecsgen.h • tDisplayBody_factory.h • tDisplayBody_templ.c • tDisplayBody_tecsgen.c • tDisplayBody_tecsgen.h • tHelloTaskBody_factory.h • tHelloTaskBody_templ.c • tHelloTaskBody_tecsgen.c • tHelloTaskBody_tecsgen.h • tmp_C_src.c 依存関係 ⾃動⽣成した ファイル⽤の Makefile セルタイプ毎に ⾃動⽣成されるファイル テンプレート セルの結合コード ファクトリ⽤ヘッダ Makefileの テンプレート 型の定義など 各シグニチャ の定義 中間ファイル TECSジェネレータが使⽤
22.
TOPPERSプロジェクト認定 222012/06/02 Makefile.tecsgen • TECSジェネレータがコンパ イルに必要な情報を⾃動的 に⽣成する ・・・ CELLTYPE_COBJS
= ¥ tTask.o ¥ tISR.o ¥ tLCD.o ¥ tDisplayBody.o ¥ tBluetoothBody.o ¥ tCheckNXTButtonBody.o ¥ tInitializeTaskNXTBody.o ¥ .... ・・・ # # TECSが⽣成する定義のインクルード # -include gen/Makefile.tecsgen .... asp+tecs/nxt_sample/sample_hello/Makefile
23.
TOPPERSプロジェクト認定 232012/06/02 複合コンポーネント • 周期タスク •
例:周期タスクセルの利⽤ • 初期化ルーチン
24.
TOPPERSプロジェクト認定 242012/06/02 周期タスク void handler(void) { iact_tsk(タスクID); } void
task(intptr_t exinf) { タスク処理 } CRE_CYC(CALCID_CYCHDR, { TA_NULL, 0, vCalcIdHandler, 10, 0 }); CRE_TSK(TASK1, { TA_NULL, 0, task, MID_PRIORITY, STACK_SIZE, NULL }); • ITRONでは、周期タスクを提供していない • 周期タスクは、周期ハンドラがタスクを周期的に起 動することで実現している
25.
TOPPERSプロジェクト認定 252012/06/02 周期タスク:複合セルタイプ(複合コンポーネント) • 複数のセルを⼀つのセルと して扱う技術 •
利⽤者は周期タスクセルを ⽣成するだけでよい 周期ハンドラの 処理本体 (タスク起動) 周期ハンドラ タスク 周期タスク(tCyclicTask)
26.
TOPPERSプロジェクト認定 262012/06/02 複合コンポーネント • 周期タスク •
例:周期タスクセルの利⽤ • 初期化ルーチン
27.
TOPPERSプロジェクト認定 272012/06/02 例:周期タスクセルの利⽤ • 周期タスクセルの利⽤⽅法を理解する –
組上げ記述 • Displayセルを利⽤する • Displayに数字をカウントアップする tCounterTaskBody CounterTaskBody tCyclicTask CounterTask tDisplay Display
28.
TOPPERSプロジェクト認定 282012/06/02 周期タスクセルの使い⽅(組み上げ) /* cell tCounterTaskBody
CounterTaskBody{ cDisplay = Display.eDisplay; // ディスプレイの呼び⼝ }; cell tCyclicTask CounterTask{ cyclicAttribute = C_EXP("TA_STA"); cyclicTime = 1000; cyclicPhase = 1; priority = 5; stackSize = 1024; cBody = CounterTaskBody.eBody; }; /* * ディスプレイ */ cell tDisplay Display{ width = 100; depth = 8; cellWidth = 6; charWidth = (100 / 6); charDepth = (8); }; asp+tecs/tecs_lib/mindstorms_nxt/ tNXTMiddle_inst.cdl asp+tecs/nxt_sample/sample_counter/tSample.cdl tCounterTaskBody CounterTaskBody tCyclicTask CounterTask tDisplay Display
29.
TOPPERSプロジェクト認定 292012/06/02 周期タスクセルの使い⽅ • 周期タスクのインスタンス化の記述 ①周期タスクの属性の設定:カーネル起動時の周期タスクの状態 •
TA_STA:起動 • TA_NULL(デフォルト):休⽌状態 ②起動周期(ミリ秒) ③起動位相 ④タスクの優先度 ⑤スタックサイズ ⑥タスク処理本体と結合 cell tCyclicTask CounterTask{ cyclicAttribute = C_EXP(“TA_STA”);① cyclicTime = 1000;② cyclicPhase = 1;③ priority = 5;④ stackSize = 1024;⑤ cBody = CounterTaskBody.eBody;⑥ };
30.
TOPPERSプロジェクト認定 302012/06/02 複合コンポーネント • 周期タスク •
例:周期タスクセルの利⽤ • 初期化ルーチン
31.
TOPPERSプロジェクト認定 312012/06/02 TECSにおける初期化 1. 初期化ルーチンとセルを1対1に対応させる •
カーネルオブジェクトの初期化ルーチンを利⽤ • 例:ディスプレイ
32.
TOPPERSプロジェクト認定 322012/06/02 TOPPERS/ASP+TECSの初期化順序 1. メモリ領域などの初期化 –
BSS領域の初期化 – DATA領域の初期化 2. セル管理ブロックの初期化 3. ターゲット依存部の初期化 4. 各モジュールの初期 • タスクなどのカーネルオブジェクト の初期化 5. 初期化ルーチンの実⾏ 6. カーネル動作の開始 /* * カーネルの起動 */ void sta_ker(void) { /* ターゲット依存の初期化 */ target_initialize(); /* * 各モジュールの初期化 */ initialize_tmevt(); initialize_object(); /* 初期化ルーチンの実⾏ */ call_inirtn(); /* カーネル動作の開始*/ kerflg = true; LOG_KER_ENTER(); start_dispatch(); assert(0); } asp+tecs/kernel/startup.c
33.
TOPPERSプロジェクト認定 332012/06/02 初期化処理ルーチン:カーネルオブジェクト /* 初期化処理ルーチン本体を呼び出すためのシグニチャ
*/ signature sInitializeRoutineBody { void main(void); }; /* 初期化処理ルーチン */ [active] celltype tInitializeRoutine { call sInitializeRoutineBody cInitializeRoutine; attr { [omit] ATR attribute = C_EXP("TA_NULL"); }; factory { write("tecsgen.cfg", "ATT_INI({ %s, $cbp$, tInitializeRoutine_start });", attribute); }; }; asp+tecs/include/kernel.cdl
34.
TOPPERSプロジェクト認定 342012/06/02 ⽣成される初期化ルーチンの静的API ATT_INI({ TA_NULL,
&tInitializeRoutine_CB_tab[0], tInitializeRoutine_start }); write("tecsgen.cfg", "ATT_INI({ %s, $cbp$, tInitializeRoutine_start });", attribute); asp+tecs/include/kernel.cdl
35.
TOPPERSプロジェクト認定 352012/06/02 初期化の例 • ディスプレイの例 –
Displayをインスタンス 化すれば、初期化ルーチ ンも⾃動的に⽣成される 2010/06/20 TOPPERSプロジェクト認定 35 tDisplay Display DisplayBody tInitializeRoutine InitializeDisplay SPI LCD
36.
TOPPERSプロジェクト認定 362012/06/02 require カーネルセルタイプ
37.
TOPPERSプロジェクト認定 372012/06/02 require • require –
RTOSのAPIなど共通して使われる機能について、 結合を明⽰することなく使⽤できる仕組み – require の指定先は、シングルトンのセルタイプ の受け⼝
38.
TOPPERSプロジェクト認定 382012/06/02 例:require [singleton] celltype tKernel{ [inline]
entry sKernel eKernel; [inline] entry siKernel eiKernel; }; celltype tStarterTaskBody{ require tKernel.eKernel; /*以下省略*/ }; } void eBody_main() { /*処理省略*/ delay(100); /*処理省略*/ exitTask(); } signature sKernel{ ER sleep(void); ER sleepTimeout([in] TMO timeout); ER delay([in] RELTIM delayTime); ER exitTask(void); ER getTaskId([out]ID *p_taskId); /*以下省略*/ }; asp+tecs/include/kernel.cdl asp+tecs/include/kernel.cdl asp+tecs/nxt_sample/sample_seminar/ tStartTaskBody.c asp+tecs/nxt_sample/sample_seminar/tSample.cdl
39.
TOPPERSプロジェクト認定 392012/06/02 著者リスト • カーネルオブジェクトのコンポーネント化編 •
安積 卓也(⽴命館⼤学) • 例:タスクセルの利⽤ • 安積 卓也 (⽴命館⼤学) • ⽯川 拓也 (名古屋⼤学) • ⼭⼝ 英之 (名古屋⼤学) • 複合コンポーネント, 初期化ルーチン, require • 安積 卓也(⽴命館⼤学) • 例:周期タスクセルの利⽤ • 安積 卓也(⽴命館⼤学) • ⽯川 拓也 (名古屋⼤学)
Download