●●●くみこの組み込み相談室1.0●●●at TECH
●●●くみこの組み込み相談室1.0●●● - 暇つぶし2ch350:デフォルトの名無しさん
08/08/23 21:02:03
>>347
もうカンベンって、、、、何人か殺してんのかよ(((((゚д゚;))))))

351:デフォルトの名無しさん
08/08/23 21:11:43
テスト仕様書無しでテストして納品しました、バグのせいで人が死にました

↑会社の存続が無理なのは当然として、業務上過失致死で刑務所もありえるよ


352:デフォルトの名無しさん
08/09/08 01:14:55
組み込みで、イーモバイルとかを使った通信を実装した方っています?


353:デフォルトの名無しさん
08/09/09 09:26:31
>>352
原理上はPPPダイアルアップ
PHSカードと56kモデムは、やったことある。

むしろネットワークサービス層の選定・実装が問題じゃない?

354:デフォルトの名無しさん
08/09/09 13:47:24
>>353
ありがとうです
>むしろネットワークサービス層の選定・実装が問題じゃない?
その辺はあまり問題にはしていないです。
CFのタイプにしろ、USBのタイプにしろ、どう制御するのかがまったくわからなくて
どうしようかと思っています。
USBのタイプは、USBのプロトコルから上は、いきなりATコマンド様に扱えるんでしょうかね?

355:デフォルトの名無しさん
08/09/09 18:19:42
>>354
実装例としては Linux のものが参考になると思う。
もちろん、Linux のものから引っ張ってくるときは、
約束事には気をつけてな!

356:デフォルトの名無しさん
08/09/09 18:59:02
>>355
thxです
約束事?。。。なんだろ
すいません、わかるように。。(手もみ

357:デフォルトの名無しさん
08/09/09 19:21:20
丸ごと持ってくるとGPL縛りにかかる

358:デフォルトの名無しさん
08/09/09 22:26:01
>>356
>>357
xBSDにしろ

359:デフォルトの名無しさん
08/10/15 02:28:16
SH2+HEW なんですが
汎用レジスタにアクセスしたいのですが、どうしたらよいですかね

#pragma inline_asmを使うとcode=asmcode指定が必要で、
デバッガがお利巧じゃないので、ソースリストがasmになって見づらい
#pragma global_register で変数にあてようとすると"Illegal register" のエラーがでます
そもそも、global_registerで出来るのかな

どなたかわかるかた、ご教示あれ

360:デフォルトの名無しさん
08/10/15 07:22:50
gcc?

361:デフォルトの名無しさん
08/10/15 07:30:28
>>360
renesasです。

362:デフォルトの名無しさん
08/10/15 08:40:24
gccの方がレジスタアクセスは簡単だよ。

363:359
08/10/15 10:57:37
>>362
お客さんの指定なんです

364:デフォルトの名無しさん
08/10/15 16:25:33
サンプルコードを書いて、ルネサスに聞いた方がいいんじゃないの?

365:359
08/10/15 19:44:12
>>364
そういうのアリなんですかね?
調べてみます

366:デフォルトの名無しさん
08/10/17 02:56:42
>>359 俺も同じ体験したよ。
>デバッガがお利巧じゃないので、ソースリストがasmになって見づらい
ルネサスなら、こっちにしないとダメだったよ。必要な箇所は少量だと思われるので、
そこだけを別モジュールにしてASMで書いてCから呼び出すようにしたらいいとおもう。

367:359
08/10/17 03:28:10
>>366
ありがとうございます
>そこだけを別モジュールにしてASMで書いてCから呼び出すようにしたらいいとおもう。
いまその方向で始めました
スピードはあまり要求されないのでCでまとめられたらよかったんですけどね

368:デフォルトの名無しさん
08/10/17 09:13:35
そもそも、具体的にどういう動作をさせたかったのかに興味あり。

369:デフォルトの名無しさん
08/10/17 16:42:08
ポート叩くのに、ROTX(L/R)系の命令を使いたかったのだと思う。
キャリーをポートに出すのがCでは書けなくて若干速いんだよね。

370:デフォルトの名無しさん
08/10/17 17:45:09
スタックポインタ?

371:デフォルトの名無しさん
08/10/18 02:15:45
Rnをさわらなきゃいけない状況つうのがあんまし想像できないなあ。
アセンブラで呼ぶことしか想定していないライブラリをつかうとか、
俺OS作っていてコンテキストスイッチ部分を書きたいとか…


372:359
08/10/18 04:47:08
>>368
>>371
ユーザープログラムモードで、
プログラム上からROMの書き換えをするのに、Rnを触らないといけないんです


373:デフォルトの名無しさん
08/10/18 13:55:54
ああ、あれか。

引数をレジスタ渡しにすればそのまま呼べたような気がするが。






374:359
08/10/19 01:41:37
>>373
>引数をレジスタ渡しにすればそのまま呼べたような気がするが。
そう思って、#pragma global_register を使ったら"Illegal register"のエラーが出てしまってます。

375:359
08/10/19 08:40:14
#pragma global_register(a=R8)
int a;

としたときは、コンパイルが通りますね
どうやら、R8-R14だとOKみたいです
制限がかかってるのかな

376:デフォルトの名無しさん
08/10/19 08:41:20
>>575 だな、スケールが小さいな。もっとあるだろうに。

ってかやらされてるんだろうな官僚に。何もやらないと要求されるから。

377:デフォルトの名無しさん
08/10/19 08:41:52
↑gobaku

378:359
08/10/19 08:51:03
>>376
乙ですw

379:359
08/10/19 08:57:49
よくみたら、>>374は、>>373の答えになってなかったかも;
ああ、なるほど!
R4は引数をレジスタ渡しにすればそのままってことですね
レジスタ渡しにすればR4に入る保証というのは、どこかで定義できるんでしょうかね
これは、処理系(コンパイラ)依存ですよね?
マニュアルをちょっとよく見てみないとですね


380:359
08/10/19 09:47:24
>>375
自己レス
マニュアルに書いてありました;

>>373
やっぱり、それでいけるかもしれません
ありがとうございます

381:デフォルトの名無しさん
08/10/27 16:42:38
今までオープン系業務システムの開発を
やっていたのですが、今度組み込みを
やることになりました。
具体的に何をやるかまだわからないのですが、
おすすめの入門書はありますでしょうか?

382:デフォルトの名無しさん
08/10/27 20:35:13
何をやるかわかってから聞けよ

383:デフォルトの名無しさん
08/10/29 03:12:24
>>381
加算機とアンプ作っとけ

384:デフォルトの名無しさん
08/12/04 01:30:46
アンプってどうやってつくるの?

385:デフォルトの名無しさん
08/12/04 02:44:37
すみません 防犯カメラの設置および組み込みPGの募集ってあったのですが
(HDDに機器をつなげる:サーバー知識あれば尚可)
アパッチ、SQL、LINUX、でサーバー構築くらいはやったことあるのですが
どういった作業なのでしょうか?単純作業の繰り返しでしょうか?

386:デフォルトの名無しさん
08/12/04 03:38:13
かっこでくくると判りやすいな。(防犯カメラの設置および組み込み)PGの募集。
組み込み系PGではないな。設置と結線ならPGである必要もない。

387:デフォルトの名無しさん
08/12/04 07:57:57
要は、普段は防犯カメラの設置をやってもらうが必要によってサーバの設定などの運用や
簡単な保守管理の設定なども行なってもらうけど肩書きはPGなんで宜しく、ってことだな。

388:デフォルトの名無しさん
08/12/04 08:14:30
>>386 まあ、インストールと設定(ファームウェア)の領域ですかね?
>>387 人数が少ないから全部やると思いますがw

389:デフォルトの名無しさん
08/12/04 10:20:21
>>385
防犯カメラの設置と組み込みPGってぜんぜん領域が違うと思うんだけどな
なんか、テキトーな会社っぽいね
前にあったのは
会社:「どんなことをやってました?」
応募者:「基本ソフトのですね~(ほにゃらら)」
会社:「うちはベーシックの技術者は募集してないんです」
応募者:「‥‥‥」



390:デフォルトの名無しさん
08/12/04 11:54:09
OSを「基本ソフト」と呼ぶ奴を俺は信用しない

391:デフォルトの名無しさん
08/12/04 12:13:48
基本ソフト、たまにハード

392:デフォルトの名無しさん
08/12/04 13:27:17
>>390
なにか嫌なことがあったのか?w
おれは、「ping」を「ピング」と呼ぶ奴を信用しないがね

393:デフォルトの名無しさん
08/12/04 13:35:54
pingerは何て読むの?

394:デフォルトの名無しさん
08/12/04 13:52:32
>>393
「pinger」は造語だろ、pingerが「ピンガー」って読むから
「ping」を「ピング」とは読まない
1歩譲って「ピング」と言ってもいいけど、恥ずかしい人と思われることもあるから注意な

395:デフォルトの名無しさん
08/12/04 14:02:44
じゃあ、bomberは?

396:デフォルトの名無しさん
08/12/04 14:05:54
こういうどうでもいいことをいきがってくだらないこだわり見せる人のが恥ずかしいな。

397:デフォルトの名無しさん
08/12/04 19:04:34
>>396
>>390のことな、ほんとそうだな

398:デフォルトの名無しさん
08/12/04 21:00:07
ピングーとポングー

399:デフォルトの名無しさん
08/12/04 21:38:13
ソナー員 「艦長!敵艦が"ピングー"を打ってきました!」
艦長 (ズコーー!)

400:デフォルトの名無しさん
08/12/04 22:06:06
>>383
すいません、どこから手をつけてよいのか
皆目見当がつきません。
何を参考にすればよいでしょうか?

401:デフォルトの名無しさん
08/12/04 22:35:09
>>400
秋月電子に行ってらっしゃい。

402:デフォルトの名無しさん
08/12/04 22:39:27
PICマイコンって 組み込み系でいいんですか?

403:デフォルトの名無しさん
08/12/04 22:52:01
愚問。
ガソリンエンジンって自動車でいいんですか?、と同じ意味で。

404:デフォルトの名無しさん
08/12/05 00:39:44
>>403
幾らなんでも、そりゃ例えが飛躍しすぎで伝わらんだろ

>>402
ペンティアムって 業務系でいいんですか?

くらいだろ

405:385 388 402
08/12/05 04:15:41
回答ありがとうございました 参考に勉強します

406:デフォルトの名無しさん
08/12/05 23:02:28
>>405
あと、参考になりそうなネタ元

この辺の電子回路の教科書クラスでいいかも
URLリンク(www.amazon.co.jp)
URLリンク(www.amazon.co.jp)

その他、国公立大学・工学部の基礎レベルの講義資料も使えると思う
確か、東工大がそういった資料のネットでの公開に力を入れてたはず

407:デフォルトの名無しさん
08/12/05 23:52:39
>>401
サイト見たのですがよく分かりません。
ご指導頂けないでしょうか。

408:デフォルトの名無しさん
08/12/06 00:05:53
>>406 どうも 参考にします。
URLリンク(monoist.atmarkit.co.jp)
たとえば、H8マイコンにC言語でプログラムした場合のPGと組み込み
についてどう解釈すればいいのでしょうか。

409:デフォルトの名無しさん
08/12/06 00:41:24
何が知りたいんだおまえは

410:デフォルトの名無しさん
08/12/06 00:50:38
>>409 >>385の作業を具体的に知りたいんです。範囲がどうのこうのとか
車がどうとかは、別にどうでもいいんです。

411:デフォルトの名無しさん
08/12/06 01:04:56
説明できなくもないが、まずはその会社に問い合わせなさい
こちらが色々予想するのは無駄なことだ

412:デフォルトの名無しさん
08/12/06 01:31:37
あ わかりました。どうもです。

413:デフォルトの名無しさん
08/12/07 18:01:27
日本で有名な組込み屋さんってどこになるのかな
アックスとかウィンドリバーとか?

リナックスは組込みに強いと聞くけど
会社としてはあんまり聞かないよね

414:デフォルトの名無しさん
08/12/07 18:05:32
>>413
URLリンク(www.emblix.org)

415:デフォルトの名無しさん
08/12/07 18:32:41
linuxはいい加減な処理しかできないし動かすだけで余計なコストも掛かる
リアルタイム系では出る幕が無い

416:デフォルトの名無しさん
08/12/07 19:34:45
>>415
でも、タダ

417:デフォルトの名無しさん
08/12/07 19:42:45
いやだから最初から選択肢に入らない
無料つっても何も無いも同然だから人件費の方が高くなる

418:デフォルトの名無しさん
08/12/07 20:10:27
>>417
人件費は、外注にかぶせればタダ
が、クライアントの脳内

419:デフォルトの名無しさん
08/12/07 20:51:43
作るモノにもよるんじゃない?
ネットにつなげるような仕様だとLinuxBOXのような物のほうがラクだと思うがな
電器ポットにLinux入れようとは思わないけど

420:デフォルトの名無しさん
08/12/07 21:00:03
NICのドライバ部分なんてPICにもあるから
そんなとこ楽したいだけでlinuxを載せる理由にはならない
無知ほどlinuxと喚きたがるだけ


421:デフォルトの名無しさん
08/12/07 21:03:07
規模の話をしたつもりだったんだが、そんなにLinuxを毛嫌いする必要あるのかな

422:デフォルトの名無しさん
08/12/07 21:05:13
~のソフトがlinuxでしか動かない、
とか、ソフトの都合が多いね。
linuxが出てるのは大体ソフト屋の発想。
それで完成するのは大抵産業ゴミ。

423:デフォルトの名無しさん
08/12/07 21:07:54
そして車輪の再発明

424:デフォルトの名無しさん
08/12/07 21:11:27
>>421
そんな話してないだろ。
どこの誰さんですか?


425:デフォルトの名無しさん
08/12/07 21:12:09
なにか都合が悪かった?

426:デフォルトの名無しさん
08/12/07 21:13:29
経験から言えばLinuxが動かせる規模なら
最初からCEやWindows Embedded使った方が楽。
Linuxはソフト作ってくれる奴が確保できない。

427:デフォルトの名無しさん
08/12/07 21:14:34
意味不明な理由でGPLになるしなあ
信じられんよ

428:デフォルトの名無しさん
08/12/07 21:22:27
意味不明でGPLとか、それはあんまりだ

429:デフォルトの名無しさん
08/12/07 21:29:52
NetBSDがアップを始めました

430:デフォルトの名無しさん
08/12/07 21:34:30
Linuxを使っていいのは趣味レベルまで。
大手なら金の力で乗り切れる場合もあるが、
中小で下手に関わると悲惨なことにしかならない。

431:デフォルトの名無しさん
08/12/07 21:38:13
このスレはシビアですね。
だがそれがいい。

432:デフォルトの名無しさん
08/12/07 21:59:40
>>422
>それで完成するのは大抵産業ゴミ。
あるメーカのある民生品は、思いっきりlinuxだけどね。
ライセンス費のある組み込みOSは、民生品に入れるときついんじゃないのかね

433:デフォルトの名無しさん
08/12/07 22:17:13
>>413

どっちかっつーと、こっちの幹事会員、A会員かと。
URLリンク(www.t-engine.org)

純粋なソフト屋さんは数社しかないけど。


434:デフォルトの名無しさん
08/12/07 22:17:49
>>432
そういう妄想はいくらでも吐けそうだよなw
何か明かせない理由でもあんのか?

435:デフォルトの名無しさん
08/12/07 22:21:59
明かせない理由はずばり、
おもいっきりライセンス違反してて
明かすとしょっ引かれるから。

436:デフォルトの名無しさん
08/12/07 22:22:10
>>434
いや、ネタ元にバレるとまずいから;
AV機器なんだけどね、英文字の日本の会社。
これ以上はかんべんしてくれ。

437:デフォルトの名無しさん
08/12/07 22:24:32
当初Linuxで計画してたのが見事頓挫して、
別の物に丸ごとすげ変わった。
ってパターンだと明かせないわな。

438:デフォルトの名無しさん
08/12/07 22:28:30
>>436
だからさ、そんな明かせない事例なんかここで出しても
お前の妄想と変わらんだろ。

439:デフォルトの名無しさん
08/12/07 22:35:49
>>438
悪いが釣られないよ
組み込みlinuxを大量生産の民生品に使うケースもあるってことだ


440:デフォルトの名無しさん
08/12/07 22:42:19
絶対あるもん!
いやいや
絶対あるもん!
いやいや

・・・バカ?

441:デフォルトの名無しさん
08/12/07 22:49:47
明かせない理由→バレるとまずい
はいはい

442:デフォルトの名無しさん
08/12/07 22:50:33
昔linux組み込んだルーターでライセンス問題になって大騒ぎしたことがあったよなあ…
今どうしてるんだろう

443:デフォルトの名無しさん
08/12/07 22:53:02
どうしても、ないことにしたいらしいw
オレ的には、どうでもいいが

URLリンク(kaden.yahoo.co.jp)
URLリンク(homepage3.nifty.com)

444:デフォルトの名無しさん
08/12/07 22:56:10
>>442
「もう2度と使わない」と悪態吐いてたろう

そういやLinksys GPL違反はどうなったんだろうな?

445:デフォルトの名無しさん
08/12/07 22:58:33
糞煮程度デカイならそりゃ何だって作れるだろ
アホか

446:デフォルトの名無しさん
08/12/07 23:04:08
linuxはドライバが強制GPL。
その時点でありえない。
NetBSDの方はまだ可能性がある。

447:デフォルトの名無しさん
08/12/07 23:27:43
>>446
可能性があるつーか、
あっちこっちのネットワーク機器がNetBSDじゃん

448:デフォルトの名無しさん
08/12/07 23:36:21
某NASや一部のPDAの例外のせいで組み込み=Linux
みたいな考え違いをするバカが多いんだよ。

449:デフォルトの名無しさん
08/12/07 23:50:30
その某PDAのSDドライバは黒いという話が・・・。
負けず劣らずユーザーも黒いけどね。
Linuxで組み込みは暗い話しか聞いた事がない。
あまり関わりたくないね。

450:デフォルトの名無しさん
08/12/07 23:50:57
ドライバ部分はGPLにしたがって公開しなきゃいけないけど
ソフト部は公開する必要ないよね
低レベルのソフト会社には恐くて丸投げできないけど

451:デフォルトの名無しさん
08/12/08 00:46:10
>>445
なに逆ギレしてんだ?こいつw

452:デフォルトの名無しさん
08/12/08 02:53:05
低レベルなスレだと>>450の言う低レベルがどんな意味を持つのか分かりにくいな

453:デフォルトの名無しさん
08/12/08 11:27:09
Linux積んでる民生機器といえば東芝RDシリーズがそうだが?

454:デフォルトの名無しさん
08/12/08 11:46:17
何をいきがりたいのか知らんけど、
そうやってジャンル問わず探せば絶無なんてことはないし、
Linuxが使える状況なら使えばいいんでは

455:デフォルトの名無しさん
08/12/08 11:54:39
>>454
どうしても使っていないと信じたい奴がひとりいるんだわさ

456:デフォルトの名無しさん
08/12/08 12:03:04
>>453
起動がもっさりで有名になってしまったアレかw

457:デフォルトの名無しさん
08/12/08 15:24:11
>>456
だから、コンセントを入れたときに既に起動させておいてスリープさせてる機器もあるけどね(笑)

458:デフォルトの名無しさん
08/12/15 11:27:18
H8/500系を使い続けなければいけないんだ…
10年選手のFULLICEとヘボいデバッガしかないんだ…

何とかならないもんかなぁ…

459:デフォルトの名無しさん
08/12/15 12:03:58
>>458
懐かしいなぁ>H8/500系

460:デフォルトの名無しさん
08/12/15 19:47:41
>>458
デバッガなんかの世話になるヤワな体質の方をなんとかしたほうがいいと思うよマジで。
私見だがデバッガに頼る人っていうのはコードが汚いんだと思う。
十分可読的なコード書けば(もちろんデバッグは必要だが)デバッガなんていらん。

461:デフォルトの名無しさん
08/12/15 20:26:44
保守性のあるコード書くのって難しいよね。

462:デフォルトの名無しさん
08/12/15 22:15:48
>>460
規模によってだね。
小さくても、FPGAとかハードが絡むと、身の潔白を晴らすために必要。

463:デフォルトの名無しさん
08/12/15 23:10:46
>>462
おまいと仕事したいぜ
おれの周りは動かないと全部ハードが悪いって思考停止する奴おおすぎ
こっちもハード確認用ファーム自前で用意して確認してるのに…
数時間後に同じハードを修正したといって渡すとちゃんと動き「やっぱりハードか」
ってどの口が言うって感じw

464:デフォルトの名無しさん
08/12/16 02:04:17
>>463
同情するわw
いまやってるプロジェクトのチームは10数人の外人部隊だけど
トラブルがあると、全員が「オレか?」って自分のところを当たる
だから、解決も早い
力のある奴らってたいていそうだ

465:デフォルトの名無しさん
08/12/16 04:05:29
それは・・・普通じゃないチームだな。脊髄反射で 「俺ではない」 が出るのが一般的だよな

466:デフォルトの名無しさん
08/12/17 00:46:34
>>465
それなりに経験あるなら
そうは言ってても、最低限、自分の責任範囲+αくらいは
裏でこっそりみるだろ

467:デフォルトの名無しさん
08/12/17 05:05:10
うちはそれだな。

468:デフォルトの名無しさん
08/12/17 12:36:13
風の中のすぅ~ばるぅ~♪

469:デフォルトの名無しさん
08/12/17 13:48:21
自分のとこチェックしてデバッグしてるうちに原因が特定できることあるしな。
それが他人のとこだったりしても。

470:デフォルトの名無しさん
08/12/24 09:26:12
10数年前からベース変えずに色々な人間が書き加えてるようなソースに
保守性なんか無いんじゃああああああああっ!
仕向け先ごとに別々の改造入ってるし

ああ、全部書き直したい・・・

471:デフォルトの名無しさん
08/12/24 11:23:18
>>470
そこまで熟成してしまったら、同じものを一から再構成するのは
不可能でないかと思うわけで。

かと言って最初からそこまで考えて作る余裕もないんだよなあ。



472:デフォルトの名無しさん
08/12/24 12:42:30
OSなどは0から書き直したりしてるよね
あれは売るためでもあるけど

473:デフォルトの名無しさん
08/12/24 15:09:29
OSなんかはマニュアルちゃんとしてりゃ、それに合わせておけば
何も問題ないからねえ。

書いていないような所で微妙に変わっても、今回からそーいう仕様に
なりましたで終わりそうだし。


474:デフォルトの名無しさん
08/12/24 15:46:59
>>470
上司「一部変更でみこんでいる期間で10数年分を書き直して完全に同じ動作するようにできるならやってもいいよ」

475:デフォルトの名無しさん
08/12/24 15:51:29
雛形が相当ひどかったのでは?

476:デフォルトの名無しさん
08/12/24 16:35:07
その後10数年分の変更を見込んだ雛形なんて作れないだろ。
当時の仕様に対してきっちりしていたってその後好き勝手な変更加わればめちゃくちゃになるよ。

477:デフォルトの名無しさん
08/12/24 16:58:37
実際OS(カーネル)書いていますが、元ネタは、10年くらい前のやつ。
それまで、担当者は何人か変わっていますが、「好き勝手でない」レベルで
統一された保守がされていた感じがします。

マイコンが違うので当然ソースは全面変更なのですが、処理方法など、フシュウではなく、当初の
ものを踏襲してます。建前上、新規作成ですが、私的には流用と思っています。

私から、また担当が替わって、次の人が見たときは、勝手な変更が加えられたと思われるかも
しれませんが、...



478:デフォルトの名無しさん
08/12/24 17:39:12
アセンブラ?

479:デフォルトの名無しさん
08/12/24 20:28:09
Windowsの深層部にはx86の超レガシーな命令が使われてるらしいね
だからx86はいつまで経っても互換性の縛りから抜け出せない

480:デフォルトの名無しさん
08/12/24 21:02:34
Windowsはx86以外にも出てたんだがな

481:デフォルトの名無しさん
08/12/24 21:07:04
えっ、そうなの?

482:デフォルトの名無しさん
08/12/24 21:16:09
WindowsNTにはAlpha MIPS PowerPCで動くものもあったし
WindowsCEだとSH4とかARMとか色々あるんだが?

483:デフォルトの名無しさん
08/12/24 21:19:53
そもそもブートする時以外に「レガシーな」命令なんて使ってるの?w

484:デフォルトの名無しさん
08/12/24 23:36:24
移植性ってあったの?

485:デフォルトの名無しさん
08/12/25 13:47:45
>>483
16ビットモードという意味では起動時だけだな。

ていうか479は釣り。加算命令とか基本的な命令はレガシーかつ現役。
そういう命令の互換性が必要なんだし、遺物のような命令は使われなく
なってる(LOOPだとか)。

486:デフォルトの名無しさん
08/12/26 06:10:46
セグメントのあたりも初期化以外に使われないのが色々ありそうだが。



487:デフォルトの名無しさん
08/12/26 06:51:55
>>486

セグメント関係は、メモリ管理でバリバリ使うよ。
OSの実装にもよるけど。

つーか、そろそろスレ違いだろ。


488:デフォルトの名無しさん
08/12/26 22:43:12
折角高速化を期待してアセンブリ言語で書いてるのに
LOOP とか遅い命令使ってもしゃーないしな。

489:デフォルトの名無しさん
08/12/27 08:33:04
>>487

セグメントをメモリ管理でバリバリ使うOSって何?

セグメントは面倒なだけであまりメリットがないと思うんだよな。
32bit 以上のOSでは、初期化以外には使っていないっていうのは
俺も同じ認識なんだが。

8086/80186/80286みたいなアドレッシングできる範囲が実アドレス
空間より狭い場合にやむをえず使うって感じじゃないの?

490:デフォルトの名無しさん
08/12/27 08:44:08
OS-2

491:デフォルトの名無しさん
08/12/27 10:12:57
>>490

OS-2ってOS/2のこと? OS/2 もWarp からは32ビットなんで
セグメントは使ってなかったのでは。

すでにサポート終了したOSしか例がないんだったら、
現在はセグメントをバリバリ使ってプログラムするOSなんて
ないって結論でいいのかな。


492:デフォルトの名無しさん
08/12/27 11:06:55
そりゃぁ、「プログラムするOS」なんてないだろ。
セグメントを使って管理していたとしても。

493:デフォルトの名無しさん
08/12/27 11:41:20
それは誤解ですね。

x86の16ビットOSの場合、64Kを超えるプログラムを作る場合は
セグメントを意識せずにプログラムの作成はできないよ。

正確には、コードとデータそれぞれ64Kまで、それを超えると
コードは、セグメントの関数CALL、データはセグメントの切り替えが
必要になる。

ライブラリで覆い隠している場合はあるかもしれないが、OSだけが
管理すれば良いって話ではない。

494:デフォルトの名無しさん
08/12/27 11:57:22
>>493
それは8086などの16ビットCPUに限定された話だろ。
今の話題は、セグメントレジスタを使ったプログラムをOSがするかどうかじゃないのか?

495:デフォルトの名無しさん
08/12/27 16:00:03
Linuxの何かで、32ビットモードで実メモリ4Gオーバーを扱えるようにした
拡張バージョンとかやってなかったっけ?

496:デフォルトの名無しさん
08/12/27 23:53:13
もしかして、OS がメモリ管理にセグメントを使うって話じゃなくて、
アプリケーション側がメモリ管理にセグメントを使うかどうかって話なのか?
現状では普通アプリケーション側にセグメントをいじる権限は与えないのが普通だな。

497:デフォルトの名無しさん
08/12/28 12:19:10
じゃなくて、セグメントを利用した2次元アドレッシングを活用してるかどうか、という話。

498:デフォルトの名無しさん
08/12/29 03:09:32
NetBSDやLinuxの移植って難しいよね…
まず何から勉強したらいいのかな…
BootLoaderは何がいいのかな…


499:デフォルトの名無しさん
08/12/29 23:32:53
>>498
GPLが気にならないならU-Bootでいいだろ

500:デフォルトの名無しさん
08/12/30 01:16:30
ありがと、まずはU-Bootの移植頑張ってみる

501: 【小吉】 【215円】
09/01/01 02:40:43
あけおめ!ただいまクロスコンパイル環境を構築中!

502:デフォルトの名無しさん
09/01/17 12:48:43
static uchar replybuf[8];
usbMsgPtr = replybuf;
int i_adch;
int i_adcl;
double ret;

//ADC開始
DDRC = 0x00;
ADCSRA=0b11000111;
ADMUX= 0b01000101;

while((ADCSRA & 0x10)==0){;}
i_adcl=ADCL;
i_adch=ADCH;
ret = (ADCW>>2);

ADCSRA=0x96;
//ADC終了

このようなプログラムでAD変換を行っているのですが、低い値を取得した際にADCLの値(i_adcl)が246や255といったおかしい値になってしまいます。
例でいうと、70-47-32-17-4-246-7-3-239...といった具合です。
ノイズ源なども取り除いたのですが、値が突然暴走するのはプログラムに問題があるような気がします。
できれば0-1024でしっかり値をとりたいのですが、何か方法はありませんか?

使用チップはmega88で、環境はWinAVRを使用です。


503:デフォルトの名無しさん
09/01/17 13:01:05
コードが判らない
ちょっと1行ずつ何がしたいか解説して見ろ

i_adcl=ADCL;
i_adch=ADCH;
ret = (ADCW>>2);
何しとんの?

504:デフォルトの名無しさん
09/01/17 13:01:09
>>502
>i_adcl=ADCL;
まず、ここに時差がある。
>i_adch=ADCH;

505:デフォルトの名無しさん
09/01/17 13:09:40
>>503
確かにその部分は不要ですね・・・消します

>>504
時差があるとまずいでしょうか?


506:デフォルトの名無しさん
09/01/17 13:15:31
↓adcの遷移はリニア
0x0FFF >i_adcl=ADCL;
0x1000 >i_adch=ADCH;

こうなる、ことがある。

507:デフォルトの名無しさん
09/01/17 13:17:52
>>506
なるほど・・・とすると、同時性を確保するにはADCWだけ読み出せばよいのでしょうか?
しかし、ADCWを使って0-1024までの整数に表現する方法が分からないんです。

508:デフォルトの名無しさん
09/01/17 13:18:24
>>502
フツーにソースの信号が実際に安定してないんじゃないの?

関係ないけどADCxと、その値をキャッシュしてる変数のビット幅って
それで一致してるの?

あと、504がたぶん言いたいことだと思うんだけど、(もし割り込みを使ってるなら)
サンプリングの間隔にもよるけど、2つのレジスタをアトミックに読み取るように
しないとまずいかもね。
今回の問題とは関係ないと思うけど。

509:デフォルトの名無しさん
09/01/17 13:20:24
>>508
ソースはLEDを入力に使った距離センサーですし、値が低いときだけ暴走するので良く分からないです。
ノイズ源なども極力取り払いましたが・・・。

変数のビット幅は良く分かりません、参考にした本にはこれ以上のことが書いてなかったので良く分からないのですが、
少なくとも本の通りにやるとおかしな値になることだけは確かなんですよ・・・

510:デフォルトの名無しさん
09/01/17 13:23:59
データシートによるとADCLを読み出したらADCHを読み出すまでは値は変化しないらしいぞ。
他の問題じゃないか?

511:デフォルトの名無しさん
09/01/17 13:25:56
これか、
レジスタ名 bit7:0
ADCH ADC9 ADC8 ADC7 ADC6 ADC5 ADC4 ADC3 ADC2
ADCL ADC1 ADC0 - - - - - -

512:デフォルトの名無しさん
09/01/17 13:26:32
情報が小出しになってしまって申し訳ないです。

uchar usbFunctionSetup(uchar data[8])
{

(上記のプログラム)

static uchar replybuf[8];
replybuf[0]=data[7];
replybuf[1]=ADCL;
replybuf[2]=ADCH;
replybuf[3]=ADCL + (ADCH<<8);
replybuf[4]=~(ADCW>>2);
replybuf[5]=i_adcl|i_adch;
replybuf[6]=data[6];
ADCSRA=0x96;

return 7;
}

今こんな状況で色々な値を読み出して比べているのですが、もしかしてそもそもuchar型で返していること自体に問題があるのでしょうか?
だとすると、どのようにすればuchar型にはめ込んで値を取得できますでしょうか?

513:デフォルトの名無しさん
09/01/17 13:29:33
>>509
まあ一番可能性が高そうなのは、符号付1xビットのAD変換値の下位8ビットを、
unsigned charとして扱ってしまってるってところじゃないの?

ADCxはどう定義されてる?

514:デフォルトの名無しさん
09/01/17 13:34:43
>>513
AD系の定義は、io.hの

#define ADCW _SFR_MEM16 (0x78)
#define ADCL _SFR_MEM8 (0x78)
#define ADCH _SFR_MEM8 (0x79)

という記述がありました。
数字から察するに16bit,8bit,8bitということなのでしょうか?

515:デフォルトの名無しさん
09/01/17 13:36:27
>>510
なるほど。
となるとADCLだけじゃなく、ADCHの遷移とかもないとわからないな・・。

516:デフォルトの名無しさん
09/01/17 13:38:23
>>515
上のを実際にPCで見て見るとこんな感じになりました。
buf[2](ADCH)が0のときにおかしな値を吐くことくらいは分かりましたが、他はなんとも・・・。

buf[1]= 35 buf[2]= 1 buf[3]= 35 buf[4]=183 buf[5]= 35
buf[1]= 40 buf[2]= 1 buf[3]= 40 buf[4]=181 buf[5]= 41
buf[1]= 83 buf[2]= 1 buf[3]= 83 buf[4]=171 buf[5]= 83
buf[1]= 26 buf[2]= 1 buf[3]= 26 buf[4]=185 buf[5]= 27
buf[1]=255 buf[2]= 0 buf[3]=255 buf[4]=192 buf[5]=255
buf[1]= 39 buf[2]= 1 buf[3]= 39 buf[4]=182 buf[5]= 39
buf[1]= 75 buf[2]= 1 buf[3]= 75 buf[4]=173 buf[5]= 75
buf[1]= 72 buf[2]= 1 buf[3]= 72 buf[4]=173 buf[5]= 73
buf[1]= 10 buf[2]= 1 buf[3]= 10 buf[4]=189 buf[5]= 11
buf[1]= 25 buf[2]= 1 buf[3]= 25 buf[4]=185 buf[5]= 25
buf[1]= 44 buf[2]= 1 buf[3]= 44 buf[4]=180 buf[5]= 45


517:デフォルトの名無しさん
09/01/17 13:40:32
>>512
ちょっとまて、
コードが無茶苦茶だぞ

replybuf[3]=ADCL + (ADCH<<8);
replybuf[4]=~(ADCW>>2);
replybuf[5]=i_adcl|i_adch;
ADCSRA=0x96;
これらはほんとに正しいのか?
まるで意味判ってないだろ
こんなんでは質問しても時間の無駄
C言語仕様書とデータシート100回読み直して出直してこい


518:デフォルトの名無しさん
09/01/17 13:49:19
>>516
なんだこれ見る限り、AD変換値は何も問題なさそうじゃん。

bug[1]がADCの下位8ビット、buf[2]が上位8ビットだよね?
ひょっとして「ビットの並びでどうやって数を表現するか?」から知らない人?

519:デフォルトの名無しさん
09/01/17 13:50:04
>>516
buf[1]= 83 buf[2]= 1 -->83+256
buf[1]= 26 buf[2]= 1 -->26+256
buf[1]=255 buf[2]= 0 -->255+0
ばらつきはあるけど、別におかしくないんじゃないか?

520:デフォルトの名無しさん
09/01/17 13:53:24
>>518
うっく・・・よく分からんです・・・

>>519
なるほど・・・!
ということは両方の値を足してやって、256を引けば良いということですか・・・


521:デフォルトの名無しさん
09/01/17 14:00:49
>>520
(ADCH<<8);

これ、
ADCH=1 とか、ADCH=2
のとき、計算結果がどうなるかわかるか?

522:デフォルトの名無しさん
09/01/17 14:00:49
いいから出直してこいよ
お前には無理だ
>>516
これではテストにもならない

基本的なことが欠けている
例えばADCのようなレジスタをアトミックに参照する場合
一時変数を使うことがまず考えられる
uchar lo, hi;
lo = ADCL;
hi = ADCH;
//以後 lo hiを参照
buf[0] = lo;
buf[1] = hi;

wordが必要なら
uint16_t word = (hi<<8)|lo;
8ビットMCUはビットを意識できないとどうしようもないぞ

523:デフォルトの名無しさん
09/01/17 14:04:13
お前等やさしいなw

524:デフォルトの名無しさん
09/01/17 14:10:30
>>521
ビットパターンの表を見て、今やっと上位ビットと下位ビットの意味を理解しました。

>>522
恐れ入ります。
本当はもっと勉強したいのですが、月曜に最終発表なのでとにかく少しでも進めないといけないんですよ。
でもおかげさまで参考になりました。値の取得は結構うまく出来てるようなので、ビット表とにらめっこしながら正しい値を取れるようにしてみます。

525:デフォルトの名無しさん
09/01/17 14:18:07
学生か? 悪いことは言わないから一年やり直せ。

526:デフォルトの名無しさん
09/01/17 14:20:39
まあそう必要以上に煽るなよ。
逆切れしてる訳でもない奴を一方的に煽るのはちょっとみっともないぞ。

でもマイコン弄るのにバイナリによる整数表現も理解してないのは
かなりマズいのは確かだねw

527:デフォルトの名無しさん
09/01/17 14:20:57
replybuf[0]=data[7];
replybuf[6]=data[6];
・・わけわからん
あまり時間は無さそうだが、
変数名ぐらいはきちんと考えてつけた方がいいぞ
おれがこんなの受け取ったら作り直せと言うがなあ

一度tiny辺りのギリギリの環境で修行した方がいい
mega88はもったいない

528:デフォルトの名無しさん
09/01/17 14:26:29
>>525
まだ1年なのでそれはきついっす。

>>526
ですよね。。
しかしこれだけでも少しは勉強になったので、次回以降は同じことでつまずかないようにします。

>>527
1から作る力がないんで、元々教授が作ったソースを改変して作ってるので、多分その名残だと思います。
USBで123456と送ると、612345にして返すとかいう単純なプログラムだった記憶があります
megaにしたのも「AD変換するならmegaのほうがいい」といわれて決めただけなので、入門どころか門前で土下座してるような状態です。


529:デフォルトの名無しさん
09/01/18 22:10:48
Linuxがどうとかって話があったよな
URLリンク(www.technobahn.com)

530:デフォルトの名無しさん
09/01/18 23:32:32
Palmに飽き足らず、
こんどはlinuxを潰す気か


531:デフォルトの名無しさん
09/01/19 20:21:20
Linuxに法則発動か。
ナンマイダブナンマイダブ。

532:デフォルトの名無しさん
09/01/19 20:26:10
上の方じゃcharにword押し込んでるのに指摘しない人ばっかだし。
組込み業界に法則発動してるんじゃね?ww

533:デフォルトの名無しさん
09/01/19 20:29:12
小出しにされたから

534:デフォルトの名無しさん
09/01/22 13:16:29
SH2で2chのシリアル受信を同時に行いたいんです。

データの取りこぼしがないようにDTCとDMAを
使おうと思ってます。
大筋でどんな感じにすればいいでしょうか?

535:デフォルトの名無しさん
09/01/22 15:16:14
ブー

536:デフォルトの名無しさん
09/01/22 15:52:24
>>534 H8系はたくさんやってるから助言はできるとおもうが、レートを書いてくれないことには
方針が確認できないじゃん。イックニか384くらいまでなら割り込みでも取りこぼさないし。
俺はふつうに割り込みで書いて、耐久性はringバッファのサイズで調整したぞ。

537:534
09/01/22 17:02:55
ボーレートは38400です。
参考までにリングバッファのサイズは
どれくらいまで大丈夫でしたでしょうか?

538:534
09/01/22 17:27:41
シリアルの割り込み関数にはこんな感じに書いてます。
リングバッファのサイズは256バイトです。

------------------------------------------------
INTDI  //割り込み許可
ucW = SCI2.RDR;
SCI2.SSR.BIT.RDRF = 0;
if (uiSCI2_RecCount < MAX_REC_BUF) {
ucSCI2_RecBuf[uiSCI2_RecPut] = ucW;
uiSCI2_RecCount += 1;
uiSCI2_RecPut += 1;
if (uiSCI2_RecPut >= MAX_REC_BUF) {
uiSCI2_RecPut = 0;
}
}
INTEI    //割り込み許可
------------------------------------------------

539:534
09/01/22 17:28:11
連投すみません。

INTDI  //割り込み禁止

の間違いです。

540:デフォルトの名無しさん
09/01/22 18:20:24
384なら普通に割り込みで問題ないと思う


541:デフォルトの名無しさん
09/01/22 18:34:50
割り込み突入時は割り込み禁止状態だよ。

542:デフォルトの名無しさん
09/01/22 18:35:57
SH2だと割り込みレベルで考えなきゃいけないんだった。

543:デフォルトの名無しさん
09/01/22 19:01:33
多重割り込みしないと取りこぼすよ
禁止にしない方向で


544:デフォルトの名無しさん
09/01/22 19:06:29
割り込み以外のところで長めの割り込み禁止があったら、地獄行きだろうな?

545:534
09/01/22 19:12:29
みんなありがとう!
とりあえず割り込み関数の中の割り込み禁止は無くしました。
が、やっぱり取りこぼしが発生しているみたいです。(;;)

受信したデータをmainループで回して処理していて、
その度にRecCount をデクリメントしてるんだけど、
処理が追いつかずにRecCountの値が
MAX_REC_BUFを超えてしまうんです。
これは、DMA&DTCを使っても同じことなんでしょうか・・・

546:デフォルトの名無しさん
09/01/22 19:14:31
RecCount をデクリメントしてるところで
SCIの割り込みがかからないようにしてる?

547:534
09/01/22 19:18:52
>546さん
してます。
具体的には、こんな感じに。

-----------------------------------------------
INTDI
if(uiCH==0){
ucW = ucSCI0_RecBuf[uiSCI0_RecGet];
uiSCI0_RecCount -= 1;
uiSCI0_RecGet += 1;
if (uiSCI0_RecGet >= MAX_REC_BUF) {
uiSCI0_RecGet = 0;
}
}else{
ucW = ucSCI2_RecBuf[uiSCI2_RecGet];
uiSCI2_RecCount -= 1;
uiSCI2_RecGet += 1;
if (uiSCI2_RecGet >= MAX_REC_BUF) {
uiSCI2_RecGet = 0;
}
}
INTEI
-------------------------------------------

548:デフォルトの名無しさん
09/01/22 19:26:50
INTDI
uiSCI0_RecCount -= 1;
INTEI
って、感じかな?
それでだめなら、SCIのエラーを調べてみるとか
1CHだけで動かして処理が間違ってないか確認するとか

549:デフォルトの名無しさん
09/01/22 20:12:50
RecCountっているの?

#define MAX_REC_BUF 256
割り込み側:
ucSCI2_RecBuf [Put++ & & (MAX_REC_BUF-1)] = ucW;
メインルーチン側:
ucW = ucSCI2_RecBuf [Get++ & (MAX_REC_BUF-1)];
#define IsEmpty (Get == Put)
こんなんでいいのでは


550:デフォルトの名無しさん
09/01/22 20:35:08
それだとPutがGetを追い越さない判定が必要?

551:デフォルトの名無しさん
09/01/22 20:42:03
追い越してもいい作り
256バイトの間読まなかったらそれはリードの責任ということで

552:デフォルトの名無しさん
09/01/22 21:18:25
それと、受信割り込みが2つあるなら>>549のセットも2つ用意するべき
1つのバッファで受けようとすると予期しないことが起こる
2つのバッファで受けて、メインルーチンで順番に処理する
フロー制御する場合は割り込み側でバッファのポインタを見て行う

553:デフォルトの名無しさん
09/01/22 21:25:04
フロー制御するなら、別にカウンタがいるのでは?

554:534
09/01/22 21:46:33
>>548さん
試してみましたが、駄目でした。
片CHのみの動作は各ch共にOKで、
SCIエラーなどは発生していないです。

>>549さん
ご指摘のような感じにも書き直してみましたが、
状況変わらずです。
やはりメインルーチン側の読み取りが
追いつかないようです。
ちなみバッファは各ch用意しています。

外部からのシリアルデータは2つのCHに
常に同時に入ってくるような動作をするのが
ネックのような気もします。

555:デフォルトの名無しさん
09/01/22 21:50:18
マイコンの動作クロックは上げられないの?
もしくはフロー制御は出来ないの?

556:デフォルトの名無しさん
09/01/22 21:54:15
もしくは受信バッファのサイズを大きくしてみるとか?

557:デフォルトの名無しさん
09/01/22 21:59:00
追いつかないってことは割り込みが連続で発生して
メインルーチンに処理が戻ってこないとかかね
もしそうなら見積もりが甘かったな
マイコンの選定からやり直しだ

558:デフォルトの名無しさん
09/01/22 22:09:49
せめて割り込み部分はアセンブラでギチギチに書いてクロックを稼ぐ
多分何も考えずにCに吐かせると、えらい無駄なコードになってるだろうから


559:デフォルトの名無しさん
09/01/22 22:10:32
なんか論点ズレてると思うんだよね。

俺は恐らく>>534の書いたコードのアルゴリズムが根本的に下手なだけだとおもう。
「RecCount をデクリメント」なんて書いてる時点で変だと思う奴が誰もいないのかよ。

何かのフラグをメインでポーリングして1バイトずつチビチビ処理するような
コードになってるんだろうけど、そりゃそんなやり方じゃダメだろ。

デリミタ方式かSTX,ETXみたいなやり方かわからんけど、
一区切りのデータがバッファに入った時点で丸ごとバッファからデキューして
処理するように書かないと。

560:デフォルトの名無しさん
09/01/22 22:18:16
最適化してコンパイルしてなかったとか?

561:534
09/01/23 01:05:59
皆さん、アドバイスありがとうございます!
>>555さん
動作クロックをあげたり、フロー制御を入れたりというのは
出来ないんです。
>>556さん
バッファのサイズはもっといろいろと試してみたいと思います。
>>557さん
メインに全く戻らないという訳ではないです。
ただ受信のピークに取りこぼしが発生しちゃっている感じですね。
>>558さん
アセンブラ・・・出来ることなら避けたいです・・・
>>559さん
ご指摘の通りでポーリングで回して
受信したデータを解析、処理させています。

決まったデリミタがなく、通信の長さがまちまちのものから、
必要な一部のデータだけ抜き取らないといけないので、
どう区切るかが難しいのですけども。

メインでちまちまとデータを解析するなら、DTC使おうが、
DMA使おうが状況は同じでしょうか?
>>560さん
そんなことはないです。


562:デフォルトの名無しさん
09/01/23 01:22:59
>>561
だから一番誰でも思いつく単純でわかりやすい方法は、
少なくともデータの区切りかどうかの判定まではISRの中でやってしまうこと。

一区切りのデータを受信した時点で初めてフラグを立てるんだよ。
で通常ルーチンでバッファの中のひとまとまりのデータを解析すればいい。

563:デフォルトの名無しさん
09/01/23 01:28:03
2CH分のデータ解析処理を同時に動くように工夫した方がいいような。

564:デフォルトの名無しさん
09/01/23 04:00:23
他の割り込みは使ってる?タイマとか。SCIの割り込みレベルを最優先にしてる?
256というサイズは何から決めた?通信の1バーストがそれより短いことは確実?
バーストとバーストの間のお休みはどの位?
決まったデリミタが無い状況で何を手がかりに切り出してるの?

俺が書いたpgmでは、デリミタを認識して状態遷移する部分はメインループに書いたな。
割り込みはringに蓄積するのみ。遅いレートならメインループ1回に1文字取り出す方式でも
充分ついていったし。384なら、while(今ringに溜まってる分)取り出す方式のがいいかもだが、
2ch並行処理がぎくしゃくすると思うから、前者を奨めるなあ。

565:564
09/01/23 04:06:50
こんな感じ:
for(;;)
 if( uiSCI0_RecCount )
  chtask0();  // CH0の取り出し・解析
 if( uiSCI1_RecCount )
  chtask1();  // CH1の取り出し・解析
}
3MHzの8085で、4.8Kを4CH同時に処理できたよ。38400でも割り込み間隔1/8でしょ。
32bit機で、clockが10倍ぐらいなら十分以上に余裕があるはず。

566:デフォルトの名無しさん
09/01/23 05:00:23
>>538
1バイトしか読んでないような気がするんだが、
なぜ FIFO が空になるまで読み出さない?


567:デフォルトの名無しさん
09/01/23 16:31:27
解析が始まると終了するまで処理続けてるとか?

568:534
09/01/23 18:19:49
皆さんから頂いたアドバイスに基づいて、
シリアル受信部で一定の処理の後、
フラグを立て、そのフラグをメインループで
見て解析を行うように変更してみました。

しかしながら、片方のCHは動作してくれるものの、
もう片方はデータを取りこぼしてしまい
正常に動きません。

やはり、シリアルの受信をDMA、DTCで
バッファに格納しないとだめなのではないでしょうか?
(もし理解に誤りがありましたら、ご指摘ください。)

タクトタイムは1秒間に20回ほど、
1回につき両CHにそれぞれ240バイトほどの
データが送られてきます。

569:デフォルトの名無しさん
09/01/23 18:47:41
データを取りこぼしてしまいって、
通信エラーじゃなくて解析が間に合わないってこと?

570:534
09/01/23 18:54:36
受信したバッファとラインモニタの内容を
比較すると受信したバッファが飛び飛びに
なっているんです。

571:デフォルトの名無しさん
09/01/23 19:06:39
試しにシリアルの速度落としてみれば?
速度化ロジックかすら分からないのだとしたら。

572:デフォルトの名無しさん
09/01/23 19:07:08
>>571
速度かロジックか、ね。

573:デフォルトの名無しさん
09/01/23 19:36:08
マイコンの動作クロックが気になる。

574:534
09/01/23 20:00:01
水晶が12.288Mhzで
動作モードはモード2。
クロックモードは3(MD2=1、MD3=1)です。

送信元の速度は固定なので、速度は落とせないんです・・・

575:デフォルトの名無しさん
09/01/23 20:36:43
取りこぼすCHの割り込み優先順位を上げてみる。

576:H.K
09/01/23 20:41:46
[5]
#include<stdio.h>
main()
{
int x,ans;
char y;
printf("年号と年:");
scanf("%c%d",&y,&x); /*文字型*/
while(y=='m'||y=='t'||y=='s'||y=='h')
{
if(y=='m')
ans=1868+x-1;
else if(y=='t')
ans=1912+x-1;
else if(y=='s')
ans=1926+x-1;
else if(y=='h')
ans=1989+x-1;
printf("%d\n\n",ans);
printf("年号と年:");
scanf("%c%d",&y,&x);
}
printf("プログラムを終了します。");
}
までできているのですが、2回目にならず終了してしまうため直してください


577:デフォルトの名無しさん
09/01/23 20:46:30
嫌です

578:534
09/01/23 20:50:36
>>575さん
CH1を優先すれば、CH2が取りこぼれ
CH2を優先すれば、CH1が・・・

579:デフォルトの名無しさん
09/01/23 20:56:03
>>566の指摘が正解かも?

580:デフォルトの名無しさん
09/01/23 21:12:28
割り込み処理をいじって負荷が掛かるようになったんじゃないの?

581:デフォルトの名無しさん
09/01/23 22:11:37
>>578
対向機の速度を変えられないならダミーを作ればいいじゃない。
Windowsにも相変わらず端末エミュレータがついているんだから。

582:デフォルトの名無しさん
09/01/24 00:47:11
RecCountにvolatileつけないとコードによっては最適化でとんでもないことになってるかも?

583:デフォルトの名無しさん
09/01/24 03:09:01
>>547
uiCHってどうなってんの?
両chでenqueueされたら、もちろん両chでdequeueしてるんだよね?

584:534
09/01/24 19:39:19
>579
シリアルの割り込み時に、まとめて受信する。
なんて出来ましたでしょうか?
>580
上に書いたのそんなに変わらないです。
>582
RecCountにVolatileはついてないですが、
同時にデータが入ってこなければ、ちゃんと動いているんですよね・・・
>583
メインループでCH1とCH2を交互に呼んでいるだけですよ。

585:デフォルトの名無しさん
09/01/24 19:49:24
割り込み処理中にSCI2.SSR.BIT.RDRFが再度立つ可能性がある。
今の状況だと、割り込み処理が悪いのかデータ解析処理が悪いのかわからないので、
片CHをデータ処理しないで空読みだけして、
バッファの内容がおかしくならないかどうか確認してみては?

586:583
09/01/24 20:08:16
>>584
>>547では各chバッファにデータが入っているかどうかを
main側がどのように判定しているのかが読み取れない。
>>547のコードをCH1(uiCHが0)とCH2(uiCHが0以外)で交互に呼ぶだけだったら、
とても正常に動くようには見えないよ。

587:デフォルトの名無しさん
09/01/25 03:53:36
だな。>>565みたいに、それぞれのCHのringにデータがあるときは切り出し処理をする、
っていうふうに書いてあるのかな?

>>584 SH2のそのシリーズがどうかはワカラナイけど、シリアルがFIFOを持っていて、
FIFOに幾つ溜まるとRDRFが立つのか、その敷居値を設定するレジスタがある奴もある。
ここではふつうにFIFO無しで、1バイト受信があったらRDRFが立つシリーズだと思ってる。
SH2の型番書いてくれたら、ルネサスのサイトでマニュアル読めるのだが。FIFO付きかどうか
ここで答えてくれれば、つぶす方向がひとつ減るね。

INTDI/INTEIが必要なのは、割り込み処理の入り口・出口ではなくて、メインtask側で
それぞれのCHのRecCountを--する時だけだよ。そのことは解ってる?
ringbuffer[リードポインタ]からバイトread
INTDI
uiCHx.RecCount--;
INTEI
こういうふうに書くのがいちばん負荷が少ない。

588:534
09/01/25 11:31:39
>585さん
試してみたいと思います。
>586さん
547の前に
--------------------------------
  if (uiSCI0_RecCount==0){
     return(-1);
}
----------------------------
と書いてます。
>587さん
SH2-7144を使っています。

INTDI/INTEIに関しては、前にもご指摘をいただいたので、
・割り込みの入り口・出口にはなし
・RecCount--にだけ書く
はやっています。

589:デフォルトの名無しさん
09/01/25 13:13:27
>>588
それだと、CH1が受信していないあいだは、CH2はチェックされないのだが。

590:534
09/01/25 13:18:34
>589さん
いや、当然CH2も同じようにチェックしてますよ。


591:デフォルトの名無しさん
09/01/25 13:56:35
>>590
「547の前に書いている」と言っているが、いったいどういうコードになってるんだ?
こちらとしてはコードがバグってる可能性を疑っているのであって、
「当然正しく作ってますよ」的な説明では全く意味が無いのです。
もしコードのレビューが必要なら、できるだけ無加工なものをどこかに貼っておけば、誰かが見るでしょう。

592:534
09/01/25 14:46:38
とりあえず、547の関数全部書いて見ますね。
この関数をメインループの関数から呼び出して
コードを解析する流れとなっています。

593:534
09/01/25 14:47:44
int sio_rec(_UBYTE ucCH){
_UCHAR ucW;
if (ucCH==0){
if (uiSCI0_RecCount==0){
return(-1);
}
}else{
if (uiSCI2_RecCount==0) {
return(-1);
}
}
if(ucCH==0){
ucW = ucSCI0_RecBuf[uiSCI0_RecGet];
INTDI
uiSCI0_RecCount -= 1;
INTEI
uiSCI0_RecGet += 1;
if (uiSCI0_RecGet >= MAX_REC_BUF) {
uiSCI0_RecGet = 0;
}
}else{
ucW = ucSCI2_RecBuf[uiSCI2_RecGet];
INTDI
uiSCI2_RecCount -= 1;
INTEI
uiSCI2_RecGet += 1;
if (uiSCI2_RecGet >= MAX_REC_BUF) {
uiSCI2_RecGet = 0;
}
}
return(ucW);
}

594:デフォルトの名無しさん
09/01/25 15:15:55
>>588 MyDocumentsに rjj09b0026_sh7144.pdf があった。 このシリーズでいいよね?
593のコードは自分のテキストエディタに貼って、自分の書いたコードと見比べてみるよ。

595:デフォルトの名無しさん
09/01/25 15:19:37
>>593
if (uiSCI0_RecCount==0){
return(-1);
}
}else{
if (uiSCI2_RecCount==0) {
return(-1);
}
これは・・・いいのか?

596:デフォルトの名無しさん
09/01/25 15:26:41
>>593
uiSCI0_RecCount と uiSCI2_RecCount をvolatileにしないと危ないが、
そこ以外は良さそうだ。

そもそもリングバッファのサイズは256で足りてるのだろうか。
enqueue側でオーバーフローした場合に検知できるようにしてみたら?

597:534
09/01/25 15:28:24
>594さん
はい。そのシリーズです。
>595さん
返り値が-1の時は解析処理を行わない。という風にしてます。

598:デフォルトの名無しさん
09/01/25 15:34:31
pdfの、SCIのとこざっと読んだ。FIFOは無いタイプ。だからRDRFの度に1バイト読み取り、
ringに蓄積する方式でいい。 593の、int sio_rec(_UBYTE ucCH) をメインloopから呼ぶには
たぶん、ucCHを0かそれ以外で呼んでいるよね。上の方でCH0/CH1で使っていると書いてた
ように思うが、sio_rec()関数の中ではCH0でないとき、SCI2_xxxxxの資源を読んでいる。
ハードの接続条件をもう一度確認してみて。2CHというのは、CH0/CH1なの?CH0/CH2なの?

599:デフォルトの名無しさん
09/01/25 15:34:46
>>597
そうじゃなくて
uiSCI0_RecCount==0
uiSCI2_RecCount!=0
になることはないってこと?

600:598
09/01/25 15:39:20
おお、俺以外にも暇人が多数。>>597 良かったね。

それにしても関数の設計が冗長だな。なんでmainから呼ぶのに「このCHのデータ返してね」
と呼んで、しかも返却値に「無かったよ」とか作るんだ。>>565のように作ればイベントドリブン
な作りにできるし、「無かったよ」 なんていうリターンコードも無しにできるのに。

601:598
09/01/25 15:45:47
割り込み処理は、CH毎に別個に用意してるよね?=ベクタが指すルーチンは
(コードが似ていても)物理的に別ルーチンにしてあるよね?
それぞれのCH毎に、ライトポインタ・リードポインタ・RecCountを持っているよね?
ライトポインタの更新は割り込み側からのみ、リードポインタの更新はメインループ側からのみ
行っているよね? RecCountの更新については既に確認したけど。

602:598
09/01/25 15:56:57
まだ「冗長」というだけで間違いは見つからないが、とりあえず、呼び出すときに各CHの
RecCountが0でないときのみ呼び出す形にするだけで、return(-1)が要らなくなる。
sio_rec1( )とsio_rec2( )に分けると引数のucCHが要らなくなるしそれを判定するif文も要らない。
残る本質はリードポインタ(RecGetがそうだよね?)からのgetとRecCount--だけになる。
コンパイラによっては-=1;と--;で違うコードを吐くものもあるので、減算は--;でやって欲しい。
また何か気が付いたら書く。チェックして欲しいコードは貼ってくれ。ちょっとお茶タイム。

603:598
09/01/25 16:38:06
>>599の指摘について考えてみた。どちらかのCHについてreturn(-1);を返す条件が成立した時
にも、もう一方のCHについては処理すべきデータがあるかもしれないわけだ。そちらは次の
メインループで引っかかると考えているのだろうが、そこに遅れが入り込む余地があるね。

呼び出し側で(565のように)RecCountを判定するのも、呼ばれ側で判定するのも、僅かな
タイミングの違いだけで同じ、と考えたみたいだけど・・・違うのかもしれない。

604:598
09/01/25 16:45:41
メイン側は、sio_rec( )の結果を(-1でない場合は)受信したバイトとして解析処理に渡すのだと
おもう。この推測で合ってる? とりあえず、上で冗長と指摘した部分を刈り込んでみては?
sio_rec( )を呼び出す前にRecCountを判定する。sio_rec( )はRecCountがある(=非0)場合のみ
呼び出されるのだから、必ず減算処理をしてよい。CH0と2でルーチンを別にすれば引数も
それに対する判定も要らない。

605:デフォルトの名無しさん
09/01/25 16:51:23
1レスにまとめて書いてくれよ

606:598
09/01/25 17:31:07
もう就寝時間・・・あとは明日未明にです。お休みなさいZZz.・・・

607:デフォルトの名無しさん
09/01/25 18:32:31
ucW = SCI2.RDR;
SCI2.SSR.BIT.RDRF = 0;
if (uiSCI2_RecCount < MAX_REC_BUF) {
ucSCI2_RecBuf[uiSCI2_RecPut] = ucW;
uiSCI2_RecCount += 1;
uiSCI2_RecPut += 1;
if (uiSCI2_RecPut >= MAX_REC_BUF) {
uiSCI2_RecPut = 0;
}
}
else
for(;;);
って、やってみたらどうよ。

608:598
09/01/26 03:22:33
私の、製品になっている(確認済みの)割り込み処理は:
void rxrdy1(void) {  /* CH1受信 int. */
 ucSCI1_RecBuf[uiSCI1_RecPut] = SCI1.RDR; /* 1文字バッファリング */
 SCI1.RDRF = 0;    /* RXready flag reset */
 uiSCI2_RecCount++;  /* データカウント UP */
 uiSCI1_RecPut = (uiSCI1_RecPut+1)&(sizeof ucSCI1_RecBuf-1); /* リングポインタ更新 */
} これだけですよ。ringバッファサイズを2**nにしておけば、ifで循環させなくてもいい。
 一時変数ucWにRDRを読んでからringバッファに格納するコードも無駄ですよね。
受信エラー割り込みはベクタが別ですよね。そちらではエラーフラグをリセットしてますか?

内蔵RAMは8Kと思っていいですか? ringサイズを256にした理由をまだ回答もらってないけど
RAMが潤沢でないから、でいいのかな?

609:デフォルトの名無しさん
09/01/26 15:17:52
>1回につき両CHにそれぞれ240バイトほどの
>データが送られてきます。

610:534
09/01/26 15:21:39
皆さん、本当にありがとうございます。
そして、微妙にレスポンスが悪くて申し訳ないです。

>597さん
>uiSCI0_RecCount と uiSCI2_RecCount をvolatileにしないと危ない

コードの変更を検討してみますね。

>そもそもリングバッファのサイズは256で足りてるのだろうか

非常にかつかつなので、足りてない可能性も否定出来ません。
現在は、512にしていますが、それでも両CHからの受信は出来ない状態です。
1024にすると本体RAM容量が潤沢でないこともあって、
動かなくなってしまいます。

>599さん
引数がCH==0の時は、uiSCI0_RecCountだけチェックして、
引数がCH!=0の時に、uiSCI2_RecCountをチェックしています。

>607さん
なるほど。バッファサイズが妥当なのかどうか、切り分けが出来ますね。

611:534
09/01/26 15:30:44
>598さん
たくさんのレス本当にありがとうございます。

>2CHというのは、CH0/CH1なの?CH0/CH2なの?
CH0 → SIO0使用
CH1 → SIO2使用
となっています。

>関数の設計が冗長だな
指摘されて、すごく勉強になっています。
コードが冗長部分も見直していきたいと思います。

>割り込み処理は、物理的に別ルーチンにしてあるよね?
はい。それぞれ別ルーチンで持っています。

>CH毎に、ライトポインタ・リードポインタ・RecCountを持っているよね?
はい。持っています。

>メイン側は、sio_rec( )の結果を(-1でない場合は)受信したバイトとして解析処理に渡すのだとおもう。この推測で合ってる?
はい。その通りです。

>受信エラー割り込みはベクタが別ですよね。
>そちらではエラーフラグをリセットしてますか?
はい。しています。
ここらへんは別ソフトでの動作実績があることと、
各CHの独立した動作で問題ないことから大丈夫だと思うんですが。

612:598
09/01/26 15:55:35
>1回につき両CHにそれぞれ240バイトほどの
>データが送られてきます。
いやこれは覚えていますが、その1回ごとの間のお休みがどの位、ってのはまだ未回答かと。
お休みが2mSぐらいだったりしたら、切れ目無しと変わらないし(w
1回240バイトほどで、「次が来るまでに解析処理が取り出し終わる程度に十分間隔が長ければ」
処理が間に合うんですよね。

>>611の回答からすると、ドライバ層は(多少冗長でも)だいじょぶっぽいですね。
するとメインの切り出しのほうを疑うべきじゃないかな。ringバッファにデータがあればそこから
バイトを取り出したあと、状態遷移をするような造りを、CH毎に書いてると思うのですが、
その辺はここに出すのはヤバいの? なんならメールで貰って見てあげてもいいよ。

613:デフォルトの名無しさん
09/01/26 16:05:07
とりあえずポインタとカウンタ変数、計6つ?をregisterにしとき。
それとバッファサイズを256にしておけば、unsigned char宣言で
>if (uiSCI2_RecPut >= MAX_REC_BUF) {
>uiSCI2_RecPut = 0;
>}
こんな処理は必要なくなる。

614:598
09/01/26 18:07:06
>>534 613は信じちゃダメだよ。 今日はもう寝ます。また明日未明Zzz・・・

615:613
09/01/26 18:13:22
は?なんでだよ。255(0xff)をインクリメントしたらオーバーフローして0(0x00)になるだろうが。
そんなことも分からん人がアドバイスしてていいのか?

616:デフォルトの名無しさん
09/01/26 18:38:02
データ解析後の処理って、データ解析処理と平行して処理できるようになってる?

617:デフォルトの名無しさん
09/01/27 00:29:27
>>613は後でバッファサイズを増やしたくなったとき、
もしくは減らしたくなったときどうするんだろうな

618:デフォルトの名無しさん
09/01/27 03:36:29
>>617
リングバッファ知らんの?
既に>>549でも指摘したが、バッファサイズを2の累乗にして
インデックスをそのバッファサイズ-1でマスクすると、
値はバッファの範囲(128なら0-127)を取る。
write : buf[pos++ & (BUFSIZE-1)] = data;
read : data = buf[pos++ & (BUFSIZE-1)];
posはBUFSIZEの範囲を表現できる型にしておく。
例えばBUFSIZEが1024ならposは16bit変数として宣言。
これ、リングバッファ作る時の常識ね。

619:598
09/01/27 04:00:48
リングのmaskのことじゃないよ。>レジスタにしとき。←その6つはメモリであるべきでしょ。
リングのmaskなら608の書き方で615と同じに最適化されますよ。
もうじき朝飯食って出勤だから、また534と話ができるのは午後になっちゃうんだよな。
とりあえず、612の最後の行のためにメアド入れとく。

620:デフォルトの名無しさん
09/01/27 04:01:51
>>618
その「常識」とやらはリングバッファを知ってるかどうかとは関係ない。

明示的にラップさせたほうがバッファサイズの調整が柔軟にできるだろ。
2の累乗サイズに固定することにたいした意味は無い。

たまたまバッファサイズが2の累乗になっていれば、明示的にラップさせる
コードをコンパイラが最適化の一部としてマスクなりオーバーフロー任せなりに
することもできる、かもしれない。そんなことはほとんどの場合ではどうでも
いいだろう。

本当に数命令の違いに意味があるなら、目立つコメントでバッファサイズの
制約を記載すべきだ。えらそうに「常識」なんて言わずにな。

621:デフォルトの名無しさん
09/01/27 04:18:27
Linuxerにとっては常識。
ドザは常識が無い。
バカに組み込みが無理な好例と言えよう。

622:デフォルトの名無しさん
09/01/27 04:21:24
nintendo ds と psp でlinux動かしたり出来るみたいですけどこれも組み込みなんでしょうか?
どうもusbドライバをハックしたり、ファームフェアをアップするときに自作のカーネルを入れてようなんですけど。

623:デフォルトの名無しさん
09/01/27 06:05:53
>>620
>>618はな、>>608が示した
> uiSCI1_RecPut = (uiSCI1_RecPut+1)&(sizeof ucSCI1_RecBuf-1); /* リングポインタ更新 */

これと同じ意味なんだよ。
たまたま、じゃねーの。
常識なんだよカス。

624:デフォルトの名無しさん
09/01/27 06:18:59
>>622
ゲーム機がARM使ってるからlinuxで動かせるねってだけ。

625:デフォルトの名無しさん
09/01/27 06:45:37
LINとかの1線インターフェース(GND線含めて2本)
を試してみたいんですが、参考になるサイトが少ないです。
誰か知ってる人いませんか?
非同期のI2Cみたいな考え方でいいんでしょうか?

626:613
09/01/27 11:02:13
>>534
データを取りこぼす原因としては
1)割り込みが間に合わずシリアルレジスタから読み込めなかった
2)データ処理が追いつかず受信バッファがフローした
のどちらかだと思うけど、今回は多分2)の方だよね
(本当は、そんなこと簡単に見極められるんだから>>534さんが調べて示さなきゃならんけど)

で、1回分の受信サイズを240として、2回分以上の512にバッファサイズを設定しても
取りこぼすってのは、根本的にデータ処理が間に合ってないということなので、
>>534さんがするべきことはとにかく高速化の1点。

なので高速化の一手法として>>613を書いたわけなんで、まぁ参考にしてください。
仮にレジスタ変数として使うことが出来たら今回のケースじゃ割込禁止/許可もいらんのじゃないか。
一度、コンパイル結果のアセンブリソースを見てみるといいよ。どういう無駄な処理が入ってるとか
すぐ分かるよ。

627:デフォルトの名無しさん
09/01/27 11:28:10
uiSCI1_RecPut はどこで更新されるの?

628:デフォルトの名無しさん
09/01/27 14:42:41
このスレ人は居るみたいだけど
話にならんレベル

629:デフォルトの名無しさん
09/01/27 15:18:47
>>627 ringの書き込みポインタだから、受信割り込み処理の中。そこだけでいい。
mainで取り出すほうは読み出しポインタ(_RecGet)をring状に使って読み出す。
どれだけringに滞留しているかのカウンタが_RecCountで、この変数だけが割り込みと
メインループ両方から更新される。

>>628 もうちょっと遊びたかったのに、534も呆れて逃げちゃったみたい。

630:デフォルトの名無しさん
09/01/27 16:21:49
DTC、DMA使っても同じ結果になるじゃないの、今回の場合?

631:534
09/01/27 16:38:10
>613,626さん
確信犯的にオーバーフローさせるとは。メモメモ。
状況に応じて使ってみたいです。
アセンブリコードも眺めながら、最適化やってみますね。

>616さん
なっていますよ。
解析の進行具合をフラグで持つようにしています。

>598さん
>その1回ごとの間のお休みがどの位か
お休みは短くて60msくらい、長ければ100msくらいでしょうか。

>メインの切り出しのほうを疑うべきじゃないかな。
なるほど。
コードの記載はもう少し冗長な部分を省いて、
それで解決出来なかった時にさせてください。

実は今日から1週間ほど治具を貸し出すことになってしまい、
今は十分なテストが出来ないんです。
治具が戻ってきたら、また結果を書かせていただこうと思いますので、
どうぞよろしくお願いいたします。

>627さん
>629さんのおっしゃっている内容で合っています。

632:598
09/01/27 17:42:30
おお、よかった。まだ呆れられてはいなかったか。ではまた明朝Zzz・・・

633:534
09/01/27 17:55:46
>630さん
DMA、DTCの使用も試みているんですけど、
別の理由でまだうまく行きません。

DMA・・・受信は出来たけど、
    解析処理ルーチンが未完成。
DTC・・・ベクタの設定とか書いてみたけど、
    転送先に何も送られて来ず。
    何か間違っているみたい。

>598さん
呆れてなんてないですよ。
一人で煮詰まった状態で作業しても捗らないですし、
とても参考になっています。

634:598
09/01/28 04:45:00
DMAは、受信する長さがきっちり決まってないと使えないよね。その辺はだいじょうぶなの?
石がSH2で38400が2CHなら、割り込みに食われる比率なんて屁みたいなもんだから、
今回はringバッファでいいと思うけどなあ・・・ 受信の物理層を速くしても、そこじゃないって
ことなら、アプリ層の改善は必須だし。

水晶は12.288とのことでしたが、RISC方式の説明の所には40MHz動作時・・・とかある。
SHで12M程度の動作のわけないなと感じてたが、実際の動作周波数はどの位?

635:598
09/01/29 15:09:34
メインタスク側で受信フレームを再構成するときの常套手段:
・フレームにタイマ張る。「頭」バイトを検出して「中身待ち」に遷移するときに、bitrate*フレーム長
 から想定される時間*(1.5~2.5)ぐらいのタイマを張り、break時には「頭待ち」へ戻す。
 フレームの途中でコネクタが抜けるなどしたときの回復手順。

受信エラーバイトを含むフレームを捨てるようにしてある?
・コードがASCIIとかの、8bitの中でも限定された文字セットなら、受信エラー時の文字を
 (FFとかの)使わない文字に変えてringに入れる。
・通信がバイナリとかで、8bit全ての文字を使うなら上の手法は使えないので、割り込みから
 メインに伝えるイベントコードを16bitにして、0000~00FFは受信バイト、80xxは受信エラー
 のバイト、とかやる。
メイン側では、フレーム再構成の際に上記の「受信エラー文字」を読みとったら「頭待ち」へ
遷移する。

636:598
09/01/29 15:15:56
「尻尾」文字を検出したら、「頭」とは違う長さのタイマを張り、「回線切れ」 を監視する。
「お休み時間」の2~2.5倍ぐらいにするのが一般的。break時には 「受信したデータ」を消し
「受信無し」状態に戻る。( 状態は「頭待ち」 だが、受信済みデータも無し(=起動時と一緒) )

一般的な手法助言はこんなもんかと。あとは具体例が出されたら考える。

637:デフォルトの名無しさん
09/01/29 17:16:13
以上、2ch無料サポートセンターでした

638:598
09/01/30 15:46:40
んま~、なんとフォローのいいこと♪ 534さんが出てこないのは、そうとう悩んでるな

639:デフォルトの名無しさん
09/02/01 07:12:51
8bitMCUで、割り込みルーチン内で32bit変数をカウントし、
メイン側からその変数を読み出したいのですが、
割り込みを停止せずにアトミックに読み出す方法はあるでしょうか?

割り込み間隔(割り込み中時間ではなく)は、
メイン側の1回の変数参照完了時間よりも長いと仮定します。
割り込み中のカウントはで32bit変数を+1インクリメント
する単純なものです。変数がオーバーフローしても特に処置なしです。

640:デフォルトの名無しさん
09/02/01 13:34:46
>>639
この場合は単純な二度読みして一致しているかどうかでいいんじゃないの?
(チャタリング除去の場合は無駄だ~なんていうとまた誰か発狂する奴が出そうだがw)

リトルエンディアンとして、読み出しの最初と最後に1バイト目(8~15bit)を読んで、
一致していればアトミックに読めたと判断する。

もちろん2回のリードの間に256以上インクリメントされる可能性がある場合は
この方法は使えない。

641:デフォルトの名無しさん
09/02/01 13:59:10
>>640 の手法に感動した。 でも、>>639 の必然性は何なのだろうか?
読み出しの前に割込禁止して読み出し、すぐ割込許可、で素直な手法だと思うが。
ringバッファの滞留数だったりしたら、32bitは「やりすぎ」だとおもう。16bitで充分。
8bitMCUということを考えたら、ringは256までにして8bitでもできるぞ。
それなら割込禁止とか考えないでもアトミックにできる。

642:デフォルトの名無しさん
09/02/01 14:35:03
>>639
アトミックでない方法でカウンタを2回読み出して、
その値が一致するまで繰り返し読み出す。
一致したらその値が正解。

643:642
09/02/01 14:41:47
ごめん、リロードせず書いたら既出だった。

>>641
起動後の時間をタイマ割り込みで例えば1msごとにカウントするなら、32bitくらい欲しい。
このタイマカウンタが1つあれば、個別用途のタイマはその差分で計れるしね。

644:デフォルトの名無しさん
09/02/01 16:36:35
起動後の時間が必要な場合もあるのか~。俺の作ったのは 「時刻」 か、インターバルしか
なかったから、その発送はなかったわ。

645:デフォルトの名無しさん
09/02/01 16:38:39
RTCと起動後の時間だけあればいい。
そこから派生して時刻やインターバルがとれるのだから。

646:デフォルトの名無しさん
09/02/01 16:55:11
まあ起動後の時間云々はちょっと例外的というかなんかシュールな例えのような
気もするけど、ラッチがついてないHWカウンタやタイマは(場合によってはADCあたりも)
非同期的な更新を止めてアトミックに読むというのは物理的に不可能だからねえ。

647:デフォルトの名無しさん
09/02/01 20:35:43
タイマーの割り込み許可を一時的に止めるとか?

648:デフォルトの名無しさん
09/02/05 12:05:26
組み込み系の募集広告で「エレキとソフトの間の作業をお任せします」と記載
「エレキとソフトの間の作業」ってどんなですか?
やはりプログラム言語は使うのでよね?

649:デフォルトの名無しさん
09/02/05 12:52:57
エレキとソフト両方判る人募集ってとこか?
間ってさっぱりわからんが

650:デフォルトの名無しさん
09/02/05 13:11:03
因みに私はエレキの意味も分りません。
すいませんが、教えて頂けないでしょうか? m(__)m


651:デフォルトの名無しさん
09/02/05 13:12:48
>>650
URLリンク(www.google.co.jp)

652:デフォルトの名無しさん
09/02/05 13:43:08
エレキって、回路図とか読めますかってことでは?

653:デフォルトの名無しさん
09/02/05 14:36:38
エレキてつまりハード(回路)屋かな?

チップから割り込みが入らないからオシロで調べるとか、
デバドラ書くとかそんなんじゃね。

654:デフォルトの名無しさん
09/02/05 15:05:33
>>648
応募する気なのかどうか分からないけど、意味が理解できないなら
無理だよ

概ね >>653 の通りだよ


655:デフォルトの名無しさん
09/02/12 22:42:37
初心者以前の者です。質問させて下さい。
CodeWarriorの評価版でCソースをコンパイルしてARM9用の実行プログラムを
生成したいのですが、評価版のダウンロードページにある、どれを使えば
いいのでしょうか。(CodeWarrior for XXで分かれ、バージョンも9.2まである)
すみませんがお分かりの方、ご回答いただけると有り難いです。


656:デフォルトの名無しさん
09/02/14 09:02:53
>>655

ざっと見たとこ、ARM9用はない希ガス。
FreeScaleに聞くほうが手っ取り早いんじゃね?


657:デフォルトの名無しさん
09/02/14 11:12:23
ARMで安い環境ないですか
3千円ぐらいで

658:デフォルトの名無しさん
09/02/14 22:09:46
>>657

何の環境?
開発環境なら、gcc+Emacsだと只だぞ。


659:デフォルトの名無しさん
09/02/15 05:33:42
親戚のガキをぶん殴ってDSを取り上げれば0円だぞ?

660:デフォルトの名無しさん
09/02/17 03:17:48
>>656
ありがとうございます!!!!
大昔に業務アプリケーション方面のCプログラミング経験があるぐらいで
ICEにさわる必要ができてしまいました。数年前の資料ではCodeWarrior
を使用しているようでしたが、評価版がよくわからないのでIAR(30日)
を試しました。が無礼九ポイントで停止しません;;

661:デフォルトの名無しさん
09/02/17 03:21:32
660です。ICEは別製品を使っています。マニュアルに書いてあるとおりの
設定はした(つもり)なのですが。泣きたい。

662:デフォルトの名無しさん
09/02/17 04:34:36
情報を小出しにする奴は市ね

663:デフォルトの名無しさん
09/02/17 11:41:07
一人で存分に泣いた後、上司にしかられてまた泣けばいい。

664:デフォルトの名無しさん
09/02/17 17:33:24
ごめんな、H8系なら助言できることは多々あるのだが・・・

665:デフォルトの名無しさん
09/02/17 18:46:45
無礼九ポイントを通過してないのでは?

666:デフォルトの名無しさん
09/02/21 08:45:04
>>661
CodeWarriorでARMだとi.MX用だと思うが
あのIDEってCodeWarrior用のJTAG Pod以外対応してないんじゃないのか?

あの製品の仕様はアプライドマイクロシステムズ時代から
買収されるたびに迷走してるんで、今はfreescale製のCPU以外は
最新版でサポートされてるか怪しいぞ

667:デフォルトの名無しさん
09/02/25 22:44:34
電気系大学卒業で現在回路設計をやっているものですが、

組み込みプログラムの世界にいきたいのですが、
この世界は未経験でも雇ってくれるものなのでしょうか?
会社の規模や、給料にはこだわりませんが、スキルを身に付けたいのです・・

668:デフォルトの名無しさん
09/02/25 23:18:09
規模や給料にこだわり無いなら探せばあるだろ。

669:デフォルトの名無しさん
09/02/25 23:20:12
>>667
25以下ならyes

670:デフォルトの名無しさん
09/02/25 23:21:01
>>667
回路設計側は、ある意味良質な人材が激減してるよ
つか、プログラムもハードも目的を達成するための 1 手段

まぁ、がんがれ


671:デフォルトの名無しさん
09/02/26 01:35:21
>>667
組み込みでもソフトよりFPGAとか扱えるようになったほうが、仕事あるんじゃね?
オレはソフト系だけど、来月から仕事はいってないわ

672:デフォルトの名無しさん
09/02/26 04:40:30
弊社では経験の有無を問わず広く技術者を募集しています。
首都圏にお住まいでしたら社内広告に出ている適職フェアにも
参加していますので、ぜひ脚をお運びください。

673:デフォルトの名無しさん
09/02/26 23:16:44
組み込みソフトの勉強したいんですけど、何かいい教材ないでしょうか?
組み込みソフトっつても、WindowsCE、ITRON、Linuxなどの組み込みOSです。
書籍だけならいっぱいあるけど。できれば実機が付いてて、実際に動かせるものがいいです。
WindowsCEのeBox-2は販売終了になってるし、、
興味があるのは、OSならWindowsCE、CPUならARMかSHあたりかな。
はじめはITRONのが判りやすいとは言われてるけど。
予算は3~4万程度は出してもいいかなと思ってます。


674:デフォルトの名無しさん
09/02/26 23:20:06
そんなもん勉強して何がしたんだよ
3~4万程度しか出せないならやめとけ

675:デフォルトの名無しさん
09/02/27 03:28:36
WindowsCEもLinuxも環境が整いすぎているから、動かしただけで満足して終わる可能性は高い。

676:デフォルトの名無しさん
09/02/27 07:24:52
ドライバとか低い所に手を出さない限りPCとほとんど同じだからなあ…


677:デフォルトの名無しさん
09/02/27 09:54:47
まぁそんなこと聞いてくる時点で組込みへの適正 0 に近いって事を自覚しろ。

678:デフォルトの名無しさん
09/02/27 14:35:10
>>673

ちょっと予算オーバーだけど
URLリンク(www.apnet.co.jp)

679:デフォルトの名無しさん
09/02/27 14:45:26
とりあえずFonでいいよ。
2千円の投資でLinuxとGPIOとシリアルと有線・無線LANのお勉強ができるよ。

SHがやりたいならみついわボードかな。8千円ぐらい。
URLリンク(web.kyoto-inet.or.jp)
ARMならストロベリーリナックス辺りで適当なの買えばいい。

680:デフォルトの名無しさん
09/02/27 20:02:12
ARMならCQの付録基板待ちでいいじゃない、どんな出来かわからないけどw

681:デフォルトの名無しさん
09/02/27 20:05:51
今回は誰がやってるんだろう。
某氏が関わってるとは聞いてないけど

682:デフォルトの名無しさん
09/02/28 08:04:47
EZ-ARM7よりスペック上で価格がどんなことになるのか楽しみだわ

683:デフォルトの名無しさん
09/02/28 09:18:09
URLリンク(eetimes.jp)
これって完成してもまたアメリカに潰されるんでしょ?

684:デフォルトの名無しさん
09/02/28 10:09:35
TRON関係者の被害妄想を加速させないでください。

685:デフォルトの名無しさん
09/02/28 16:27:18
リアルタイム性を出すのって難しいよね

686:デフォルトの名無しさん
09/02/28 17:20:40
>>685
リアルタイムという定義をもうすこし勉強するよろし

687:デフォルトの名無しさん
09/02/28 22:01:10
>>683

すでに製品が出ているわけだが。
URLリンク(www.esol.co.jp)


688:デフォルトの名無しさん
09/02/28 23:37:43
俺はOSなしの仕事ばかりなんで、ドライバ開発者の仕事が逆に見えないんだけど、ある程度OSレベルでインターフェースが決まってて、その中身をコーティングする感じなの?

689:デフォルトの名無しさん
09/02/28 23:59:37
>>688
ドライバはOS次第だな。

690:デフォルトの名無しさん
09/03/01 00:18:07
>>688
通常 itron あたりだと, ハードを叩くタスクのコーディング規約的なもの

だけど, TCP/IP スタックとか, ファイルシステムとかの賢いライブラリが
既にあって, そのライブラリで使用可能な新規デバイスを動作させようと
思った場合は, そのライブラリのコーディング規約に従う必要がでてくる.

で, Unix とか Linux とか Windows とかのドライバ開発者は,
上記コーディング規約とか上位層用のインターフェースに従ったものを
作る必要が発生するため, 若干めんどうなことになる

だけど, 実質的にデバイスに対する制御は一緒だよ


691:デフォルトの名無しさん
09/03/01 01:14:15
>>690

そういうのを「コーディング規約」とは言わんと思うが。


692:デフォルトの名無しさん
09/03/01 01:22:07
>>691
API とも言いにくいよな. まぁ, それ的なものって事で許してくれ


693:デフォルトの名無しさん
09/03/01 03:54:36
>>691
うるさいはげっが

694:デフォルトの名無しさん
09/03/01 04:37:50
コーリングコンベンションのことかな? 俺もOS無しばっかりなので、ドライバ層がタスクで
だいじょぶなのかな? とかいつも心配になる。余計なタイムアウト処理がついてくるような。

695:デフォルトの名無しさん
09/03/01 09:20:14
>>690
コーディング規約というのは(ry

696:デフォルトの名無しさん
09/03/01 11:13:26
>>692
ドライバインタフェースて言ってる。
これが一般的かどうかは知らんが。

>>694
それは違うと思うぞ。


697:デフォルトの名無しさん
09/03/01 11:47:20
>>689-690
688だがありがとー。
タスクにするのか。制御するデバイスが外付けのADCやDACだったりすると特に大変だな。
ドライバタスクに制御が渡るまでの遅延がそのままLFPになるし。

698:デフォルトの名無しさん
09/03/01 11:48:51
LPF、ローパスフィルタだ…すまん。

699:デフォルトの名無しさん
09/03/01 12:34:20
>>697
ならないでしょw
っていうか、遅延がLPFになっちゃうって根本的にHWの設計おかしいよ。
1バイトか4バイトか知らんけど、サンプリング毎に逐次的にPCのCPUが処理するHWなわけ?
工業高校の落ちこぼれでもそんな糞設計しないよ。
普通にバッファぐらい付けようよw

700:デフォルトの名無しさん
09/03/01 14:46:44
>>697 じゃないんだが
その昔 FIFO すら付かない素の DAC 渡すアホなハードを渡してくれた奴がいた
これじゃ音が歪むって言って突っ返したがwW


701:デフォルトの名無しさん
09/03/01 16:54:05
>>699
ああ。なんか俺が色々誤解していることが分かったwwwwwサンクス。
なお、俺はOSのドライバ開発をしたことないので質問したので、
ADCとDACの話は俺の想像であって、実際にある基板の話ではないよ。
PCの話は分からないけど、俺はSH+組込みOSのシステムを想像してた。

で、ワンチップマイコンで良くやるような、タイマ割り込みをトリガにした
周期的なデバイスへの直接制御を、tickに縛られる(しかも1tickはmsec単位?)
OSのタスクでどうやって実現するのだろうかと疑問に思ってた(^^;

だが、そもそもそういうことではなくて、OSを使うようなシステムものの仕事では
上のような処理はFIFOつきバッファを使ったりFPGAを使ったりして、
CPUのソフトウェアの影響を出来る限り排除するように設計されてるってことだな。

702:デフォルトの名無しさん
09/03/01 19:34:46
>>701

そんなにスピードを求められない(tick単位で処理できればいい)デバイスの場合、ソフトで制御することもあるよ。
割り込みハンドラなら最優先で処理されるし、RTOSならタスクに優先度を細かくつけれるし。


703:デフォルトの名無しさん
09/03/01 22:26:11
>>700
メガドライブですね?

704:デフォルトの名無しさん
09/03/01 23:24:31
FIFOと言われると、FirstInが何のことなのか判らなくなる時がある
LIFOを頭に浮かべて、ああ、FIFOは待ち行列だったか・・と思い出すわけだ
これが非常にまわりくどい
最初からきゅーとか待ち行列と言って欲しい


705:デフォルトの名無しさん
09/03/01 23:45:34
俺的にはスタック、キューって言ってくれないとわかんない

706:デフォルトの名無しさん
09/03/01 23:45:40
>>704
変な人だな。
それはひょっとして頭の中に「ところてん押し出し器」的な図式が
イメージできてないからじゃないの?

707:デフォルトの名無しさん
09/03/01 23:58:46
>>704
うちら界隈だと、チップのマニュアルで FIFO 表記の方が多いから、
ハードで実現されてる奴はキューとはあんまり言わんな


708:デフォルトの名無しさん
09/03/02 11:03:20
[FL]I[FL]O のほうが抽象的な感じだな。
スタックとかキューというと実装が少し見える感じだ。

709:デフォルトの名無しさん
09/03/02 11:36:01
ここは古典的に
FIFO=ところてん
LIFO=積み○○
とか


710:デフォルトの名無しさん
09/03/02 19:19:29
FIFO=貫通式オナホール
LIFO=巾着式オナホール


711:デフォルトの名無しさん
09/03/02 19:49:31
おまえ生きてて恥ずかしくないか?

712:デフォルトの名無しさん
09/03/02 20:01:45
ワラタw

713:710
09/03/02 20:08:37
『奥が深い』とはまさにこのことよ。

714:デフォルトの名無しさん
09/03/02 21:01:48
全然たとえとして成立してないと思うけど。
頭悪すぎないか。

715:デフォルトの名無しさん
09/03/04 04:17:02
>>710のチンコが着脱式であると仮定すれば無理な話でも無いな

716:デフォルトの名無しさん
09/03/29 13:26:03 BE:1249790786-2BP(1028)
41歳から 組み込みエンジニアって ありでつか?
RTOSならやったことあるけど・・・ 
アセンブラも出来るけど・・・

717:デフォルトの名無しさん
09/03/29 14:08:28
ありかって聞いてる時点で駄目なんじゃね?それなりのキャリアがあればありかなしかなんて自分でわかると思うけど。

718:あぼーん
あぼーん
あぼーん

719:デフォルトの名無しさん
09/03/29 14:17:15
>>718
いまいくおー ε=ε=(っ・∀・)っ ゴーゴー♪

720:デフォルトの名無しさん
09/03/29 22:08:25 BE:1249791168-2BP(1028)
ここ10年鯖系やってたんだ
今、FPGAのカスタムCPU向けの派遣やってるんだけど
なんか、この業界って システムの分析とか設計とかインタフェ~スも決めないでなぁなぁで仕事してるし
業界慣行違うなと・・・
社内試験もユ~ザ~向けドキュメントも 超いい加減で 楽で Indeed調査によると 給与もいいみたいだし・・・

721:デフォルトの名無しさん
09/03/30 09:37:08
人手が常に足りてないからぬるいんだよ。
良くも悪くも「動けばOK」な面も、てそれは鯖も同じか。

722:デフォルトの名無しさん
09/03/30 11:03:06
弊社では、年齢経験を問わず広くエンジニアを募集しております。適職フェアで、是非お会いしましょう。
# とは言え、年齢がそれなりの人はそれなりの報酬のためにはそれなりに上流工程もこなせないと厳しいけど。

723:デフォルトの名無しさん
09/03/30 20:19:43
リク板じゃないからちょっと板違いかもですが
外注募集してるとこないですかね?
当方、経験15年以上なんですが

724:デフォルトの名無しさん
09/03/31 10:34:32
>>723
>722

725:723
09/03/31 10:47:21
>>724
トン

726:デフォルトの名無しさん
09/04/06 06:41:27
へうでH8S/2000シリーズ使っての質問です。

resetprgで、SP初期化・割禁の後、_INITSCT()でRAMにゼロまたはコードされた初期値を入れ、
それからHardwareSetup()を呼び出して内蔵レジスタ類の初期化という順序がお奨めらしい。
この順序である必然性みたいのはあるのでしょうか?

内蔵レジスタの設定に、入力クロックを2倍する設定とかもあるので、RAMの初期化は
レジスタ類初期化の後のほうがいいように思えるのですが。

727:デフォルトの名無しさん
09/04/06 06:44:45
sageで書いてしまったorz・・・上げます

728:デフォルトの名無しさん
09/04/06 07:12:43
うぜえなこいつ

729:デフォルトの名無しさん
09/04/06 07:25:26
>>726
そこまでわかってるなら、必然性はない。
単にHardwareSetup()内でグローバル変数などが初期化済みになるようにしてるだけ。

730:726
09/04/06 09:01:15
ああ、なるほど。そういう配慮もあり得ますね。なんかへうが出したとこ触るのって畏れ多くて(w
解ってやる分には後でもだいじょぶってことですね。 ありがとうございます。

731:デフォルトの名無しさん
09/04/06 12:20:26
>>730
畏れ多い?
すぐにそんな気持ちは無くなるよ。ヒヒヒ

732:デフォルトの名無しさん
09/04/06 13:13:49
>>730
オレも最初そうだった。
へうのやることは、「親切心でやってみた」程度に考えておいたらよいと思う。
付き合いが長くなると、気が利かなかったりする面も見えてくるが、片目をつぶって辛抱しなさい。

どおしても~ダメだったら~帰っておいで~♪

733:デフォルトの名無しさん
09/04/06 14:10:26
妹よ~

734:デフォルトの名無しさん
09/04/06 14:47:28
たまには三人で酒でも飲もうや

735:デフォルトの名無しさん
09/04/07 04:29:09
H8Sから上のシリーズって、入力クロックを増速するレジスタがありますよね。
これをデフォのまま=増速せずに使ったら、何か利点があるんですか?
例えば消費電力が小さいとか・・・

736:デフォルトの名無しさん
09/04/07 16:33:38
ハードウェアマニュアルをよく読みませう。

737:デフォルトの名無しさん
09/04/07 22:05:07
クロックが遅ければ消費電流が少ない
別に早い必要が無ければ早くする必要はない

738:735
09/04/08 05:20:44
>>737 ありがとです。 実際クロック2倍で消費電流も2倍になるのでしょうか?

>>736 例えばH8S/2378の 23. クロック発振器 の章をよく読んでも、メリット・デメリット・電力等に
ついての言及が無いので聞いてみたのです。逆に低消費電力状態の説明の章にはクロック発振器
との関連は言及されていません。この記述がそうだよという箇所がありましたら示唆ください。

739:デフォルトの名無しさん
09/04/08 10:58:11
なぜメーカに聞かない

740:デフォルトの名無しさん
09/04/08 13:35:45
ユーザーじゃなくても答えてもらえますか?

741:デフォルトの名無しさん
09/04/08 13:43:23
二倍じゃないし、使用状況によるとしか書けないだろ

742:デフォルトの名無しさん
09/04/08 15:15:05
>>738
DC特性の下の方に消費電流(max)の計算の仕方が書いてあるでしょ。

743:デフォルトの名無しさん
09/04/08 18:09:58
>>742 そこ見てみました。ワケワカメ(w

744:デフォルトの名無しさん
09/04/08 18:16:53
インターフェース5月号をかって、組み込みについて勉強したいです。

でも、明確に何が作れるのかわかりません。
教えて得ろ胃人!

745:デフォルトの名無しさん
09/04/08 18:28:00
くみこさんキスしていい?

746:デフォルトの名無しさん
09/04/08 18:33:38
>>743
f=33MHz,Vcc=3.6Vで計算してみたら

747:デフォルトの名無しさん
09/04/08 19:44:43
>>744
まずは本読めよアホ

748:デフォルトの名無しさん
09/04/08 21:47:59
データシート見ると

Iccmax = 15 + 0.37 × Vcc × f

小学生でもできる計算じゃん

749:デフォルトの名無しさん
09/04/08 22:02:33
>>744
こんなの
URLリンク(kumikomi.typepad.jp)

750:デフォルトの名無しさん
09/04/08 23:17:05
>>744

まずはこれを嫁。
URLリンク(www.cqpub.co.jp)


751:デフォルトの名無しさん
09/04/09 04:41:33
>>748 やっと見つけた。そこにたどりつく前に挫折してました(w
動作周波数依存で変わる部分は、消費電流の2.5%ぐらいと理解すればよさそうですね。
レジスタの設定なんかのとこは読むけど、電気的特性って標題見ただけでここは読まない
と決めてました。

752:デフォルトの名無しさん
09/04/09 09:20:10
ここまで馬鹿だといっそ清清しいな。
>746の条件を>748に入力したら約60mA、クロックを半分に落としたら約40mAで、
仮にクロックを1MHzにまで落としたら約16mAってことなんだけどねぇ。

それとも、15[mA]+0.37*Vcc[V]*f[MHz]って計算式の意味が判らないんだろうか。

753:デフォルトの名無しさん
09/04/09 17:02:33
15mA+0.37*3.3*33-->55.29 15mA+0.37*3.3*16.5-->35.15 1MHzだと0.37*3.3が1ぐらいか。
やっとわかった~\(*o*)/ ありがとうございます。
その基本料金の15mAってところは、スリープのいくつかのモードで小さくするんですね?
周辺モジュールまで止めるか、クロックまで止めるか、とか。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch