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
>
sh2(7045F)SCI高速通信
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 #2911)
Return to Thread list
RSS
sh2(7045F)SCI高速通信 (2003-07-05 01:30 by
rosk_t
#5207)
Reply
Create ticket
こんばんわ。
PCとシリアル通信するプログラムを書いています。28MHz動作の7045Fです。大量のデータをできるだけ高速にPCからマイコン側へ送りたいのですが、ビットレートを57600以上にすると、オーバーランエラーが頻発してしまいます。38400以下だと大丈夫です。
オーバーランエラーってRSRからRDRにデータを転送しようとしたときにまだRDRが読まれてないときに出るようです。割り込みルーチンではRDRを読んでRDRFをクリアしているだけです。つまり割り込みルーチンが起動されるまでに次のデータがRSRに書かれてしまうようです。
HOSでは割り込みを処理するときに割り込みルーチンまでたどり着くのに比較的処理が多いようなので、そのせいなんでしょうか?それともこのCPUで、割り込みで57600bps以上の連続受信はそもそも無理なんでしょうか。DTC使うようにしないとだめなのかな。sh2使ってる方教えていただけませんか。
Reply to #5207
×
Subject
Body
Reply To Message #5207 > こんばんわ。 > PCとシリアル通信するプログラムを書いています。28MHz動作の7045Fです。大量のデータをできるだけ高速にPCからマイコン側へ送りたいのですが、ビットレートを57600以上にすると、オーバーランエラーが頻発してしまいます。38400以下だと大丈夫です。 > オーバーランエラーってRSRからRDRにデータを転送しようとしたときにまだRDRが読まれてないときに出るようです。割り込みルーチンではRDRを読んでRDRFをクリアしているだけです。つまり割り込みルーチンが起動されるまでに次のデータがRSRに書かれてしまうようです。 > HOSでは割り込みを処理するときに割り込みルーチンまでたどり着くのに比較的処理が多いようなので、そのせいなんでしょうか?それともこのCPUで、割り込みで57600bps以上の連続受信はそもそも無理なんでしょうか。DTC使うようにしないとだめなのかな。sh2使ってる方教えていただけませんか。
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: sh2(7045F)SCI高速通信 (2003-07-05 04:12 by
hamayan
#5208)
Reply
Create ticket
大量のデータを高速に転送する場合ですが、
まず、フロー制御は行っていますでしょうか。
逆に、どの位のデータを例えば何秒以内に転送しなければならない!
と言うアプローチの方が、RTOSらしいですね。
しかし、HOS上で1キャラクタ毎に割り込みハンドラを起動して、
そこから更にタスクを起動となると、苦しい状況は考えられます。
割り込みの頻度が高過ぎて、スラッシングとなっているのかもしれません。
元々、SH2のSCIはソフトウエアだけでは、高速通信には不向きです。
16550の用に少量でも良いからバッファが有れば良いのですが。
DMACやDTCの併用が一つの解決策だと思います。
ブロック転送の完了時に割り込みを発生させる事が出来ますので、
その割り込みハンドラからタスクを起動するとかが宜しいかと。
Reply to
#5207
Reply to #5208
×
Subject
Body
Reply To Message #5208 > 大量のデータを高速に転送する場合ですが、 > まず、フロー制御は行っていますでしょうか。 > > 逆に、どの位のデータを例えば何秒以内に転送しなければならない! > と言うアプローチの方が、RTOSらしいですね。 > > しかし、HOS上で1キャラクタ毎に割り込みハンドラを起動して、 > そこから更にタスクを起動となると、苦しい状況は考えられます。 > 割り込みの頻度が高過ぎて、スラッシングとなっているのかもしれません。 > > 元々、SH2のSCIはソフトウエアだけでは、高速通信には不向きです。 > 16550の用に少量でも良いからバッファが有れば良いのですが。 > > DMACやDTCの併用が一つの解決策だと思います。 > ブロック転送の完了時に割り込みを発生させる事が出来ますので、 > その割り込みハンドラからタスクを起動するとかが宜しいかと。
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: sh2(7045F)SCI高速通信 (2003-07-05 13:39 by
h_sudou
#5213)
Reply
Create ticket
57600bpsだと、最短で173μ秒毎に割り込みが発生します。
この時間を超える割り込み禁止期間があったり、受信割り込みより優先度の高い割り込み処理の時間がこれを超えていたりするとオーバーランになります。
とは言え、173μ秒毎もあれば相当の処理ができますので、
何ででしょうね。
そうそう、内蔵FLASHメモリで動作させている場合は、相当
高速に処理ができますが、外部ROMとかで動作させていると
バス幅の制限とかwait入れたりすると、SH内部のパイプラインが頻繁にストールするので、実行速度は非常に遅くなります。同一クロックの16bitマイコンを内蔵メモリで動かした場合より遅くなってしまうかも知れません。
7045で外部メモリでコードを実行する場合は、キャッシュ
を効かせましょう。少しは改善するでしょう。
で、結局、hamayanさんの書かれたように、転送性能を極めたいなら、
DTCを有効活用するのが良いと思います。でも、PCから延々と
垂れ流すようなことがしたい場合は、処理が難しいかも。
するしかないと思います。
Reply to
#5207
Reply to #5213
×
Subject
Body
Reply To Message #5213 > 57600bpsだと、最短で173μ秒毎に割り込みが発生します。 > この時間を超える割り込み禁止期間があったり、受信割り込みより優先度の高い割り込み処理の時間がこれを超えていたりするとオーバーランになります。 > > とは言え、173μ秒毎もあれば相当の処理ができますので、 > 何ででしょうね。 > そうそう、内蔵FLASHメモリで動作させている場合は、相当 > 高速に処理ができますが、外部ROMとかで動作させていると > バス幅の制限とかwait入れたりすると、SH内部のパイプラインが頻繁にストールするので、実行速度は非常に遅くなります。同一クロックの16bitマイコンを内蔵メモリで動かした場合より遅くなってしまうかも知れません。 > 7045で外部メモリでコードを実行する場合は、キャッシュ > を効かせましょう。少しは改善するでしょう。 > > で、結局、hamayanさんの書かれたように、転送性能を極めたいなら、 > DTCを有効活用するのが良いと思います。でも、PCから延々と > 垂れ流すようなことがしたい場合は、処理が難しいかも。 > > > するしかないと思います。
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: sh2(7045F)SCI高速通信 (2003-07-05 22:48 by
rosk_t
#5214)
Reply
Create ticket
ありがとうございます>お二方。
結局、数藤さんの指摘どおり、外部RAMのウェイトがデフォルトのままになってたのに気づかなかったのが原因でした。ノーウェイトにしたら57600でもエラーはでなくなりました。さすがに115200ではだめでしたが…
処理が重そうならDTCも使うようにしようとおもいます。DTCだと長さの決まってないデータのやりとりでちょっと工夫しないといかんですね。SH4みたいにFIFOつきのSCIがほしいなあ。
--Thanks.
Reply to
#5213
Reply to #5214
×
Subject
Body
Reply To Message #5214 > ありがとうございます>お二方。 > 結局、数藤さんの指摘どおり、外部RAMのウェイトがデフォルトのままになってたのに気づかなかったのが原因でした。ノーウェイトにしたら57600でもエラーはでなくなりました。さすがに115200ではだめでしたが… > 処理が重そうならDTCも使うようにしようとおもいます。DTCだと長さの決まってないデータのやりとりでちょっと工夫しないといかんですね。SH4みたいにFIFOつきのSCIがほしいなあ。 > --Thanks.
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: sh2(7045F)SCI高速通信 (2003-07-10 20:42 by
m-arai
#5237)
Reply
Create ticket
さて、遅くなりましたが少し考えてみました。
問題はHOSの割り込み処理のオーバーヘッドを如何に減
らすかということだと思います。よって、SCI受信割り
込みをHOSの枠組に乗らない形にすれば良いのではない
でしょうか。
vector.s(rc)のRXI?に対応する_hos_vectorXXXを_sci_rxi
と変更。
_sci_rxi:
使うレジスタ保存
受信バイトをバッファに積む
バッファ内の受信データ量がスレショルドに達して
いたら割り込みYYYの割り込み要因を立てる
使ったレジスタ復帰
rte
アセンブラでカリカリに書きます。バッファは2^nの
サイズのリングバッファなんかが軽く書けるかな?
割り込みYYYの優先順位はRXI?以下で、こちらはHOSの
割り込みハンドラで受け、それでバッファからデータ
を読んで同期したり通信したりします。
ソフトでFIFOを付加するイメージです。かける労力と
成果の割合は不明ですが、少しは効果があるかも。
Reply to
#5214
Reply to #5237
×
Subject
Body
Reply To Message #5237 > さて、遅くなりましたが少し考えてみました。 > > 問題はHOSの割り込み処理のオーバーヘッドを如何に減 > らすかということだと思います。よって、SCI受信割り > 込みをHOSの枠組に乗らない形にすれば良いのではない > でしょうか。 > > vector.s(rc)のRXI?に対応する_hos_vectorXXXを_sci_rxi > と変更。 > > _sci_rxi: > 使うレジスタ保存 > 受信バイトをバッファに積む > バッファ内の受信データ量がスレショルドに達して > いたら割り込みYYYの割り込み要因を立てる > 使ったレジスタ復帰 > rte > > アセンブラでカリカリに書きます。バッファは2^nの > サイズのリングバッファなんかが軽く書けるかな? > 割り込みYYYの優先順位はRXI?以下で、こちらはHOSの > 割り込みハンドラで受け、それでバッファからデータ > を読んで同期したり通信したりします。 > > ソフトでFIFOを付加するイメージです。かける労力と > 成果の割合は不明ですが、少しは効果があるかも。
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: sh2(7045F)SCI高速通信 (2003-07-11 09:17 by
ryuz
#5239)
Reply
Create ticket
いつもお世話になります。Ryuzです。
HOSの場合、割り込み応答や、割り込み禁止時間の
最適化は甘々でして、この辺弱いところです。
申し訳ないです。m(_ _)m
確か日立のSCIはDMAも使えるはずですので、そちらを
検討いただくのが一番な気がします。
また、MBFなど割禁時間の長いオブジェクトを使われて
いるようでしたら、MBX+MPFに変えられるとか、そう
いった手も有効です。
また、議論になっているようにOSかまさない手も
あります。(割り込みハンドラでOS呼べませんが)
特に、SHの場合レベル割り込みに対応していますので
いくつかノンマスカブルで使ってしまうという荒業が
使えます。
これは、OSの割り禁制御のところをちょこちょこと
いじくれば実現可能です。一定上のレベルをマスク
しなければノンマスカブルに出来ますので。
ハードウェア制御のみでOSのAPIを呼ばない処理だと
もったいないので、直呼びするのは大変有効だと
思います。
Reply to
#5237
Reply to #5239
×
Subject
Body
Reply To Message #5239 > いつもお世話になります。Ryuzです。 > > HOSの場合、割り込み応答や、割り込み禁止時間の > 最適化は甘々でして、この辺弱いところです。 > 申し訳ないです。m(_ _)m > > 確か日立のSCIはDMAも使えるはずですので、そちらを > 検討いただくのが一番な気がします。 > また、MBFなど割禁時間の長いオブジェクトを使われて > いるようでしたら、MBX+MPFに変えられるとか、そう > いった手も有効です。 > > また、議論になっているようにOSかまさない手も > あります。(割り込みハンドラでOS呼べませんが) > 特に、SHの場合レベル割り込みに対応していますので > いくつかノンマスカブルで使ってしまうという荒業が > 使えます。 > これは、OSの割り禁制御のところをちょこちょこと > いじくれば実現可能です。一定上のレベルをマスク > しなければノンマスカブルに出来ますので。 > > ハードウェア制御のみでOSのAPIを呼ばない処理だと > もったいないので、直呼びするのは大変有効だと > 思います。
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: sh2(7045F)SCI高速通信 (2003-07-11 11:22 by
hamayan
#5246)
Reply
Create ticket
>HOSの場合、割り込み応答や、割り込み禁止時間の最適化は甘々でして
にゃるほど!
SH2に関しては常に触っていますので、逆にポイントを教えて頂ければ、少しはお役に立てるかな。
非常に興味の有る話題ですし。
元々の要求がSCIで大量のデータ転送なので、応用を考えると一過性の要求に思えますし、
ここは一つハードウエアで補完してもらう、DMAやDTCが良いですね。
または、通信中はCPUロックしてしまうとか。
またデータのバルク転送なので、データの信頼性チェックを兼ねて、一回の転送には固定サイズを使えば、
DMAやDTCがやり易くなると思います。
転送後にCRCやチェックサムで、データエラーの検出、回復を図る作戦です。
Reply to
#5239
Reply to #5246
×
Subject
Body
Reply To Message #5246 > >HOSの場合、割り込み応答や、割り込み禁止時間の最適化は甘々でして > > にゃるほど! > SH2に関しては常に触っていますので、逆にポイントを教えて頂ければ、少しはお役に立てるかな。 > 非常に興味の有る話題ですし。 > > 元々の要求がSCIで大量のデータ転送なので、応用を考えると一過性の要求に思えますし、 > ここは一つハードウエアで補完してもらう、DMAやDTCが良いですね。 > または、通信中はCPUロックしてしまうとか。 > > またデータのバルク転送なので、データの信頼性チェックを兼ねて、一回の転送には固定サイズを使えば、 > DMAやDTCがやり易くなると思います。 > > 転送後にCRCやチェックサムで、データエラーの検出、回復を図る作戦です。
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: sh2(7045F)SCI高速通信 (2003-07-12 09:59 by
rosk_t
#5253)
Reply
Create ticket
みなさん、いろいろな知恵を出していただきありがとうございます。とりあえずCPU割り込みで57600bpsはうまくいったのですが、だんだんCPU負荷があがってきたので、(ロボットの制御に使ってます)DTCも検討しないとなあ、と思っています。固定長のパケット構造を自分で勝手に決めてやれば簡単ですよね。
なんか進展があったら報告します。ありがとうございます。
Reply to
#5246
Reply to #5253
×
Subject
Body
Reply To Message #5253 > みなさん、いろいろな知恵を出していただきありがとうございます。とりあえずCPU割り込みで57600bpsはうまくいったのですが、だんだんCPU負荷があがってきたので、(ロボットの制御に使ってます)DTCも検討しないとなあ、と思っています。固定長のパケット構造を自分で勝手に決めてやれば簡単ですよね。 > なんか進展があったら報告します。ありがとうございます。
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