source: asp3_wo_tecs/trunk/doc/migration.txt@ 306

Last change on this file since 306 was 306, checked in by ertl-honda, 7 years ago

3.1.0を反映

File size: 27.5 KB
Line 
1
2 TOPPERS/ASP3カーネル
3 TOPPERS/ASP3カーネルへのマイグレーションガイド
4
5 対応バージョン: Release 3.1
6 最終更新: 2016年2月3日
7
8このドキュメントは,TOPPERS/ASPカーネル Release 1.X(以下,ASP1カーネル)
9やTOPPERS/JSPカーネル(以下,JSPカーネル),他のμITRON4.0仕様準拠のカー
10ネル上のアプリケーションを,TOPPERS/ASP3カーネル(TOPPERS/ASPカーネル
11Release 3.X.以下,ASP3カーネル)にポーティングするための方法(またはヒ
12ント)を説明するものである.
13
14----------------------------------------------------------------------
15 TOPPERS/ASP Kernel
16 Toyohashi Open Platform for Embedded Real-Time Systems/
17 Advanced Standard Profile Kernel
18
19 Copyright (C) 2005-2016 by Embedded and Real-Time Systems Laboratory
20 Graduate School of Information Science, Nagoya Univ., JAPAN
21
22 上記著作権者
23は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
24 ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
25 変・再é…
26å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
27 (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
28 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
29 スコード中に含まれていること.
30 (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
31 用できる形で再é…
32å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
33å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
34 者
35マニュアルなど)に,上記の著作権表示,この利用条件および下記
36 の無保証規定を掲載すること.
37 (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
38 用できない形で再é…
39å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
40 と.
41 (a) 再é…
42å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
43マニュアルなど)に,上記の著
44 作権表示,この利用条件および下記の無保証規定を掲載すること.
45 (b) 再é…
46å¸ƒã®å½¢æ…
47‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
48 報告すること.
49 (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
50 害からも,上記著作権者
51およびTOPPERSプロジェクトをå…
52è²¬ã™ã‚‹ã“と.
53 また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
54 由に基づく請求からも,上記著作権者
55およびTOPPERSプロジェクトを
56 å…
57è²¬ã™ã‚‹ã“と.
58
59 本ソフトウェアは,無保証で提供されているものである.上記著作権者
60お
61 よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
62 に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
63 アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
64 の責任を負わない.
65
66 $Id: migration.txt 724 2016-04-02 21:36:23Z ertl-hiro $
67----------------------------------------------------------------------
68
69○目次
70
71・関連ドキュメント
72・ASP1カーネルとのアプリケーションの構築環境の違い
73 - 構築手順
74 - システムコンフィギュレーションファイルに含めるべき内
75容
76 - TECSを用いて実装
77されたシステムサービスの使用
78 - コンフィギュレーションスクリプトの仕様の違い
79 - コンフィギュレータの仕様の違い
80・ASP1カーネルとのカーネル仕様の違い
81 - 時間の単位
82 - 周期ハンドラとアラームハンドラ
83 - タスク例外処理
84 - メールボックス
85 - その他の違い
86・μITRON4.0仕様からの移行
87 - データ型と定数の変更
88 - オブジェクト属性の変更
89 - システムコンフィギュレーションファイルの変更
90 - オブジェクトIDの自動割付けへの対応
91 - ヘッダファイルの変更
92 - sta_tskの置き換え
93 - 周期ハンドラの非互換性
94
95
96○関連ドキュメント
97
98ASP3カーネルの仕様の概要を説明したドキュメントとして,「TOPPERS/ASP3カー
99ネルの仕様概要」がある.このドキュメントでは,ASP3カーネルの仕様を,
100μITRON4.0仕様のスタンダードプロファイル,JSPカーネル,ASP1カーネルから
101の変更箇所がわかるように説明している.
102
103ASP3カーネルの詳細な仕様については,「TOPPERS第3世代カーネル(ITRON系)
104統合仕様書」で規定している.この仕様書でも,μITRON4.0仕様(JSPカーネル
105はこの仕様に準拠)およびTOPPERS新世代カーネル統合仕様(ASP1カーネルはこ
106の仕様に準拠)との違いを記載している.
107
108
109○ASP1カーネルとのアプリケーションの構築環境の違い
110
111この章では,ASP3カーネルの標準のアプリケーションの構築環境が,ASP1カー
112ネルからどのように変更されたかについて説明する.
113
114●構築手順
115
116ASP1カーネルのコンフィギュレーションスクリプト(configure)は,デフォル
117トではサンプルプログラムをカレントディレクトリにコピーしていたが,ASP3
118カーネルではコピーを行わず,サンプルプログラムのディレクトリにあるファ
119イルを直接参ç…
120§ã™ã‚‹ï¼Ž
121
122ASP1カーネルの標準の構築手順では,「make depend」により依存関係ファイル
123を作成してから,「make」によりロードモジュールを生成していたが,ASP3カー
124ネルでは依存関係ファイルを自動的に作成するため,「make depend」を実行す
125る必
126要はない.
127
128●システムコンフィギュレーションファイルに含めるべき内
129容
130
131ASP3カーネルでは,カーネルが必
132要とするコンフィギュレーション記述を,ア
133プリケーションのシステムコンフィギュレーションファイルとは別のファイル
134に用意し,標準のMakefileでは,コンフィギュレータのパス1にそれを読み込ま
135せている.そのため,ASP1カーネルではシステムコンフィギュレーションファ
136イルに記述しなければならなかった以下の行は,ASP3カーネルでは削除しなけ
137ればならない.
138
139----------------------------------------
140INCLUDE("target_timer.cfg");
141----------------------------------------
142
143●TECSを用いて実装
144されたシステムサービスの使用
145
146ASP3カーネルのé…
147å¸ƒãƒ‘ッケージに含まれるシステムサービスは,ASP1カーネル
148に含まれるものとほぼ互換の機能を,TOPPERS組込みコンポーネントシステム
149(TECS)を用いて実現している.そのため,ASP1カーネルのé…
150å¸ƒãƒ‘ッケージに
151含まれるシステムサービスを用いたアプリケーションを,ASP3カーネルにポー
152ティングする際には,以下の修正が必
153要である.
154
155TECSで記述されたシステムサービスを用いてシステムを構築する際には,シス
156テムサービスの構成を記述したコンポーネント記述ファイルを用意することが
157必
158要である.サンプルプログラム(sample1)と同様に,システムログ機能,シ
159リアルインタフェースドライバ,システムログタスク,カーネル起動メッセー
160ジ出力の4つのシステムサービスを用いる場合には,サンプルプログラム用のコ
161ンポーネント記述ファイル(sample1.cdl)をそのまま使用することができる.
162
163一方,システムコンフィギュレーションファイル(<アプリケーション名>.cfg)
164からは,以下の4行を削除し,代わりに「INCLUDE("tecsgen.cfg");」を追加し
165なければならない.
166
167----------------------------------------
168INCLUDE("syssvc/syslog.cfg");
169INCLUDE("syssvc/banner.cfg");
170INCLUDE("syssvc/serial.cfg");
171INCLUDE("syssvc/logtask.cfg");
172----------------------------------------
173
174不要なシステムサービスは,サンプルプログラム用のコンポーネント記述ファ
175イル(sample1.cdl)を修正することで取り外すことができる.å…
176·ä½“的な方法は,
177sample1.cdl内
178のコメントと,ユーザーズマニュアルの「8.システムサービス」
179の章で説明している.
180
181なお,é…
182å¸ƒãƒ‘ッケージに含まれるシステムサービスをå…
183¨ãç”¨ã„ない場合には,
184TECSを使用する必
185要はない。コンフィギュレーションスクリプトの-wオプショ
186ンにより,TECSを使用しない(TECSジェネレータを動作させない)設定にする
187ことができる.
188
189●コンフィギュレーションスクリプトの仕様の違い
190
191ASP3カーネルのコンフィギュレーションスクリプト(configure.rb)は,ASP1
192のもののほぼ上位互換となっているが,以下のオプションが廃止されたため,
193使用している場合には変更が必
194要である.
195
196・テンプレートディレクトリの指定(-t)
197 テンプレートディレクトリは,テンプレートMakefileのコピーå…
198ƒã¨ã—てし
199 か使われないため,テンプレートMakefile名の指定(-m)で代用できる.
200
201・実行環境の名称(-d)
202 実行環境の名称の指定が必
203要な場合は,コンパイル時のシンボルの定義に
204 よって対応することとしたため,å…
205±é€šã‚·ãƒ³ãƒœãƒ«å®šç¾©ã‚ªãƒ—ション(-O)で対
206 応する.
207
208・perlのパス名(-p)
209 ASP3カーネルではperlを使用していないため廃止した.
210
211・プロセッサ数(-P)… ASP3カーネルでは使用していない
212 プロセッサ数を指定する場合には,コンフィギュレーションスクリプトの
213 パラメータに,「PRC_NUM=<プロセッサ数>」を与えることで対応する.
214
215なお,ASP3カーネルのコンフィギュレーションスクリプトでは,-tと-dは別の
216意味のオプションとなっているため,注意すること.
217
218●コンフィギュレータの仕様の違い
219
220ASP3カーネルのコンフィギュレータ(Ruby版コンフィギュレータ)は,ユーザ
221から見た場合にはASP1のものとほぼ互換になっているが,以下のオプションが
222廃止または変更されたため,使用している場合には変更が必
223要である.
224
225・インクルードディレクトリ名(--include-path)
226 オプション名を--include-directoryに変更した.短縮形(-I)を用いてい
227 る場合には,影響はない.
228
229・値取得シンボルテーブルファイル名(--cfg1-def-table)
230 オプション名を--symval-tableに変更した.また,値取得シンボルテーブ
231 ルのフォーマットが変更になっている.
232
233・ロードモジュールのシンボルファイル名(--symbol-table)
234 オプション名を--rom-symbolに変更した.
235
236・オブジェクトID番号を保持する変数の生成(--external-id)
237 コンパイルオプションに-DUSE_EXTERNAL_IDを指定することで同じ機能を実
238 現するようにしたため,このオプションは廃止した.
239
240・パス1の生成ファイル名(--cfg1_out)
241 このオプションは廃止した.現時点では,同等の機能は持っていない.こ
242 の機能が必
243要なユースケースが出てきた場合には,コンフィギュレータを
244 拡張する(拡張は容易である).
245
246・コンフィギュレータが置かれているディレクトリ名(--cfg-directory)
247 このオプションは不要となったため,廃止した.
248
249・メッセージカタログが置かれているディレクトリ名(--msgcat-directory)
250 Ruby版コンフィギュレータでは,メッセージカタログの機能をサポートし
251 ていないため,このオプションは廃止した.
252
253他にも廃止されたオプションがあるが,ほとんど使われていないと思われるた
254め,ここには記載していない.
255
256
257○ASP1カーネルとのカーネル仕様の違い
258
259この章では,ASP1カーネル向けに記述されたアプリケーションを,ASP3カーネ
260ル上で動作させるために,修正が必
261要となる主な点について説明する.
262
263●時間の単位
264
265ASP3カーネルでは,システム時刻(SYSTIM型),相対時間(RELTIM型),タイ
266ムアウト時間(TMO型)の時間単位を,ミリ秒からマイクロ秒に変更した.その
267ため,これらの時間を記述している定数値を,1000倍した値に書き換えること
268が必
269要である.
270
271●周期ハンドラとアラームハンドラ
272
273ASP3カーネルでは,周期ハンドラ機能とアラームハンドラ機能を拡張し,周期
274通知機能とアラーム通知機能を実装
275している.従来の周期/アラームハンドラ
276と同等の機能は,タイムイベントハンドラの呼出しによる通知で実現できる.
277å…
278·ä½“的には,静的APIを以下の例のように書き換えることが必
279要である.
280
281 *書き換え前
282 CRE_CYC(CYCHDR1, { TA_NULL, 0, cyclic_handler, 2000, 0 });
283 CRE_ALM(ALMHDR1, { TA_NULL, 0, alarm_handler });
284
285 *書き換え後
286 CRE_CYC(CYCHDR1, { TA_NULL, { TNFY_HANDLER, 0, cyclic_handler },
287 2000000, 0 });
288 CRE_ALM(ALMHDR1, { TA_NULL, { TNFY_HANDLER, 0, alarm_handler }});
289
290●タスク例外処理
291
292ASP3カーネルでは,タスク例外処理機能を廃止した.タスク例外処理機能を使
293用していた場合には,他の機能を用いて書き換えることが必
294要である.例えば,
295タスク例外処理で実現していた処理は,独立したタスクで実現する方法が有力
296である.また,タスク例外処理ルーチンの中でタスクを終了させている場合に
297は,タスク終了要求機能を用いて書き換えられる可能性がある.
298
299●メールボックス
300
301ASP3カーネルでは,メールボックスの機能を廃止した.同等の機能は,データ
302キューまたは優å…
303ˆåº¦ãƒ‡ãƒ¼ã‚¿ã‚­ãƒ¥ãƒ¼ã§å®Ÿç¾ã§ãã‚‹ãŸã‚ï¼Œã“れらを用いるように修
304正する必
305要がある.
306
307●その他の違い
308
309その他に,以下の修正が必
310要になる.
311
312・ASP3カーネルでは,静的API ATT_ISRを廃止した.静的API CRE_ISRを用いた
313 記述に修正する必
314要がある.
315
316・ASP3カーネルでは,性能評価用のサービスコール get_utmを廃止した.性能
317 評価目的であれば,高分解能タイマを参ç…
318§ã™ã‚‹ã‚µãƒ¼ãƒ“スコール fch_hrtを用
319 いて代替できる.
320
321・SIZE型をsize_t型に変更する.
322
323・ASP3カーネルでは,待
324ち状æ…
325‹ã«å…
326¥ã‚‹ã™ã¹ã¦ã®ã‚µãƒ¼ãƒ“スコールから,E_RASTER
327 が返る可能性がある.このエラーが返った場合の対策が必
328要である.
329
330
331○μITRON4.0仕様からの移行
332
333この章では,JSPカーネルや他のμITRON4.0仕様準拠のカーネルから,ASP3カー
334ネルに移行するための方法(またはヒント)を説明する.
335
336●データ型と定数の変更
337
338ASP3カーネルでは,μITRON4.0仕様の次のデータ型を廃止している.対応する
339新しいデータ型を用意しているので,単純に置き換えればよい.
340
341 廃止したデータ型 置き換えるデータ型
342 ------------------------------------------
343 B int8_t
344 UB uint8_t
345 VB uint8_t
346 H int16_t
347 UH uint16_t
348 VH uint16_t
349 W int32_t
350 UW uint32_t
351 VW uint32_t
352 D int64_t
353 UD uint64_t
354 VD uint64_t
355 VP void *
356 INT int_t
357 UINT uint_t
358 BOOL bool_t
359 SIZE size_t
360 VP_INT intptr_t
361
362また,定数についても,次の通り置き換える必
363要がある.
364
365 廃止した定数 置き換える定数
366 ------------------------------------------
367 TRUE true
368 FALSE false
369
370なお,μITRON4.0仕様のデータ型と定数を使いたいアプリケーションのために,
371μITRON4.0仕様との互換性を保つためのitron.hを用意しているが,使用するこ
372とは推奨しない.
373
374●オブジェクト属性の変更
375
376ASP3カーネルでは,次のオブジェクト属性は,デフォルト扱いにして廃止して
377いる.
378
379 TA_HLNG 高級言語用インタフェース
380 TA_TFIFO タスクの待
381ち行列をFIFO順に
382 TA_WSGL 待
383ちタスクは1つのみ
384
385これらのオブジェクト属性を指定している場合には,単純に削除すればよい.
386削除したことにより,指定するオブジェクト属性がなくなる場合には,
387TA_NULLを指定する.
388
389なお,μITRON4.0仕様のオブジェクト属性を使いたいアプリケーションのため
390に,μITRON4.0仕様との互換性を保つためのitron.hを用意しているが,使用す
391ることは推奨しない.
392
393●システムコンフィギュレーションファイルの変更
394
395ASP3カーネルでは,システムコンフィギュレーションファイルにおけるC言語プ
396リプロセッサのディレクティブの扱いが変更になっているため,システムコン
397フィギュレーションファイルの変更が必
398要になる.
399
400ASP3カーネルでは,システムコンフィギュレーションファイル中に記述できる
401ディレクティブが,インクルードディレクティブ(#include)と条件ディレク
402ティブ(#if,#ifdefなど)のみとなっている.そのため,システムコンフィギュ
403レーションファイルにマクロ定義ディレクティブ(#define)が含まれている場
404合には,その記述を削除し,必
405要であれば,#includeディレクティブでインク
406ルードするファイル中に移動する必
407要がある.
408
409μITRON4.0仕様に準拠して記述されたシステムコンフィギュレーションファイ
410ル中の#includeディレクティブは,INCLUDEディレクティブに書き換える必
411要が
412ある.INCLUDEディレクティブでインクルードするファイルは,システムコンフィ
413ギュレーションファイルの一部とみなされるため,上記と同じ制限がある.
414
415逆に,μITRON4.0仕様に準拠して記述されたシステムコンフィギュレーション
416ファイル中のINCLUDE静的APIは,#includeディレクティブに書き換える必
417要が
418ある.
419
420●オブジェクトIDの自動割付けへの対応
421
422ASP3カーネルでは,オブジェクトのID番号を自動割付けすることが基本となっ
423ている.ASP3カーネルを用いる際のID番号の管理方法については,「TOPPERS/
424ASP3カーネル ユーザーズマニュアル」の「11.4 オブジェクトIDの管理」の節
425に説明があるので,まずはこれを参ç…
426§ã™ã‚‹ã“と.
427
428従来,ID番号を手動で割り付けており,手動で割り付けていたID番号を変更し
429たくない場合には,コンフィギュレータの持つID番号の割付けをファイルから
430取り込む機能(--id-input-fileオプション)を用いることで,手動で割り付け
431たID番号を用いることができる.この場合に,手動で割り付けたID番号は,コ
432ンフィギュレータが--id-input-fileオプションで取り込むファイル中にのみ記
433述し,アプリケーションのソースプログラムからは,kernel_cfg.hを用いるこ
434とが望ましい.
435
436●ヘッダファイルの変更
437
438μITRON4.0仕様においては,コンフィギュレータが生成する自動割付け結果ヘッ
439ダファイルの名称がkernel_id.hであったが,ASP3カーネルでは,
440kernel_cfg.hに変更になっている(kernel_cfg.hの方が含まれる定義が多い).
441kernel_id.hをインクルードしていたアプリケーションは,kernel_cfg.hをイン
442クルードするように変更する.
443
444●sta_tskの置き換え
445
446ASP3カーネルでは,タスクを起動するサービスコールとしてact_tskをサポート
447しており,sta_tskをサポートしていない.act_tskとsta_tskの機能を比較した
448場合,前者
449はタスク起動のキューイング機能を持つのに対して,後者
450はタスク
451に起動コードを渡す機能を持つ.そのため,sta_tskをact_tskに置き換える場
452合に,起動コードを渡す機能をどのように実現するかが問題となる.
453
454起動コードを渡す機能を最も簡単に代用する方法は,起動コードを渡すための
455データキューを用意する方法である.タスクを起動する処理単位は,データ
456キューに起動コードを送信した後,act_tskによりタスクを起動する.起動され
457たタスクは,データキューから起動コードを受信する.
458
459タスク起動のキューイングが起こらないことが保証できる,言い換えると,タ
460スクを起動する時には,対象タスクは休止状æ…
461‹ã«ã‚ることが保証できる場合に
462は,起動コードをグローバル変数に置いて渡す方法もある.タスクを起動する
463処理単位がそのグローバル変数に書くのは,タスクが休止状æ…
464‹ã®é–“に限られ,
465起動されたタスクがそのグローバル変数を読むのは,タスクが実行できる状æ…
466‹
467の間に限られるため,グローバル変数に対する排他制御は必
468要ない.
469
470●周期ハンドラの非互換性
471
472TA_PHS属性でない周期ハンドラにおいて,sta_cycを呼び出した後,最初に周期
473ハンドラが起動される時刻が,μITRON4.0仕様では,sta_cycを呼び出してから
474周期ハンドラの起動周期(cyctim)で指定した相対時間後となっていたが,
475ASP3カーネルでは,起動位相(cycphs)で指定した相対時間後となっている.
476
477CRE_CYCにおいて,TA_STA属性を指定しない場合には,cycphsにcyctimと同じ値
478を指定することで,μITRON4.0仕様と同じ振舞いとなる(μITRON4.0仕様では,
479TA_STA属性とTA_PHS属性のいずれも指定しない場合には,cycphsは意味を持た
480ない).
481
482TA_STA属性を指定する場合には,カーネルの起動後,最初に周期ハンドラが起
483動されるまでの相対時間と,sta_cycを呼び出してから最初に周期ハンドラが起
484動されるまでの相対時間が同一でよければ,その時間をcycphsに指定すればよ
485い.両者
486が同一では不都合な場合には,μITRON4.0仕様と同じ振舞いをさせる
487ことはできない.代替手段としては,以下の2つが考えられる.
488
489(1) TA_STA属性を使用せず,カーネルの起動後適切なタイミングでsta_cycを呼
490び出すことで,周期ハンドラを動作開始する.
491
492(2) 周期ハンドラを2つ用いる.1つをTA_STA属性とし,sta_cycで動作を制御す
493るのをもう片方の周期ハンドラとする.
494
495●動的メモリ管理の実現
496
497ASP3カーネルでは,動的メモリ管理は,カーネル内
498で実現するよりライブラリ
499として実現する方が適切と考え,可変長メモリプールをサポートしていない.
500しかし,アプリケーションが動的メモリ管理(malloc/free)を用いる場合に,
501その実現に可変長メモリプールが用いられることがあり,可変長メモリプール
502がサポートされていないことが問題となる場合がある.
503
504そこで,ここでは,アプリケーションが用いるmalloc/freeを,オープンソー
505スのメモリ割付けライブラリであるTLSFを用いて実現する方法について述べる.
506
507TLSFは,リアルタイムシステム向けの効率的なメモリ割付けライブラリである.
508TLSFのライセンス条件は,GPLとLGPLのデュアルライセンスであるが,TLSFを通
509常のライブラリとして用いて実装
510されたプログラムは,TLSFの派生物とは見な
511されず,GPLが適用されないことが明記されている.
512
513TLSFは,以下のウェブサイトからダウンロードすることができる.
514
515 http://www.gii.upv.es/tlsf/
516
517TLSF(動作確認は,Version 2.4.6)のアーカイブの中から,tlsf.hとtlsf.cを,
518アプリケーションまたはライブラリのソースファイルの置かれたディレクトリ
519にコピーする.
520
521tlsf.hは動的メモリ管理を用いるアプリケーションからインクルードすべきヘッ
522ダファイル,tlsf.cは動的メモリ管理ライブラリの本体である.tlsf.cには以
523下のようなパッチをあてる.
524
525----------------------------------------
526*** tlsf.c.orig Wed Sep 16 16:40:39 2009
527--- tlsf.c Wed Sep 16 16:45:10 2009
528***************
529*** 76,82 ****
530
531
532 #if TLSF_USE_LOCKS
533! #include "target.h"
534 #else
535 #define TLSF_CREATE_LOCK(_unused_) do{}while(0)
536 #define TLSF_DESTROY_LOCK(_unused_) do{}while(0)
537--- 76,88 ----
538
539
540 #if TLSF_USE_LOCKS
541! #include "kernel.h"
542! #include "kernel_cfg.h"
543! #define TLSF_MLOCK_T ID
544! #define TLSF_CREATE_LOCK(lock) (*lock = TLSF_MTX)
545! #define TLSF_DESTROY_LOCK(lock) ini_mtx(*lock)
546! #define TLSF_ACQUIRE_LOCK(lock) loc_mtx(*lock)
547! #define TLSF_RELEASE_LOCK(lock) unl_mtx(*lock)
548 #else
549 #define TLSF_CREATE_LOCK(_unused_) do{}while(0)
550 #define TLSF_DESTROY_LOCK(_unused_) do{}while(0)
551***************
552*** 169,176 ****
553
554 #ifdef USE_PRINTF
555 #include <stdio.h>
556! # define PRINT_MSG(fmt, args...) printf(fmt, ## args)
557! # define ERROR_MSG(fmt, args...) printf(fmt, ## args)
558 #else
559 # if !defined(PRINT_MSG)
560 # define PRINT_MSG(fmt, args...)
561--- 175,184 ----
562
563 #ifdef USE_PRINTF
564 #include <stdio.h>
565! #include <t_stddef.h>
566! #include <t_syslog.h>
567! # define PRINT_MSG(fmt, args...) syslog(LOG_ERROR, fmt, ## args)
568! # define ERROR_MSG(fmt, args...) syslog(LOG_ERROR, fmt, ## args)
569 #else
570 # if !defined(PRINT_MSG)
571 # define PRINT_MSG(fmt, args...)
572----------------------------------------
573
574このパッチは,tlsf.cに以下の修正を加えている.
575
576・PRINT_MSGおよびERROR_MSGを,syslogを用いるように変更する.
577・タスク間の排他を,ミューテックスを用いて行う.
578
579malloc/freeを複数のタスクから呼び出す場合には,コンパイルオプションに
580-DTLSF_USE_LOCKSを追加し,システムコンフィギュレーションファイルに次の
581ような記述を追加する(ミューテックスの属性は変更してもよい).
582
583----------------------------------------
584CRE_MTX(TLSF_MTX, { TA_TPRI, 0 });
585----------------------------------------
586
587TLSFを使用するプログラムでは,メモリプールの領域をé…
588åˆ—として確保する
589(下の例は,メモリプールのために10KBの領域を確保している).
590
591----------------------------------------
592#define MEMORY_POOL_SIZE (TOPPERS_ROUND_SZ(10*1024, sizeof(intptr_t))
593 /* 10*1024の部分は,適切なサイズに変更する */
594intptr_t memory_pool[MEMORY_POOL_SIZE / sizeof(intptr_t)];
595----------------------------------------
596
597次にメモリプールの初期化を行う.
598
599----------------------------------------
600 init_memory_pool(MEMORY_POOL_SIZE, memory_pool);
601----------------------------------------
602
603以上により,tlsf_malloc/tlsf_freeで,malloc/freeが実現できる.
604
605なお,TLSFは,複数のメモリプールを用いる機能や,メモリプールのサイズを
606拡張する機能を持つ.詳しくは,TLSFのアーカイブ中のREADMEを参ç…
607§ã™ã‚‹ã“と.
608
609以上
Note: See TracBrowser for help on using the repository browser.