Download
Magazine
Develop
Account
Download
Magazine
Develop
Login
Forgot Account/Password
Create Account
Language
Help
Language
Help
×
Login
Login Name
Password
×
Forgot Account/Password
Category:
Software
People
PersonalForge
Magazine
Wiki
Search
OSDN
>
Find Software
>
System
>
Operating System Kernels
>
Hyper Operating System(ITRON仕様OS)
>
Forums
>
Help
>
dly_tsk() で mknl_idl_loop() にディスパッチされてコケる?
Hyper Operating System(ITRON仕様OS)
Fork
Description
Project Summary
Developer Dashboard
Web Page
Developers
Image Gallery
List of RSS Feeds
Activity
Statistics
History
Downloads
List of Releases
Stats
Source Code
Code Repository list
Git
hos-v4a
CVS
View Repository
Ticket
Ticket List
Milestone List
Type List
Component List
List of frequently used tickets/RSS
Submit New Ticket
Documents
Communication
Forums
List of Forums
Developers (758)
Help (688)
Open Discussion (342)
Mailing Lists
list of ML
hos-cvs
hos-git
News
Forums:
Help
(Thread #13392)
Return to Thread list
RSS
dly_tsk() で mknl_idl_loop() にディスパッチされてコケる? (2007-01-12 23:49 by
Anonymous
#27085)
Reply
Create ticket
こんにちは。
HOSで次のような症状に見舞われていて、悩み始めているところです。
もし似た症状の方や情報をお持ちの方いらっしゃいませんでしょうか?
(1) 実行中のタスクから dly_tsk(); をコール
(2) 直後に、ディスパッチが発生し mknl_exe_dsp() がコールされる。
(3) このとき運悪く、実行可能状態 READY が存在しないことで、実行可能タスクが見つからなかったら mknl_idl_loop() がコールされアイドルループに入ります。
(4) このアイドルループにある、mknl_unl_sys() で割り込みロックなどが解除された直後くらい (つまり、割り込みが解除された後で、再び割り込みが入るなどしたとき) にメモリ を一部壊している? ようで動作不良に陥る。
[ターゲットCPU] ARM (ARM7TDMI) ベースのカスタム品
[開発環境]は GCC 4.0.2 (GNUARM) + Cygwin 環境です。
独自なCPU + 社内で設計したボード という怪しい環境でやってますため、少々細かい情報が出しにくい状況ですが、何か情報をお持ち、または似た現象の人はいらっしゃいませんでしょうか?
<参考ソース>
ソースコードとしては 次のような大変シンプルなものです。
---------------------------------------------
CRE_TSK(1,{TA_HLNG|TA_ACT,0,task1,1,0x2000,NULL});
---------------------------------------------
int main(){
sta_hos();
}
void task1(VP_INT exinf)
{
initMyTimer()
ena_int( MyTimerVECTOR );
for(;;){
dly_tsk(12345); // ←コールされた直後に症状発生。
}
}
---------------------------------------------
Reply to #27085
×
Subject
Body
Reply To Message #27085 > こんにちは。 > HOSで次のような症状に見舞われていて、悩み始めているところです。 > もし似た症状の方や情報をお持ちの方いらっしゃいませんでしょうか? > > (1) 実行中のタスクから dly_tsk(); をコール > (2) 直後に、ディスパッチが発生し mknl_exe_dsp() がコールされる。 > (3) このとき運悪く、実行可能状態 READY が存在しないことで、実行可能タスクが見つからなかったら mknl_idl_loop() がコールされアイドルループに入ります。 > (4) このアイドルループにある、mknl_unl_sys() で割り込みロックなどが解除された直後くらい (つまり、割り込みが解除された後で、再び割り込みが入るなどしたとき) にメモリ を一部壊している? ようで動作不良に陥る。 > > [ターゲットCPU] ARM (ARM7TDMI) ベースのカスタム品 > [開発環境]は GCC 4.0.2 (GNUARM) + Cygwin 環境です。 > 独自なCPU + 社内で設計したボード という怪しい環境でやってますため、少々細かい情報が出しにくい状況ですが、何か情報をお持ち、または似た現象の人はいらっしゃいませんでしょうか? > > > <参考ソース> > ソースコードとしては 次のような大変シンプルなものです。 > > --------------------------------------------- > CRE_TSK(1,{TA_HLNG|TA_ACT,0,task1,1,0x2000,NULL}); > --------------------------------------------- > int main(){ > sta_hos(); > } > > void task1(VP_INT exinf) > { > initMyTimer() > ena_int( MyTimerVECTOR ); > for(;;){ > dly_tsk(12345); // ←コールされた直後に症状発生。 > } > } > ---------------------------------------------
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.)
Login
Nickname
Preview
Post
Cancel
RE: dly_tsk() で mknl_idl_loop() にディスパッチされてコケる (2007-01-14 15:17 by
ryuz
#27107)
Reply
Create ticket
お世話になります。Ryuzと申します。
ARM環境が手元にないので追試できないのですが、メモリ破壊とのことですので、コンフィギュレータの HOS_IDL_STK や HOS_INT_STK で、アイドルタスクや割込みコンテキストのスタックを増やしてみていただけないでしょうか。
ARMは実装ごとに割込みコントローラのアーキテクチャが変わってきますので対応状況もあまりよくない状況です。FIQのことはほとんど考慮してませんし...
よろしくお願いいたします。
Reply to
#27085
Reply to #27107
×
Subject
Body
Reply To Message #27107 > お世話になります。Ryuzと申します。 > > ARM環境が手元にないので追試できないのですが、メモリ破壊とのことですので、コンフィギュレータの HOS_IDL_STK や HOS_INT_STK で、アイドルタスクや割込みコンテキストのスタックを増やしてみていただけないでしょうか。 > > ARMは実装ごとに割込みコントローラのアーキテクチャが変わってきますので対応状況もあまりよくない状況です。FIQのことはほとんど考慮してませんし... > > よろしくお願いいたします。
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.)
Login
Nickname
Preview
Post
Cancel
RE: dly_tsk() で mknl_idl_loop() にディスパッチされてコケる (2007-01-15 11:00 by
Anonymous
#27120)
Reply
Create ticket
ryuz さん(いや ryuz 先生) ありがとうございます。
HOS_INT_STK でスタックサイズを 128byte → 256byte に増やすだけで一発解決となりました。
ps. 会社でこっそり空き時間にHOSをARM上でうごかしているのですが、HOS って、他の商用製品と同等もしくはそれ以上の使いやすさに感動しています (^-^) 感謝
Reply to
#27085
Reply to #27120
×
Subject
Body
Reply To Message #27120 > ryuz さん(いや ryuz 先生) ありがとうございます。 > > HOS_INT_STK でスタックサイズを 128byte → 256byte に増やすだけで一発解決となりました。 > > ps. 会社でこっそり空き時間にHOSをARM上でうごかしているのですが、HOS って、他の商用製品と同等もしくはそれ以上の使いやすさに感動しています (^-^) 感謝
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.)
Login
Nickname
Preview
Post
Cancel
RE: dly_tsk() で mknl_idl_loop() にディスパッチされてコケる (2007-01-15 22:32 by
ryuz
#27130)
Reply
Create ticket
無事動いたようで何よりです。
次世代版も頑張ってますんで、リリース時にはよろしくお願いします(次はマニアックな仕様になりそうですが)。
次世代版起してる過程で気がついた現行版のバグも幾つかあって、直さねばとは思ってるんですが、もうちょっと整理できてからかなと思ってます(特に多重割込み関連は危険かも)。
今後ともよろしくお願いいたします。
Reply to
#27120
Reply to #27130
×
Subject
Body
Reply To Message #27130 > 無事動いたようで何よりです。 > > 次世代版も頑張ってますんで、リリース時にはよろしくお願いします(次はマニアックな仕様になりそうですが)。 > > 次世代版起してる過程で気がついた現行版のバグも幾つかあって、直さねばとは思ってるんですが、もうちょっと整理できてからかなと思ってます(特に多重割込み関連は危険かも)。 > > 今後ともよろしくお願いいたします。
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.)
Login
Nickname
Preview
Post
Cancel
RE: dly_tsk() で mknl_idl_loop() にディスパッチされてコケる (2007-01-16 22:46 by
Anonymous
#27149)
Reply
Create ticket
> (特に多重割込み関連は危険かも)。
^^; やはりそうですか...
多重割込では、ちょいと動作が気になっていたので、(強引にも) hosarm.c の中で 多重割込を禁止して使用していました。
↓こんな感じ...
-------------------------------
/* IRQ割り込み処理開始 */
INTNO hos_arm_sta_irq(void)
{
... 割り込み番号の検索を行う ...
mknl_loc_cpu(); // ←多重割込禁止
return intno;
}
/* IRQ割り込み処理終了 */
void hos_arm_end_irq(void)
{
mknl_unl_cpu(); // ←割込許可
}
-------------------------------
Reply to
#27130
Reply to #27149
×
Subject
Body
Reply To Message #27149 > > (特に多重割込み関連は危険かも)。 > ^^; やはりそうですか... > 多重割込では、ちょいと動作が気になっていたので、(強引にも) hosarm.c の中で 多重割込を禁止して使用していました。 > > ↓こんな感じ... > ------------------------------- > /* IRQ割り込み処理開始 */ > INTNO hos_arm_sta_irq(void) > { > ... 割り込み番号の検索を行う ... > > mknl_loc_cpu(); // ←多重割込禁止 > return intno; > } > > /* IRQ割り込み処理終了 */ > void hos_arm_end_irq(void) > { > mknl_unl_cpu(); // ←割込許可 > } > > -------------------------------
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.)
Login
Nickname
Preview
Post
Cancel
RE: dly_tsk() で mknl_idl_loop() にディスパッチされてコケる (2007-01-17 08:57 by
ryuz
#27155)
Reply
Create ticket
IRQの多重割込み禁止は、実施されてる方法で正解と思っています(さすが良くわかってらっしゃる)。
# loc_cpuされた状態で割込みハンドラに入りますね。
で、危ないと言ってるのは実はそこではなかったりします (^^;
IRQのみでの多重割り込みはそれほど危険ではないです。
# まあ、ARMの場合IRQの多重割り込みは、割込みコントローラが対応しているか、ソフトでやるかなのでそこの作りこみ依存ではありますが。
実はIRQ発生時にCPU的にFIQを禁止してくれないのが最大の問題でして、IRQハンドラ内で割り禁する前にFIQが掛かるとヤバイです。
同じことがSHやH8にもいえます。
# これも、自分より高レベルの割り込みはマスクしてくれません。
CVSの中にだけある次世代版(HOS-V4 Advance)では対策済みなのですが、現行版にどう反映させたものやらというのは、悩んでいる部分です。
# 興味があればCVSリポジトリでも覗いて頂ければ幸いです。
よろしくお願いいたします。
Reply to
#27149
Reply to #27155
×
Subject
Body
Reply To Message #27155 > IRQの多重割込み禁止は、実施されてる方法で正解と思っています(さすが良くわかってらっしゃる)。 > # loc_cpuされた状態で割込みハンドラに入りますね。 > > で、危ないと言ってるのは実はそこではなかったりします (^^; > IRQのみでの多重割り込みはそれほど危険ではないです。 > # まあ、ARMの場合IRQの多重割り込みは、割込みコントローラが対応しているか、ソフトでやるかなのでそこの作りこみ依存ではありますが。 > > 実はIRQ発生時にCPU的にFIQを禁止してくれないのが最大の問題でして、IRQハンドラ内で割り禁する前にFIQが掛かるとヤバイです。 > 同じことがSHやH8にもいえます。 > # これも、自分より高レベルの割り込みはマスクしてくれません。 > > CVSの中にだけある次世代版(HOS-V4 Advance)では対策済みなのですが、現行版にどう反映させたものやらというのは、悩んでいる部分です。 > # 興味があればCVSリポジトリでも覗いて頂ければ幸いです。 > > よろしくお願いいたします。 >
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.)
Login
Nickname
Preview
Post
Cancel
RE: dly_tsk() で mknl_idl_loop() にディスパッチされてコケる (2007-01-18 09:56 by
Anonymous
#27187)
Reply
Create ticket
なるほど。ありがとうございます。
HOS-V4 Advance の FIQ 実装も参考に、どうやって実装しようか考えてみます。
Reply to
#27155
Reply to #27187
×
Subject
Body
Reply To Message #27187 > なるほど。ありがとうございます。 > > HOS-V4 Advance の FIQ 実装も参考に、どうやって実装しようか考えてみます。 >
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.)
Login
Nickname
Preview
Post
Cancel