Descargar
Desarrollar
Cuenta
Descargar
Desarrollar
Entrar
Forgot Account/Password
Crear Cuenta
Idioma
Ayuda
Idioma
Ayuda
×
Entrar
Nombre de usuario
Contraseña
×
Forgot Account/Password
Translation Status of Español
Categoría:
Software
Gente
PersonalForge
Magazine
Wiki
Buscar
OSDN
>
Buscar Software
>
System
>
Operating System Kernels
>
Hyper Operating System(ITRON仕様OS)
>
Foros
>
Ayuda
>
割込サービスルーチン内でのイベントフラグのセットについて
Hyper Operating System(ITRON仕様OS)
Fork
Descripción
Project Summary
Developer Dashboard
Página Web
Developers
Image Gallery
List of RSS Feeds
Activity
Statistics
Historial
Descargas
List of Releases
Stats
Código Fuente
Code Repository list
Git
hos-v4a
CVS
Ver Repositorio
Incidencia
Ticket List
Milestone List
Type List
Component List
List of frequently used tickets/RSS
Submit New Ticket
Documents
Communication
Foros
List of Forums
Developers (761)
Ayuda (688)
Open Discussion (342)
Mailing Lists
list of ML
hos-cvs
hos-git
Noticias
Foros:
Ayuda
(Thread #30195)
Return to Thread list
RSS
割込サービスルーチン内でのイベントフラグのセットについて (2011-08-24 17:04 by
easygo
#59256)
Responder
Crear incidencia
いつもお世話になっております。(V850ESで利用させて頂いております)
イベントフラグ待ち(wai_flg)で休止させているタスクを
割込サービスルーチン内からイベントフラグセット(iset_flg)により起床させようとしています。
タスクは正常に起床するのですが
このタスクが実行中の間は全ての割り込みを受け付けなくなってしまいました。
(各種割込サービスルーチン、周期ハンドラが呼び出されません)
色々試したところ、タスクが起床した直後にdly_tsk(0)を実行すると
上記の現象が発生しなくなりました。
根本的な原因を探りたいと思っておりますが、皆様のお知恵をお借りできると幸いです。
Responder al #59256
×
Sujeto
Body
Reply To Message #59256 > いつもお世話になっております。(V850ESで利用させて頂いております) > > イベントフラグ待ち(wai_flg)で休止させているタスクを > 割込サービスルーチン内からイベントフラグセット(iset_flg)により起床させようとしています。 > > タスクは正常に起床するのですが > このタスクが実行中の間は全ての割り込みを受け付けなくなってしまいました。 > (各種割込サービスルーチン、周期ハンドラが呼び出されません) > > 色々試したところ、タスクが起床した直後にdly_tsk(0)を実行すると > 上記の現象が発生しなくなりました。 > > 根本的な原因を探りたいと思っておりますが、皆様のお知恵をお借りできると幸いです。
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
Entrar
Nickname
Vista previa
Post
Cancelar
RE: 割込サービスルーチン内でのイベントフラグのセットについて (2011-08-25 09:14 by
easygo
#59267)
Responder
Crear incidencia
追加情報ですが、下記の様に割込ハンドラを抜ける前にタスクが起床してしまっているようです。
『割込ハンドラ開始→割込サービスルーチン実行→タスク起床→タスク休止→割込ハンドラ終了』
上記の動作ですと、割込ハンドラがタスクが休止するまで終了できない為
その間(タスク実行中)の割込が受け付けられなくなってしまいます。
>色々試したところ、タスクが起床した直後にdly_tsk(0)を実行すると
>上記の現象が発生しなくなりました。
上記はdly_tskを実行することで割込ハンドラが終了した為と思われます。
割込サービスルーチン内でタスクを起床させるサービスコールを発行させた場合
タスクが起床するタイミングは割込ハンドラ終了後であるのが正常でしょうか?
ちなみに周期ハンドラから上記とは別のタスクをiwup_tskで起床させていますが
こちらについては、割込ハンドラ終了後にタスクが起床しています。
Responder al
#59256
Responder al #59267
×
Sujeto
Body
Reply To Message #59267 > 追加情報ですが、下記の様に割込ハンドラを抜ける前にタスクが起床してしまっているようです。 > > 『割込ハンドラ開始→割込サービスルーチン実行→タスク起床→タスク休止→割込ハンドラ終了』 > > 上記の動作ですと、割込ハンドラがタスクが休止するまで終了できない為 > その間(タスク実行中)の割込が受け付けられなくなってしまいます。 > > >色々試したところ、タスクが起床した直後にdly_tsk(0)を実行すると > >上記の現象が発生しなくなりました。 > > 上記はdly_tskを実行することで割込ハンドラが終了した為と思われます。 > > > 割込サービスルーチン内でタスクを起床させるサービスコールを発行させた場合 > タスクが起床するタイミングは割込ハンドラ終了後であるのが正常でしょうか? > > ちなみに周期ハンドラから上記とは別のタスクをiwup_tskで起床させていますが > こちらについては、割込ハンドラ終了後にタスクが起床しています。
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
Entrar
Nickname
Vista previa
Post
Cancelar
RE: 割込サービスルーチン内でのイベントフラグのセットについて (2011-08-26 00:06 by
ryuz
#59276)
Responder
Crear incidencia
お世話になります。Ryuzです。
V850ESについては触ったことがないのですが、とりあえずコメントいたします。
まず、お使いのバージョンですが HOS-V4 Ver 1.02 でよろしいでしょうか?
症状から察するに、本来割り込み終了まで遅延されるべきコンテキストスイッチが割り込みサービスルーチンの中で発行されているように思われます。
HOSの場合、割り込みコンテキストであることをOS側が知るために、割り込み開始時にOS内部のフラグを立てる仕組みになっているのですが、うまく状態遷移できていないように思われます。その周辺は移植時にプロセッサ毎にやり方が変わってくるために一概に原因が特定できません。
たとえばHOSの仕組みを使わずに、自分で割り込みベクタからハンドラに飛ばしてしまったりした場合も上記のような症状が予想されますが、そのあたりいかがでしょうか?
V850ES有識者の回答を期待したいところですが、取り急ぎ以上よろしくお願いいたします。
Responder al
#59267
Responder al #59276
×
Sujeto
Body
Reply To Message #59276 > お世話になります。Ryuzです。 > > V850ESについては触ったことがないのですが、とりあえずコメントいたします。 > > まず、お使いのバージョンですが HOS-V4 Ver 1.02 でよろしいでしょうか? > > 症状から察するに、本来割り込み終了まで遅延されるべきコンテキストスイッチが割り込みサービスルーチンの中で発行されているように思われます。 > > HOSの場合、割り込みコンテキストであることをOS側が知るために、割り込み開始時にOS内部のフラグを立てる仕組みになっているのですが、うまく状態遷移できていないように思われます。その周辺は移植時にプロセッサ毎にやり方が変わってくるために一概に原因が特定できません。 > > たとえばHOSの仕組みを使わずに、自分で割り込みベクタからハンドラに飛ばしてしまったりした場合も上記のような症状が予想されますが、そのあたりいかがでしょうか? > > V850ES有識者の回答を期待したいところですが、取り急ぎ以上よろしくお願いいたします。
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
Entrar
Nickname
Vista previa
Post
Cancelar
RE: 割込サービスルーチン内でのイベントフラグのセットについて (2011-08-26 00:27 by
ryuz
#59277)
Responder
Crear incidencia
お世話になります Ryuzです。
V850のコードを少し眺めているところです。
簡単ですが分かる範囲でコメントします。
まず、V850用の src\v850es\v850es_ca850\pacctx.S の
22行目から割り込みハンドラが始まっています。
37行目の _kernel_sta_int が割り込み開始に先立って
実行され、その内部でマクロ関数 mknl_sta_ind() にて
mknl_ctx_stat |= MKNL_TSS_INDP;
が実行されます。
mknl_ctx_stat が現在のコンテキスト状態を表す変数で、
ここで非タスク部としてマークされます。
この状態で set_flg などを実行すると、たとえタスクスイッチが
必要な状態になってもすぐにはスイッチせずに保留されます。
(mexe_dsp.cの24行目参照)
保留されたディスパッチは、割り込みを抜けるとき
(pacctx.Sの46行目)に、_kernel_end_int が呼び出されて
コンテキスト状態をタスクに戻した上で、改めて実施されます。
ご質問の件では、この流れがどこかで狂ってしまって
いるように思えます。
もし可能であれば、実行されている順序とともに mknl_ctx_stat
の変化なども合わせて見て頂けると解決の糸口になるかもしれません。
mknl_ctx_stat の bit 定義は mknl.h の 31行目からあります。
以上、ご参考になれば幸いです。
Responder al
#59276
Responder al #59277
×
Sujeto
Body
Reply To Message #59277 > お世話になります Ryuzです。 > > V850のコードを少し眺めているところです。 > 簡単ですが分かる範囲でコメントします。 > > まず、V850用の src\v850es\v850es_ca850\pacctx.S の > 22行目から割り込みハンドラが始まっています。 > 37行目の _kernel_sta_int が割り込み開始に先立って > 実行され、その内部でマクロ関数 mknl_sta_ind() にて > mknl_ctx_stat |= MKNL_TSS_INDP; > が実行されます。 > mknl_ctx_stat が現在のコンテキスト状態を表す変数で、 > ここで非タスク部としてマークされます。 > > この状態で set_flg などを実行すると、たとえタスクスイッチが > 必要な状態になってもすぐにはスイッチせずに保留されます。 > (mexe_dsp.cの24行目参照) > > 保留されたディスパッチは、割り込みを抜けるとき > (pacctx.Sの46行目)に、_kernel_end_int が呼び出されて > コンテキスト状態をタスクに戻した上で、改めて実施されます。 > > ご質問の件では、この流れがどこかで狂ってしまって > いるように思えます。 > > もし可能であれば、実行されている順序とともに mknl_ctx_stat > の変化なども合わせて見て頂けると解決の糸口になるかもしれません。 > > mknl_ctx_stat の bit 定義は mknl.h の 31行目からあります。 > > 以上、ご参考になれば幸いです。 >
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
Entrar
Nickname
Vista previa
Post
Cancelar
RE: 割込サービスルーチン内でのイベントフラグのセットについて (2011-08-26 07:39 by
easygo
#59283)
Responder
Crear incidencia
Ryuz様、コメントありがとうございます。
まずバージョンについてですが、HOS-V4 Ver 1.02を使用しております。
>保留されたディスパッチは、割り込みを抜けるとき
> (pacctx.Sの46行目)に、_kernel_end_int が呼び出されて
> コンテキスト状態をタスクに戻した上で、改めて実施されます。
割込ハンドラの動作をトレースしてみたところ
_kernel_end_int内(正確には内部で呼び出されたmknl_exe_dspを抜ける際)で
タスクが起床されており、Ryuz様のご説明通りの動作となっておりました。
また、先のコメントで
>ちなみに周期ハンドラから上記とは別のタスクをiwup_tskで起床させていますが
>こちらについては、割込ハンドラ終了後にタスクが起床しています。
と書きましたが、再度確認したところ
周期ハンドラからiwup_tskでタスクを起床させた場合も同様で
割込ハンドラ終了前に(_kernel_end_int内で)タスクが起床されていました。
割込ハンドラの終了時(reti実行後)にタスクスイッチが行われると期待していましたが
私の認識に誤りがあったようです。大変申し訳ありません。
初歩的な質問で大変恐縮ですが
周期ハンドラや割込サービスルーチンから起床させたタスクを実行中は
その割込レベル以下の割込発生を抑制してしまうということになるのでしょうか?
以上、よろしくお願いいたします。
Responder al
#59256
Responder al #59283
×
Sujeto
Body
Reply To Message #59283 > Ryuz様、コメントありがとうございます。 > > まずバージョンについてですが、HOS-V4 Ver 1.02を使用しております。 > > >保留されたディスパッチは、割り込みを抜けるとき > > (pacctx.Sの46行目)に、_kernel_end_int が呼び出されて > > コンテキスト状態をタスクに戻した上で、改めて実施されます。 > > 割込ハンドラの動作をトレースしてみたところ > _kernel_end_int内(正確には内部で呼び出されたmknl_exe_dspを抜ける際)で > タスクが起床されており、Ryuz様のご説明通りの動作となっておりました。 > > また、先のコメントで > >ちなみに周期ハンドラから上記とは別のタスクをiwup_tskで起床させていますが > >こちらについては、割込ハンドラ終了後にタスクが起床しています。 > と書きましたが、再度確認したところ > 周期ハンドラからiwup_tskでタスクを起床させた場合も同様で > 割込ハンドラ終了前に(_kernel_end_int内で)タスクが起床されていました。 > > 割込ハンドラの終了時(reti実行後)にタスクスイッチが行われると期待していましたが > 私の認識に誤りがあったようです。大変申し訳ありません。 > > 初歩的な質問で大変恐縮ですが > 周期ハンドラや割込サービスルーチンから起床させたタスクを実行中は > その割込レベル以下の割込発生を抑制してしまうということになるのでしょうか? > > 以上、よろしくお願いいたします。
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
Entrar
Nickname
Vista previa
Post
Cancelar
RE: 割込サービスルーチン内でのイベントフラグのセットについて (2011-08-26 09:15 by
n-okada
#59284)
Responder
Crear incidencia
V850ESに移植を行った、おかだです。
返信が遅れまして申し訳ございません。
既に Ryuz 様からコメントがありますが、補足と確認をさせていただければと思い書かせていただきました。
ソースですが、HOS4v102ではなく、最新の tarball ですね?(別スレッドでご質問いただいた件)
多重割り込みを可能にしたコードに仕上げて、sample/ostimer.c でテストコードを記載してますが、うまく動作できていないようで、申し訳ございません。
sample/ostimer.c にてタイマ割込みレベルostim_init()関数にて設定していますので、いちど、
割込みレベルを下げて(7が一番割込みレベルが低い)設定頂けませんか?
(現在、出張中につき開発環境がないため、テストできず申し訳ございません)
(差し支えなければ、ご利用いただいているMCUなどの情報を頂けると、より詳細にコメントできるかもしれません。)
以上です。
Responder al
#59283
Responder al #59284
×
Sujeto
Body
Reply To Message #59284 > V850ESに移植を行った、おかだです。 > 返信が遅れまして申し訳ございません。 > > 既に Ryuz 様からコメントがありますが、補足と確認をさせていただければと思い書かせていただきました。 > > ソースですが、HOS4v102ではなく、最新の tarball ですね?(別スレッドでご質問いただいた件) > 多重割り込みを可能にしたコードに仕上げて、sample/ostimer.c でテストコードを記載してますが、うまく動作できていないようで、申し訳ございません。 > > sample/ostimer.c にてタイマ割込みレベルostim_init()関数にて設定していますので、いちど、 > 割込みレベルを下げて(7が一番割込みレベルが低い)設定頂けませんか? > (現在、出張中につき開発環境がないため、テストできず申し訳ございません) > (差し支えなければ、ご利用いただいているMCUなどの情報を頂けると、より詳細にコメントできるかもしれません。) > > 以上です。
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
Entrar
Nickname
Vista previa
Post
Cancelar
RE: 割込サービスルーチン内でのイベントフラグのセットについて (2011-08-26 20:08 by
easygo
#59290)
Responder
Crear incidencia
岡田様、お世話になります。
ソースファイルを再度確認しましたが最新のtarballと同一の物を使用しています。
割り込みハンドラの出口処理にて遅延ディスパッチされておりましたので正常な動作と思います。
(タスクスイッチのタイミングを私が誤って認識していたことが間違いの始まりでした。)
Ryuz様、岡田様、貴重なお時間を割いていただき申し訳ありませんでした。
Responder al
#59256
Responder al #59290
×
Sujeto
Body
Reply To Message #59290 > 岡田様、お世話になります。 > > ソースファイルを再度確認しましたが最新のtarballと同一の物を使用しています。 > > 割り込みハンドラの出口処理にて遅延ディスパッチされておりましたので正常な動作と思います。 > (タスクスイッチのタイミングを私が誤って認識していたことが間違いの始まりでした。) > > Ryuz様、岡田様、貴重なお時間を割いていただき申し訳ありませんでした。
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
Entrar
Nickname
Vista previa
Post
Cancelar