(toppers-etrobo 51) Re: EV3の動的ローディング時におけるイベントフラグの利用について

YIXIAO LI liyixiao7 @ gmail.com
2015年 12月 14日 (月) 16:00:24 JST


山本様

李です。

SAC_FLGの件についてですが、山本様の書き方は正しいです。
但し、動的ローディングの場合、SAC_FLG等アクセス権を手動
で設定する静的APIが使えないのは現時点の仕様です。

SAC_yyy系のAPIは複数の保護ドメインを持つアプリケーション
の開発には有用な機能ですが、動的ローディングのアプリ開発
には一つの専用保護ドメイン(TDOM_APP)しか使えないとい
う制限があります。そのため、SAC_yyyを使ってもあまり意味が
ないと判断しましたので、動的ローディングモードにはこれらのAPI
を非対応機能にしました。

以上、どうぞよろしくお願い致します。

李 奕驍(リ エキギョウ)


2015年12月10日 8:31 Eiichiro Yamamoto (Nifty) <eiyama-h @ nifty.com>:
> 李様
>
> ご対応ありがとうございました.
> EV3RT Beta 5-2にて,イベントフラグを使った当方のプログラムを
> 動作させたところ,問題なく動きました.
>
> 今までTOPPERS/JSPで動かしていたプログラムをTOPPERS/EV3RTで
> 動かすのには,多分,これで問題ないだろうと思います.
>
> また,分からないことがあれば,相談させていただきますので,よろ
> しくお願いします.
>
>
> ところで,当面は,問題ないのですが,前回の質問の際に書きました
> 2番目の件,
>
>> そこで,次のように,コンフィギュレーション・ファイルにSAC_FLGを入れて,アクセス許可ベクターを設定してみようとしました.
>>
>> この場合は,makeの時点で,E_NOEXSのエラーが出てしまいます(こちらも,スタンドアローンであれば,makeできます).
>
>
> は,やはり同じエラーが出ます.
> こちらは,同一のコンフィギュレーション・ファイルで,CRE_FLGとSAC_FLG
> を定義しては,まずいということでしょうか.あるいは,SAC_FLGのほうの
> イベントフラグの識別名(識別番号)の書き方に,何か特別な方法(頭に
> 制御記号を付けるとか)が必要なのでしょうか.
> こちらは,とくに急ぐわけではありませんが,ご教示いただけると,今後の
> 参考になります.よろしくお願いします.
>
>
> 山本栄一郎
>
> -----Original Message----- From: YIXIAO LI
> Sent: Wednesday, December 9, 2015 3:27 PM
> To: Eiichiro Yamamoto (Nifty) ; etrobo @ toppers.jp
> Subject: (toppers-etrobo 49) Re:EV3の動的ローディング時におけるイベントフラグの利用について
>
> 山本様
>
> 初めまして、EV3RTの開発者の李と申します。
> 返信が大変遅くなり、申し訳ありません。
>
> 動的ローディング時のイベントフラグの動作について調査を行いました。
> ご指摘の通り、イベントフラグに対するアクセス権が正しく設定されていないというバグがありました。
>
> このバグを修正したバージョンEV3RT Beta 5-2が公開されました。
> お手数をお掛けしてすみませんが、Beta 5-2をダウンロードして、動作確認をお願いいたします。
>
> 以上、どうぞ宜しくお願い致します。
>
> 李 奕驍(リ エキギョウ)
>
> 2015年12月1日 10:07 Eiichiro Yamamoto (Nifty) <eiyama-h @ nifty.com>:
>>
>> 初めてメールします.山本と申します.
>>
>> ここ数年,NXT上のTOPPERS/JSPを活用して,マルチタスクの動きなどを実習を通じて教えてきました.TOPPERS/JSPのような手軽なOSが使えたことで,教育用として,とても有効だったと考えています.ありがとうございました.
>>
>>
>> さて,NXTが製造中止になったので,EV3への移行を検討しており,TOPPERS/JSPで動作させていたプログラムは,TOPPERS/EV3RTのスタンドアローンでは,ほぼ同等に動作することを確認しました.
>>
>> しかし,受講者がプログラムをデバッグする際の容易性を考えれば,動的ローディングのほうが良いだろうと思い,同じシステムを動的ローディングで動かそうとしたのですが,うまく動きません.
>>
>> 簡単に説明しますと,イベントフラグで同期をさせながら,マルチタスクで動作させようというものです.
>>
>> コンフィギュレーション・ファイルは,次のようになっています.
>> ==========
>> INCLUDE("app_common.cfg");
>>
>> #include "app.h"
>> #include "testsensor.h"
>>
>> DOMAIN(TDOM_APP) {
>>
>> /* 周期ハンドラの定義 */
>> EV3_CRE_CYC(CYC0, { TA_STA, 0, cyc0, 500, 0});
>> EV3_CRE_CYC(CYC1, { TA_STA, 0, cyc1, 50, 0});
>>
>> /*  タスクの定義 */
>> CRE_TSK(TSK_MAIN, { TA_ACT, 0, main_task, TMIN_APP_TPRI + 1, STACK_SIZE,
>> NULL });
>> CRE_TSK(TSK_LIGHT, { TA_NULL, 0, light_sense, TMIN_APP_TPRI + 3,
>> STACK_SIZE,
>> NULL });
>> CRE_TSK(TSK_TOUCH, { TA_NULL, 0, touch_sense, TMIN_APP_TPRI + 2,
>> STACK_SIZE,
>> NULL });
>>
>> /* イベントフラグの定義 */
>> CRE_FLG(EVT_FLGID, { TA_CLR, 0});
>>
>> }
>>
>> ATT_MOD("app.o");
>> ATT_MOD("testsensor.o");
>> ATT_MOD("Sensor.o");
>> ATT_MOD("TouchSensor.o");
>> ATT_MOD("LightSensor.o");
>> ==========
>>
>> これで実行させると,スタンドアローンの場合は,問題なく動作するのですが,動的ローディングにすると,イベントフラグに関する動作をさせるところ(wai_flgおよびset_flg)で,エラーコード-27(E_OACV)のエラーが出ます.
>>
>> そこで,次のように,コンフィギュレーション・ファイルにSAC_FLGを入れて,アクセス許可ベクターを設定してみようとしました.
>> ==========
>> INCLUDE("app_common.cfg");
>>
>> #include "app.h"
>> #include "testsensor.h"
>>
>> DOMAIN(TDOM_APP) {
>>
>> /* 周期ハンドラの定義 */
>> EV3_CRE_CYC(CYC0, { TA_STA, 0, cyc0, 500, 0});
>> EV3_CRE_CYC(CYC1, { TA_STA, 0, cyc1, 50, 0});
>>
>> /*  タスクの定義 */
>> CRE_TSK(TSK_MAIN, { TA_ACT, 0, main_task, TMIN_APP_TPRI + 1, STACK_SIZE,
>> NULL });
>> CRE_TSK(TSK_LIGHT, { TA_NULL, 0, light_sense, TMIN_APP_TPRI + 3,
>> STACK_SIZE,
>> NULL });
>> CRE_TSK(TSK_TOUCH, { TA_NULL, 0, touch_sense, TMIN_APP_TPRI + 2,
>> STACK_SIZE,
>> NULL });
>>
>> /* イベントフラグの定義 */
>> CRE_FLG(EVT_FLGID, { TA_CLR, 0});
>>
>> /* アクセス許可ベクタの設定 */
>> SAC_FLG(EVT_FLGID, {TACP_SHARED, TACP_SHARED, TACP_KERNEL, TACP_SHARED});
>>
>> }
>>
>> ATT_MOD("app.o");
>> ATT_MOD("testsensor.o");
>> ATT_MOD("Sensor.o");
>> ATT_MOD("TouchSensor.o");
>> ATT_MOD("LightSensor.o");
>> ==========
>> この場合は,makeの時点で,E_NOEXSのエラーが出てしまいます(こちらも,スタンドアローンであれば,makeできます).
>>
>> 公開されている仕様書等には,目を通したつもりなのですが,どこか見落としがあるのかもしれません.
>> どこに問題がありそうなのか,御教示いただければ幸いです.
>> よろしくお願いします.
>
>