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
>
3つめのタスクが動かない?
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 #8619)
Return to Thread list
RSS
3つめのタスクが動かない? (2005-09-05 10:50 by
miw
#16262)
Reply
Create ticket
miwです。
AkiーH8/3052Fとマザボードでいろいろ試してます。
HOSのお勉強の教材をつくろうと思っているのですが、秋月のマザーボードが使えると、面倒がなくていいですね。
beshioさん、ありがとうございます。
いろいろとサンプルを作ってみました。
http://www.wakayama-u.ac.jp/~miw/linux/pukiwiki/pukiwiki.php?HOS%CE%FD%BD%AC%A5%B3%A1%BC%A5%B9
さて、このページに添付したTimerTest2.LZHですが、
hamayanさんのサンプル、tutorial10を元にして、
1.SCIとLCDへメッセージを表示するタスクOutTask
2.マザーボードのスイッチを監視してLEDの点灯・消灯をするタスクSwitchTask
A.ITU1の割り込みでOutTaskを起こす。
というプログラムをつくりました。
これのタスク1を
1’.メッセージを文字列bufにいれてSCIに表示するタスクOutTask
と変更し、
1’.SCIへメッセージを表示するタスクOutTask
2.マザーボードのスイッチを監視してLEDの点灯・消灯をするタスクSwitchTask
3.文字列bufをLCDに表示するタスクLCDTask
A.ITU1の割り込みでOutTaskを起こす。
と3つ目のタスクを追加しました。
2,3はwhileループでまわしております。
system.cfgのこの部分
/* サンプルプログラム */
ATT_INI({TA_HLNG, 0, Initialize});
CRE_TSK(TSKID_OUT, {TA_HLNG, 1, OutTask, 1, 128, NULL});
CRE_TSK(TSKID_SWITCH, {TA_HLNG, 2, SwitchTask, 2, 128, NULL});
CRE_TSK(TSKID_LCD, {TA_HLNG, 3, LCDTask, 3, 128, NULL});
でタスクの優先度を
1.OutTask
2.SwitchTask
3.LCDTask
とすると、LCDが表示されません。
また、
1.OutTask
2.LCDTask
3.SwitchTask
とすると、LEDが点灯しません。
さらに、
1.SwitchTask
2.LCDTask
3.OutTask
とすると、SCIへの出力がありませんし、bufの更新がないのでLCDも表示されません。
さらに、
1.LCDTask
2.SwitchTask
3.OutTask
とすると、SCIへの出力がありませんし、bufの更新がないのでLCDも表示されません。
スイッチも利かなくなっちゃいました。
これは、RAM上の実行でも、ROMに焼いての実行でも起こりました。
同様に、サーボモータを回すサンプルは
1.SCIに表示するTask1
2.LCDに表示するTask2
A.ITU1の割り込みハンドラA:PWM信号を生成
B.ITU1の割り込みハンドラB:PWM信号を生成、ITU1.GRBの更新
C.ITU2の割り込みハンドラA:A/D変換、0.5秒ごとにTask1をおこす。
としていて、動作するのですが、これに、
3.マザーボードのスイッチを監視してLEDの点灯・消灯をするタスクSwitchTask
を追加すると、優先度を3番目にしたTaskが実行されないです。
私のところでは、
1.ITUの割り込みハンドラで起動されるTaskは動く?
2.でも、登録されたTaskは2番目までしか動かない
ということになっているようです。
また、最後の場合ですと、割り込みハンドラで起こされるTaskが3番目以降の優先度だと、
ほかのTaskもこけている、ということかもしれません。
なにか、設定をまちがえているでしょうか?
Reply to #16262
×
Subject
Body
Reply To Message #16262 > miwです。 > AkiーH8/3052Fとマザボードでいろいろ試してます。 > HOSのお勉強の教材をつくろうと思っているのですが、秋月のマザーボードが使えると、面倒がなくていいですね。 > beshioさん、ありがとうございます。 > > いろいろとサンプルを作ってみました。 > http://www.wakayama-u.ac.jp/~miw/linux/pukiwiki/pukiwiki.php?HOS%CE%FD%BD%AC%A5%B3%A1%BC%A5%B9 > > さて、このページに添付したTimerTest2.LZHですが、 > hamayanさんのサンプル、tutorial10を元にして、 > 1.SCIとLCDへメッセージを表示するタスクOutTask > 2.マザーボードのスイッチを監視してLEDの点灯・消灯をするタスクSwitchTask > A.ITU1の割り込みでOutTaskを起こす。 > というプログラムをつくりました。 > > これのタスク1を > 1’.メッセージを文字列bufにいれてSCIに表示するタスクOutTask > と変更し、 > 1’.SCIへメッセージを表示するタスクOutTask > 2.マザーボードのスイッチを監視してLEDの点灯・消灯をするタスクSwitchTask > 3.文字列bufをLCDに表示するタスクLCDTask > A.ITU1の割り込みでOutTaskを起こす。 > と3つ目のタスクを追加しました。 > 2,3はwhileループでまわしております。 > > > > system.cfgのこの部分 > /* サンプルプログラム */ > ATT_INI({TA_HLNG, 0, Initialize}); > CRE_TSK(TSKID_OUT, {TA_HLNG, 1, OutTask, 1, 128, NULL}); > CRE_TSK(TSKID_SWITCH, {TA_HLNG, 2, SwitchTask, 2, 128, NULL}); > CRE_TSK(TSKID_LCD, {TA_HLNG, 3, LCDTask, 3, 128, NULL}); > > でタスクの優先度を > 1.OutTask > 2.SwitchTask > 3.LCDTask > とすると、LCDが表示されません。 > > また、 > 1.OutTask > 2.LCDTask > 3.SwitchTask > とすると、LEDが点灯しません。 > > さらに、 > 1.SwitchTask > 2.LCDTask > 3.OutTask > とすると、SCIへの出力がありませんし、bufの更新がないのでLCDも表示されません。 > > さらに、 > 1.LCDTask > 2.SwitchTask > 3.OutTask > とすると、SCIへの出力がありませんし、bufの更新がないのでLCDも表示されません。 > スイッチも利かなくなっちゃいました。 > > これは、RAM上の実行でも、ROMに焼いての実行でも起こりました。 > > > 同様に、サーボモータを回すサンプルは > 1.SCIに表示するTask1 > 2.LCDに表示するTask2 > A.ITU1の割り込みハンドラA:PWM信号を生成 > B.ITU1の割り込みハンドラB:PWM信号を生成、ITU1.GRBの更新 > C.ITU2の割り込みハンドラA:A/D変換、0.5秒ごとにTask1をおこす。 > としていて、動作するのですが、これに、 > > 3.マザーボードのスイッチを監視してLEDの点灯・消灯をするタスクSwitchTask > > を追加すると、優先度を3番目にしたTaskが実行されないです。 > > > 私のところでは、 > 1.ITUの割り込みハンドラで起動されるTaskは動く? > 2.でも、登録されたTaskは2番目までしか動かない > ということになっているようです。 > また、最後の場合ですと、割り込みハンドラで起こされるTaskが3番目以降の優先度だと、 > ほかのTaskもこけている、ということかもしれません。 > > なにか、設定をまちがえているでしょうか?
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: 3つめのタスクが動かない? (2005-09-05 11:16 by
hamayan
#16263)
Reply
Create ticket
プログラムを拝見させていただきました。
SwitchTaskとLCDTaskですが、見る限り共に内部でディスパッチを起こさせるようなサービスコールが使われておらず、優先度を2としたタスクから、優先度3のタスクへのCPU実行権の移譲が起こっていません。つまり、現状の動作は正しいと言えます。
RTOSでは、プログラマー自ら全てのタスクに最適なスケジューリング決定する必要が有ります。
そこでこうしてみては如何でしょうか。
SwitchTaskを優先度2、LCDTaskを優先度3とし、LCDTaskはそのまま、SwitchTaskのwhileループの一部にdly_tsk(100)を入れて、100m周期のポーリングとする。
スイッチは人が操作する事が前提なので、この位の周期でも充分実用になります。
Reply to
#16262
Reply to #16263
×
Subject
Body
Reply To Message #16263 > プログラムを拝見させていただきました。 > > SwitchTaskとLCDTaskですが、見る限り共に内部でディスパッチを起こさせるようなサービスコールが使われておらず、優先度を2としたタスクから、優先度3のタスクへのCPU実行権の移譲が起こっていません。つまり、現状の動作は正しいと言えます。 > RTOSでは、プログラマー自ら全てのタスクに最適なスケジューリング決定する必要が有ります。 > > そこでこうしてみては如何でしょうか。 > > SwitchTaskを優先度2、LCDTaskを優先度3とし、LCDTaskはそのまま、SwitchTaskのwhileループの一部にdly_tsk(100)を入れて、100m周期のポーリングとする。 > スイッチは人が操作する事が前提なので、この位の周期でも充分実用になります。
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: 3つめのタスクが動かない? (2005-09-05 13:36 by
Anonymous
#16264)
Reply
Create ticket
miwです。
hamayan様:
そうか、僕がディスパッチの設定を忘れていましたね。
なんとなく、whileループが一回でディスパッチがおこると勘違いしてました。
#BCBだと、Application->ProcessMessage()を呼び出すところですね。
教えていただいた方法でうまくいきました。
ありがとうございました。
Reply to
#16262
Reply to #16264
×
Subject
Body
Reply To Message #16264 > miwです。 > > hamayan様: > そうか、僕がディスパッチの設定を忘れていましたね。 > なんとなく、whileループが一回でディスパッチがおこると勘違いしてました。 > #BCBだと、Application->ProcessMessage()を呼び出すところですね。 > 教えていただいた方法でうまくいきました。 > ありがとうございました。
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