1 :
デフォルトの名無しさん :
03/11/15 13:18
理系美少女リスタートちゃんが2ゲット
3げっと
4ゲット 4は女の子っぽい数字
5行目でコンパイルエラー
6はロッケンロール!
7は名も無き技術者(制御系)
8はやっぱり……
9でやっぱり苦労するよ。
ネタスレになる予感…
「GPLは組み込みに向かない」:東大坂村氏の講演
http://japan.cnet.com/news/ent/story/0,2000047623,20062000,00.htm 坂村氏曰く、GPLは組込に向かないそうだが
組込のソフトウェアにはむしろGPLは向いてると思うがどうだろう?
組込はハードがあってナンボだから ソフトを公開したって
どうせそのままじゃ使えないし、むしろライブラリの類は
公開しまくった方が相互に便利だと思うけどどうなんだろう。
どうせソフトには大した値段をつけてもらえないのだし、
それだったらもういっそのことソフトの原材料費を業界全体で
極力ゼロに近づけるってのはどうかな?
ソフトの「組み立て工賃」は、もちろんいただく。
ハードの方でGPLの適用をどうこうするってのは、知らん。わからん。
13 :
デフォルトの名無しさん :03/11/16 15:07
仕事でプログラム組むようになってから言ってくれ
モルフィーワンはどうなったんだろ?
>>12 まあ各種ソフトがGPLだから無料で入手できる、と言っても
作ったボードにポーティングする作業は必要なわけで、そこで
金取っていけるからな。
フリーにする部分と、そうでない部分を適切に切り分けていけば
有効なはず。
>>16 うん。
結局、ハードディペンドな部分では普通に開発費が取れるし。
開発費で金を取っても成果物のライセンスをGPLにすることに
何の問題点も無いし。(顧客が嫌がるとかは別問題だな)
出来上がったプログラム(ソフト)はハードとペアだし
それがそのままコピられたとしてもハードごとでないと
意味が無いし。(それが組込でGPLが向いてる理由)
ソフトのみがコピーされたとしても、それは自分がやったことと
同じことをされただけなのだから憤る理由も無い。
あー、そうなったらゴミみたいなデバイスドライバで苦労しなくて済むのに・・・
>フリーにする部分と、そうでない部分を適切に切り分けていけば >有効なはず。 静的にリンクしたら切り分けなんてできない。
組み込みの開発をC/C++でやり初めて日が浅く、 とんちんかんは質問かもしれませんが、教えてくんでつ。 C++のnewでデカイ領域を何回も確保するので ヒープ領域を非常に大きくとっておく必要があるのですが セクションをその大きさを考慮して設定して リンクまでできても、どうもうまく動いてくれません。 ヒープ領域を小さく設定して、newでとる領域も小さい 時は問題なさそうなのですけど。 sdram32Mをつんでいるので数M以上とかドデカイ領域を 設定したいと思っているのですが。。。。
>>21 CPUとか何よ
newを使わないよう心がける
つってもしょうがないときはしょうがないが
レスどうもです。 cpuはsh3です。 newは使わざる負えない状況です。
newを使うと何かマズイことがあるのでしょうか?。 注意することとか。
>>20 製品にGPLのドキュメントつけたりリリース後のソース配布など
やりたい仕事ではない。顧客への説明も困難。
>>21 単純にヒープが足りてないか、分断しちゃってるんじゃないの?
長く使うオブジェクトなら一度newして開放しないほうがいいよ。
>26 分断しているというのは、メモリの取得と解放を繰り返した 場合のことでしょうか? そこまで動作してないと思います。 どうも、ヒープ領域が大きいと 初期化で呼び出される_INITSCTという関数で 早速ダメになっているみたいです。 この関数をいじってみる必要があるとは思うのですが、 どう初期化したらいいのか見当がつきません。
>>27 ・・・そこまで動作していないかどうか、どうやって確認したの?
最小構成でテストプログラム書きなさい。そして実験しなさい。
シュミレーター上での確認です。 それで、最小構成?として、 ヒープ領域が小さいときは 動作しているという状況です。
>>29 >ヒープ領域が小さいときは、
ばっかもーん!
そんなことはいっとらーん!
でっかいヒープを確保する「だけ」のプログラム書いてこーい!
そういうことですか。 一応、でっかいヒープを確保する「だけ」のプログラムで テストしてます。 上に書きましたけど、多分初期化関数が ダメっぽいのですけど。。。
>>29 newの実装にバグあるんじゃないの?
大きいオブジェクトの確保が正しく動かないんだったら、静的に領域を確保するっ
てのもアリかも。
>32 ただ、new呼び出す以前に初期化でダメなんですよね。。。 何か、勘違いしてるのかもしれませんけど。 >静的に領域を確保するっ てのもアリかも。 やはりその手はありえますか。 最悪それで、やってみるしかないかもしれません。
多分ヒープの領域がどっかと被ってるんじゃない?
初質&雑談
37 :
デフォルトの名無しさん :03/11/16 22:53
グローバルに領域をとっていおいて、 class A{}; char buf[sizeof(A)]; A* p = new(buf) A(); でもいけるのでは?
まぁでも原因究明しないとキモチ悪いよな。
いろいろやってみたところ、 セクションの設定に問題があることが わかりました。 winodwsのアプリしか作ったことがないと、 セクションってのが、ピンとこなかったのですが、 すこ〜し、というかそれなりにわかりました。 レスどうもでした。 ただ、これからいろいろと難問にぶちあたりそうでつ。
40 :
デフォルトの名無しさん :03/11/19 10:44
厨な質問ですいません。 HDDを使わない組み込みOSというのは、 昨今でどのような物があるのですか?
41 :
デフォルトの名無しさん :03/11/19 10:49
制御系って言っても ハード自体いろんなものあるんじゃないの?
42 :
デフォルトの名無しさん :03/11/19 11:02
とりあえず、HDDを使わない様な(ROMに書き込む様な)組み込みには、この様なのがあると分かりました。
http://www.nttpc.info/Help/manual/1083.html 「具体的には、ウィンドウズCE、ウィンドウズNTを元にした Windows NT Embedded 4.0 、ウィンドウズXP プロフェッショナルを元にした Windows XP Embedded などがある。
これらをまとめて、Windows Embedded(ウィンドウズ・エンベデッド)と呼ぶこともある。また、リナックスやTRONといった基本ソフトを組み込みOSとして使うことも多い。」
Windows EmbeddedにはAPIさらにはMFCなどはあるのでしょうか?(C++の機能をフル活用できるのか)
>>42 Windows Embeddedは、基本的にWindowsと同じ。今ならWin XPと同じ。
Windowsと同じ開発環境が使える。当然、MFCでもC++でも使える。
今時 ROM4K, RAM256 とかでOSなし 素っ裸割り込みと メインループ だけで作ってるのは そうとう時代遅れみたいですね。 でもチビ助能なしチップにはやっぱり軽くて(・∀・)イイ!
規模にもよるだろ
47 :
デフォルトの名無しさん :03/11/19 22:19
>>45 案ずるな、そういう世界は無くなりそうで無くならないもんだ。
数を作ることになると10円のコストでも効いてくるからな。
50 :
デフォルトの名無しさん :03/11/20 13:16
質問です。 なるべく少ない変更で、エンディアンの異なるCPUにも載せられるように、 あるデバイスのレジスタを直接叩くライブラリを作成したいのですが、 マクロなどを使ったよい方法はないでしょうか? エンディアン変換はどうしてますか?
>>50 TCP/IPのライブラリなんかは必ずエンディアンを変換する関数と通すようになってて
変換が必要ないプラットフォーム向けのライブラリはその関数がダミーになってる様ですね
52 :
デフォルトの名無しさん :03/11/20 15:26
Windows CE用の評価ボード調べてみたんだけど、日立SH-3マイコン使ったのがあったけど他にどんなのがあるの?
53 :
デフォルトの名無しさん :03/11/21 05:41
>>50 #define CPU_ENDIAN BIG//or LITTLE
#if (CPU_ENDIAN==BIG)
・・・・
#endif
みたいな感じ?
54 :
デフォルトの名無しさん :03/11/21 23:39
>>50 ビットフィールド使って、ターゲット毎にビットアサインの定義を変える
>>50 こうかな。
#define SWAP_WORD(x) (((x) >> 8) || ((x) << 8))
#define SWAP_LONG(x) (((x) >> 24) || (((x) >> 8) & 0x0000ff00) || (((x) << 8 ) & 0x00ff0000) || ((x) << 24))
#ifdef EL
#define TOEL_WORD(x) (x)
#define TOEL_LONG(x) (x)
#define TOEB_WORD(x) SWAP_WORD(x)
#define TOEB_LONG(x) SWAP_LONG(x)
#endif
#ifdef EB
#define TOEL_WORD(x) SWAP_WORD(x)
#define TOEL_LONG(x) SWAP_LONG(x)
#define TOEB_WORD(x) (x)
#define TOEB_LONG(x) (x)
#endif
マクロなので、副作用が起きないように注意しないとデバッグで苦労するが。
あと、エンディアン依存な所で通すの忘れていて、移植したらなぜか動かないとか…
57 :
デフォルトの名無しさん :03/11/22 18:43
>>50 疑問なんだけど、
I/Oがワードなら、ワードアクセスではエンディアンを考える必要はない筈だ。
ワードデータをバイト列で表現する場合にのみエンディアン問題が発生するんだよね?
で、16bitを H,L の順で送るか L/Hの順で送るかはCPUではなくそのI/Oに依存する問題だよね?
という事は、デバイスのライブラリレベルでエンディアン問題ってどういう状況で発生するんだろ?
>>58 一例として 32bit バスのシステムで 8bit のレジスタ4個を詰め込んで、32bit 丸ごとアクセスと 8bit 単位のアクセスの両方をサポートする場合。
>>59 その場合は、ハードウエアでエンディアンが吸収されるからソフト側の対応は不要では?
たとえば32bitカウンタなら
0-7
7-15
16-23
24-31
の32bitのデータバスが出てるわけで、これをそのハードウエアに合わせて接続するだけでしょ?
>>60 カウンタなんかは、8bit でアクセスしないでしょ ?
そうじゃなくて、例えば VRAM なんかで 32bit に 0x00, R, G, B って詰め込むことあるよね。
(R: Bit23〜16, G: Bit15〜8, B: Bit7〜0)
左上を原点とする処理系なら、左上のピクセルの値を取り出す時は X 番地を 32bit アクセスすると 00, R, G, B ってでてくる。
でも青だけ変えたい時は、リトルエンディアンの CPU なら X 番地を 8bit ライトすればいいけど、ビッグエンディアンの CPU だと X + 3 番地でないとダメでしょ。
まあ、32bit アクセスか 8bit アクセスかを判別してハードで吸収すると言う技もあるけどね。
>>61 だから、I/Oとのアクセスでメモリ内でリトル・ビッグの変換が必要になるのかな? という疑問です。
>>62 なるほど、バイトとワードの両方でアクセス出来る場合は必要になるんですね。
>>63 SHなんかだと内蔵I/OはメモリマップトI/Oで、外にバスが出てないから
自前で当たり前だが変換が必要(MDxピンでリトル/ビッグの切り替えが
できるやつもあるが)
つか。
Z80なんかのようにMEM/IOセレクトピンでバスの出力内容を切り替えてるだけって
のもあるから、メモリとI/Oを区別しない方がいい。これはCPUのブロック図や
ピンファンクションを見ればわかる。結局、I/Oも内部バスは共用してる場合が
多いから。
ある程度ハードがわかってると理解しやすいんだけどね。
>>64 > SHなんかだと内蔵I/OはメモリマップトI/Oで、外にバスが出てないから
> 自前で当たり前だが変換が必要
これはマジか ?
SH 使ったことないから知らんかったけど、内蔵レジスタぐらいきちんと CPU のエンディアンに対応して欲しいなぁ。
> Z80なんかのようにMEM/IOセレクトピンでバスの出力内容を切り替えてるだけって
> のもあるから、メモリとI/Oを区別しない方がいい。
何を言いたいのかサパーリわからん。
誰かが、区別するとかの話をしてたのか ?
67 :
デフォルトの名無しさん :03/11/24 13:57
> Z80なんかのようにMEM/IOセレクトピンでバスの出力内容を切り替えてる 横入りだが、詳しく話させてもらうと・・・ Z80CPUにはMEM/IOセレクトピンてのがあって、 メモリと、IOコネクタをドライブするIOコントローラの、アドレスが別々に有るわけでなく、重複してる。 どうやって区別するかというと、MEM/IOセレクトピン(どっちがHIGHアサート(有効)でどっちがLOWアサートか忘れた)の出力をロジックICで組んだ回路に入れてやり、 その出力をメモリやIOコントローラのCS(チップセレクト)ピンやCE(チップイネーブル)ピンに入れてやって、どのチップをイネーブル(有効)にするか決めている。 Z80のMEM/IOのピンをH/Lコントロールするのは内部レジスタのどこかのフラグを立てたり下げたりすればよかったかと・・・。 まぁ、あんま¥ディアンとは関係ないような気がするけれど・・・。 エンディアンてあれでしょ。8086系の16bitCPUで内部のレジスタ間移動を行うと、上位8bitと下位8bitが入れ替わってしまうって仕様の・・・。 Penでもなるのかは知らん。 対策は、ビットシフト命令使ったり、あらかじめ上位8bitと下位8bitを逆にしておくとか、これくらいで大丈夫なのかは知らん。
>>67 > Z80のMEM/IOのピンをH/Lコントロールするのは内部レジスタのどこかのフラグを立てたり下げたりすればよかったかと・・・。
どこからそういう間違った情報を仕入れているのか興味がある。
in/out 命令って知ってる ?
> エンディアンてあれでしょ。8086系の16bitCPUで内部のレジスタ間移動を行うと、上位8bitと下位8bitが入れ替わってしまうって仕様の・・・。
はぁ...。
もう少しきちんと勉強してから、このスレに来ることを「強く推奨」するよ。
卵をどちらから食べるかってことだろ
アセンブラ組んでるパソコンが8086系CPUの場合、アセンブラを機械語変換するときもエンディアンになるらしいけれど、 今はPenだし、penでもなるかは分からん。
72 :
デフォルトの名無しさん :03/11/24 14:08
>in/out 命令 そうそう。思い出してきた。この命令で確か、コントロール信号用のピンのH/Lフラグを一手に扱ってるレジスタの、ちょうどMEM/IOセレクトピンの部分のフラグをH/Lしてくれるはず。 別にin/out命令使わずmovで直接フラグ立てることもできるよ。
mov?
74 :
デフォルトの名無しさん :03/11/24 14:21
>>73 そう。
例えば、コントロールピン(信号)にもR/W(リード/ライト)とか色々あるけど、
これらをまとめたレジスタがあるんだよ。3つくらいレジスタあったかな(名前を失念)
そのうちのMEM/IOセレクトピンのフラグを上げ下げするのがあるレジスタの0bitだとしよう。
□□□□□□□□
↑ここ
このレジスタのアドレスが例えば0x0010だとしたら、
mov 0010 01(01はHEXだよ。2進で00000001)とかやれば、フラグを直接1立てることができる。
同様に0入れて下げることもできる。
これで直接MEM/IOセレクトピンを制御できる。in/out命令使わなくとも。
>>70 > エンディアンになる
自分でなに言ってるのか理解してるのか ?
>>72 ,
>>74 > 別にin/out命令使わずmovで直接フラグ立てることもできるよ。
おお、それは便利だな。
その「コントロール信号用のピンのH/Lフラグを一手に扱ってるレジスタ」の名前を是非教えてくれ。
すまん、訂正 mov 0010,01
>その「コントロール信号用のピンのH/Lフラグを一手に扱ってるレジスタ」の名前を是非教えてくれ。 Z80の場合だけれど、確か、statusかなんか頭についたかどうか、Aレジスタ、Bレジスタ、Cレジスタかなんかだったかと。 このうちどれかは割り込みのフラグも扱ってる。 割り込みにも割り込みの急ぎレベルに応じて3段階くらいあって、それぞれに対応するピンもそれぞれあって、それぞれ入出力できて(外部からも内部からも割り込みかけられる)、もちろん、それぞれのフラグも分かれてた。 でも、それぞれの割り込みの名前を失念。\(`д´)ノウワアアアア~~~~ン
hfd01454
>>77 > でも、それぞれの割り込みの名前を失念。\(`д´)ノウワアアアア~~~~ン
思い出したら、また来てくれ。
それまでは、来てはダメだよ。
失念したんじゃなくて、はじめからうろ覚えでいいかげんなこと書いてしまいました。 大風呂敷広げてごめんなさい。
あんまり裏技的なもの使うとあとで自分の首しめることになるじょぉ〜 とはいえZ80でクロック 2MHz な頃は裏レジスタ使いまくってたなぁ・・・ってちょと違うか
>>81 Sharpのセカンドソースに特有の隠し命令使ってましたが何か。
つーか、Z80は1MHz、Z80Aで2.5MHzじゃなかったっけ?
別に裏レジスタだから裏技ってわけじゃないだろ。 割り込みの応答をなるべく早くするための仕掛けなだけだし。
>>81 こら==\(`д´)ノ
勝手に成りすますな!
>>85 メール欄くらい見てから書こうよ、不注意君。
>>83 で、その割り込みから更に割り込みに入ると裏レジスタを表に回してしまって破壊すると。
#デバッグに裏レジスタ使ってて嵌った経験は、ある。
>>86 ははっ、二面しかないからね。
でもデバッガとかは盲点かもしれないな。
>>86 のメール欄・・・
んなわけない・・・って。。。
ダメだ。。。_| ̄|○
 ̄
>割り込みから更に割り込みに入ると
アセンブラのそのCPU用の特殊コマンド使うなら全部そうする、
使わないなら全く使わない、
で統一しないとbugルもと。
俺は使わない派。チップ内ハードの動きに即してできるから、動きが見えやすい。
でも、最近のチップはそうは行かないけれど・・・。
>>88 > アセンブラのそのCPU用の特殊コマンド使うなら全部そうする、
せめて日本語として理解できるように書いてくれ。
>>90 別にたまってないけど。
>>88 の言うことを理解できたのか ?
だったら、ちょっと説明してみてくれんか。
抽象的に書くから分かりにくいんだな。 例えばin/out命令とかZ80等にしかない特殊アセンブラ命令でっしょ。 最近のワンチップCPUにしろカスタムLSIにしろこの辺がすごく多くなってる。 逆に言うとハードの動きが読めにくい。 特に、機能が分かりにくいステータスレジスタ、フラグが多いから、どうしても、sampleに即した形で特殊アセンブラ使わざるを得ない。
>>91 2chでアホリくれてるつもりが、いつの間にか煽られまくってます。ぎゃはは。
おいおい、アセンブラ知らない俺からすれば CPU毎に違う物は全て特殊命令なんだよ〜。 って言うか全てネイディブアメリカン。
>>92 > 例えばin/out命令とかZ80等にしかない特殊アセンブラ命令でっしょ。
80 系には全部ある。
多分お前が使ってる、Pentium にもな。
>>93 はずしてる...、かわいそうに。
>>94 なるほろ。
96 :
デフォルトの名無しさん :03/11/25 12:06
この仕事始めてから、Cは使ってるけど、文字列操作なんかはやったことない。 ハッシュって何?って感じだけど、これでいいのだろうか?
昔は自己コード書き換えなっかもやってたよねえ 人間CPUになってコードたどっていくとそこで脳みそが オーバーフローしてしまうという恐怖の手法(わ ソースは合っているのにハンドアセンブルの結果が間違っていてはまったというのはある はじめてアセンブラを使った時には感激だった(古すぎ?)
>>96 > この仕事始めてから、Cは使ってるけど、文字列操作なんかはやったことない。
こっちは、いいと思うけど...
> ハッシュって何?って感じだけど、これでいいのだろうか?
ちょっとやばいかも。
使わなくても、どういうものかぐらいは知ってた方がいいんじゃないか。
>>97 相当古杉。
まあ、懐かしい時代だったが...。(藁
ジャンプニモニックが使いにくいからオペランド部にジャンプしてみたり、 スタックポインタ移動して、pushでメモリクリアしたり、 今から思うとやり放題だったなぁ。 LSI-C80はアセンブル出力の段階で手を入れてオブジェクト作ったもんだし。
みなさんTRON等のOSを使ってますか? 私はいまだにOSなしのソフトばかり作っています。(16ビットCPU程度) OSを乗せるメリットって何なんでしょう? なんか、設定することやオーバーヘッドばかり増えて あんまりいいことないような気がするんですけど。
>>102 定型な入出力をいちいち作らなくてすむ
OSがハードウエアの差を吸収してくれるので移植が楽(プラットフォームが変わっても遺産を継承できる)
ハードが苦手なプログラマーに投げてもなんとかなる(ほんまか?)
>>101 >ジャンプニモニックが使いにくいからオペランド部にジャンプしてみたり、
そういうコードをホシュしたことがあるよ。遊んでるな〜こいつ、ってオモタ
>スタックポインタ移動して、pushでメモリクリアしたり、
バイトしか移動できない低脳8bitで今でもやるよ。pushだけがワードでストアできるから。
>>96 ツールなんかはどうしてるの?
COFFやhexファイルを読んで加工したりとかしない人?
俺は、今使ってるアセンブラが、ショート形式はグローバルラベルが使えないタコ仕様なんで
COFFからラベルを引っ張りだして _LABEL .EQU 123H みたいなのを吐かせて
それをインクルードして解決したり とか してるよ。
106 :
デフォルトの名無しさん :03/11/26 17:12
組み込みOSの話がでてるけど、WindowsCE分からん。
Platform Builderてなワケワカメのあるし。
第一、どうやってOSをターゲットの機器に載せるのかが分からんし。
http://www.bsquare.co.jp/news/article/ne_for_ce.pdf >組み込みOS としてのWindowsCE 活用の基礎組み込みOS としてのWindowsCE 活用の基礎
>NK.BIN という名前の一種のアーカイブファイルにまとめられます。
>このファイルは、メモリ上のアドレス配置情報がそのまま格納され、
>ファイルによってはあらかじめ圧縮されたうえで格納されます。こ
>のアーカイブファイルを読み出し、書かれているアドレス情報に従
>ってメモリ上に配置したあと、スタートアドレスへジャンプすること
>によってC E は起動されます。
>こ のC E イメージを読み出してメモリに配置するプログラムのこ
>とをローダーと呼びます。Windows CE ではローダーの作成も通
>常はPlatform Builder とそれに付随するクロスコンパイラ(一部
>はアセンブラ)によって行います。ローダー自体もC のプログラムを
>追加することにより、いろいろな付加機能を実現することが可能
>です。たとえばシリアル/パラレル/イーサネットによるC E イメージ
>のダウンロードや、ATA フラッシュカードからのC E イメージのロー
>ド、デバッグシリアルポートを利用したメニュー形式のユーザーイ
>ンターフェース、デバイスのフラッシュメモリの書き換え機能、メモ
>リダンプ・レジスタダンプを始めとするデバッグモニタ機能などが
>挙げられます。
さっぱり分からん。 ̄|(´‐`)| ̄
>>106 >第一、どうやってOSをターゲットの機器に載せるのかが分からんし。
だからOSのポーティングが商売になるのでしょう。
>>106 >第一、どうやってOSをターゲットの機器に載せるのかが分からんし。
過去(といっても割と最近)にInterface、Embedded Unix等で解説記事があった。
いずれもLinux又はNetBSDだけど、基本は変わらないと思う。
ポーティングのためのツールはOSを購入すればついて来る。
あとはハードがどうなってるかだけど。
組込み用でも、PC/AT互換仕様のボードを使うならPCと大して変わらない。
>>106 めんどくさかったら、ハードメーカがポーティングしてるCEを使えば?
普通にCEでアプリを作りたいだけなら、プラットフォームビルダを
高い金出して買うことも無いと思うが。
それ以前に、CE使う必要あるの? ライセンス高いし、すぐバージョン変わるし。
Windowsのプログラム、特にMFCに慣れてたりすると、とってもお手軽よ。
16ビットCPU,クロック4MHz程度が主の自分には OSは無縁。
16bitのCPUでクロックが4MHzってのも珍しい環境だな。 消費電流の問題?
z80屋ですがOSがのってたらなぁといつも思いながらコーディングしてます
Z80にもOSは載るよ
載るのはわかってるが載ってないのだよ
載せたらまずいの? ハード屋さんに「OS載せたいからメモリちょーだい♥」って 言ってみたらいいかも
>>118 メモリーは今時はデフォルトでフルに乗っているなりね64kだけど(笑
で、作るのが単品物ばっかりで毎回ハード構成が違うからOSといってもねぇ・・・って感じ
120 :
デフォルトの名無しさん :03/11/28 16:20
>>120 そそ一般的になっちまったからこのまえ4kしかメモリ乗ってないことに気が付かずに大はまり食らいました
122 :
デフォルトの名無しさん :03/11/28 17:28
なんだかんだ言って、最終的に苦労するのがソフト屋の宿命。
だねー、ハード屋に突き返してたら納期が間に合わん時なんかハードのデバッグまでやるもんなあ
>>114 そう、消費電流の問題。
でも、最近の16ビットマイコンって
ちょっと前なら8ビットマイコン使っていたような用途にも使われるようになってるので
16ビット=高速、高機能というわけでは必ずしもないと思う。
>>123 マイコン(制御)屋ってソフト屋とハード屋の中間のような気がする。
そういう範疇をファーム屋というのだとおもう。あまり定着してないけどね。
>>119 OSなしでも基本構成は使い回してるよね。演算ツールとかシリアルドライバとか
基本的なメインループ内容とか。俺も3Mの85で似たような境遇だ。
私がz80使ってた頃は、自前のデバッグモニタを必ず組み込んでいたから、 そいつが事実上簡易OSの役を果たしていた。 ランタイム版はスタートアップでターゲットの自動起動だけすると、 後は標準入出力相当は空復帰するだけって感じで。
127 :
デフォルトの名無しさん :03/11/29 21:12
mallocは使う?
つかわない
129 :
デフォルトの名無しさん :03/11/29 21:57
>>128 しょうがないよな
そんなことやったらシステムぶっ飛ぶよな
ぶっ飛ぶというか、もったいない
アセンブラだし
132 :
デフォルトの名無しさん :03/11/29 22:46
やっぱりアレですか, ハード屋さんとは仲悪いですかみなさん. うちは同じフロアなんだけど,仲悪い人はフロアの端行くにも,いったん廊下に出て 違う入り口から入ったり,徹底して避けたりしてます.
134 :
デフォルトの名無しさん :03/11/30 14:52
>>133 ハード屋に一目置かれてるような人もいます
ハードもソフトも自分一人でこなしてます
仲良くしておくと得する反面損もするのじゃよ? まあこれも何かの陰謀じゃな
ごめん予算無いからソフトでごまかしといて、お願い!!とか・・・・ めんどくさいから、ハードでひげとってよとか・・・・
>>138 > ごめん予算無いからソフトでごまかしといて、お願い!!とか・・・・
ソフトなんてただでしょ。ちゃんと働け。
> めんどくさいから、ハードでひげとってよとか・・・・
改造に費用かかるからダメ。原価意識持てよ。ソフトで何とかなるでしょ。
やなやつ=言うこと聞いてくれないやつ という前提ならそう書け
142 :
デフォルトの名無しさん :03/11/30 20:39
>>138 単に入力にチャタリングやノイズ対策をしておけばいいことだと思うが。
>>142 入力と決め付けていいのだろうか
チャタと決め付けていいのだろうか
のいずと・・・・以下略
積分回路でアナログ的に除去しちゃマズい場合もあるだろうし、 FPGA内部でデジタルフィルタ入れといてって場合もありえるし。 ソフト側で処理するにはリソース取られるのイヤ&書くのマンドクセーってことだろうね
ここにラッチを入れてくれない?ソフトでポーリングすると別ルーチン作らないと ならないから二日はかかるんだよね。 え、原価が上がるからダメ? ラッチのICっていくらするの20円、30円?、それでこれ何台生産するの、多くても 100台でしょ、てことは、漏れの日給は1500円以下? 漏れが3000円払って、二日休むから、その間にモ前ら仕事するか?・・・ 言うだけのことは、言うことにしている。(勿論、実際はもっと大人しい言い方で) でも、大抵は結局ソフトで対応することになるんだな(泣
>>145 入力ポートとの間にラッチ入れるのはかまわんが、
リセットするための出力ポートが余ってない.....ってな話がままありまつ。
そんな時は他の制御信号から御裾分けしてもらって.....とかやってるうちに
回路が複雑になっていくんだよね。
ソフト側も余計な処理しなきゃいけないし、納期も遅れる。
これが世に言う、三方損ってやつ(ウソ)
147 :
デフォルトの名無しさん :03/12/01 21:03
PC−9821のBIOS開発したいが、今、PC−9821はフラッシュ ROMが付いています。このフラッシュROMをROM焼き機で焼かないで、 どのような操作でROMの入れ替えが出来るのか知っている人がいたら教えて 欲しいが。
>>147 開発途中のものを自力書き込みすると起動不能に陥った場合どうしようもなくなるので
どっちみちROM焼き器が要るとおもわれまする
>>147 Pentiumのbug対策の時だっか?
Windows95/98の不具合対策の時だったか?
BIOSアップデートデイスクがNECから届いたことがあった気がする。
それを解析すれば、制御方法は判ると思う。(公開されていないはず)
でもそんな手間かけるならROMライタで読むのが妥当でしょう。
ちなみに、そのディスクは捨てた。
150 :
デフォルトの名無しさん :03/12/02 00:58
入力ポートにラッチ入れるのはなんでですか? ノイズでもラッチしてしまいそうなのですが??
000000000000111111111111111000000000000 ↑ ↑ オサレタケンシュツ ハナレタケンシュツ
ポーリングすんの面倒だからチャタはハードで取ってくれ
154 :
デフォルトの名無しさん :03/12/02 09:18
ハードで取りきれなかったチャタやノイズの対策するのがソフトであって、 それらを前提としたソフトを最初から作るのは根本的におかしい。 と、ソフト屋は思います。
地上波デジタルの文字放送みたいな機能はOSハ何が動いてんの? Javaを使うという話しも何処かで聞いたが、組み込みはどうなんだい?
156 :
デフォルトの名無しさん :03/12/02 15:00
>>148 ROMライターを買うお金がない。矢張りIPLを利用して
最初から、NTみたいにLSI初期化したOSを考える事が
良いかな。
>>150 其れはバッファの役割ではないのかな。
makeは一発のみ。ミスはバイナリを直接書き換えて修正。 再度makeが許されたとしても、再挑戦の間隔は月のオーダー。 ハードをソフトに例えるとそんな感じ・・・とハード屋さんが言ってました。
何のための評価ボードなんだ
>>155 PCで、ほぼWebServerみたいなことやってるだけっしょ。
少なくともコンテンツ提供側からはftpで受け取ってるし。
#わーい、私がどの辺の仕事してるかバレバレだ〜w
>>157 ASICの話かな?
テストベクタでシミュレーションしないのかなぁ
10年前の環境並みだね。
161 :
デフォルトの名無しさん :03/12/03 00:15
PC9821・・・。ほう。なつかしい。 _ .たしか、ROMの角の端子にPS/EN(ProgramSet/ENableピン。PSがhighアクティブにしたが、実際どちらか分からない)がある。 その端子の半田を浮かしてやって、電圧かける、もしくは、GNDに落とすと、カキコModeになる。 R/W(Read/Write)でRがhighアクティブなら、Wはlowでアクティブになる。要は、バス上では普通のカキコ信号で良いってこと。 ただ、バス上でやるなら、RAMとROMに対してとアドレスストローブ(アドレス要求)がぶつからないか確認してね。RAMからACK(Acknowlidge:応答)が帰ってきちゃうから。
ROMライター無しでBIOS飛ばした時のリカバリーって やっぱりスイッチをズラーっと並べて ポチポチと入力するんだろうか(笑
原価意識かー ひげをソフトで対処しろといっていたハード屋、 「そんな周辺回路なら俺でも設計出来る」と暫くPJから干していた。 そいえば最近見ないなー 製造原価が下がって良いことだが(w
ひげ? ペリフェラルのクロックラインなら致命的だけどそれ以外ならそんなもの数ステップで解決すると思うが?
165 :
デフォルトの名無しさん :03/12/03 12:35
>>162 JPpin(ジャンパーpin)を弄る。(ボードによって違うから要確認)。
PC-9821なんかでブートシーケンス抜いたPCに書くにはパラレルIF経由で外部からアセンブラでROMに書く方法がある。
パラレルIFチップが8255使ってるなら8255のCWレジスタでPA(0〜7),PB(0〜7),PC(0〜7)の入出力方向決めなきゃならないのだが、
通常、メモリ、レジスタはLOWアクティブで電源投入時はHiになるから、PA,PB,PCは外部機器からの入力方向に設定されている。(CWレジスタの仕様見る)
これで、バスのデータラインはCPUに対して入力できる方向につながる。
_
次に、8255のCS(チップセレクト)を常時ONにして通信できる状態にしておく。(JPpinで)
更に8255をCPUに対するリクエストと割り込みを送ってやらないとCPUが8255にアクセスしない。(これもJPpinで)
あとは外部パソコンのDOSでMODEコマンドでパラレルの通信速度決めて、TTY(COMポート番号)とやるとパラレル経由で9821のCPUにアクセスする。
で、DOSでDEBUGとやるとアセンブラモードになる。で、9821のCPUに対しROMの1番地からブートシーケンスを記述してやるアセンブラコードを送ってやればばよい。
結局JPpinか・・・。
_ CS 以上。(藁
>>165 うひょ〜その労力でバイトしたらROMライター買えそうだ
9821のCPUに対してアセンブラコードを送るときは 例えば mov mov アドレス データ とはできないから アセンブラーマシン語対応表を見て mov movに対応するマシン語コード アドレス データ とする。 命令を書くときは 100 〜 102 〜 というように1個とばしで書く。 なぜなら、ここだと100番地にオペコード(命令)がはいり、101番地に〜のオペランド(アドレス、データ)が入るから。 これは9821のCPUでも同じ。 だから、〜の部分の9821のCPUが受け取る一行分(オペコード+オペランド)をオペコード(1バイト)、オペランド(アドレス、データ)(1バイト)で一行で2バイト消費することを考えて書き込む。
「mov movに対応するマシン語コード アドレス データ 」× mov カキコしてるPCのパラレルポート番地 9821が処理するmovに対応するマシン語コード mov カキコしてるPCのパラレルポート番地 9821のアドレス、データ
人力DMA(またはバスマスタ)は大昔やったな あとコーディングシートにプログラム書いてから ハンドアセンブルしてコードを直接ライターの テンキーに叩いたこともあったな
171 :
デフォルトの名無しさん :03/12/04 10:53
ITRONとvxWorksはどっちが強いですか? そういう比較スレも必要かな。
VxWORKSの資料ってどこかに無いんだろうか 英語だけってか 本も全く売ってない ITRONならオープンだからいくらでもあるのに
173 :
デフォルトの名無しさん :03/12/04 11:02
>>170 人力DMAって何さ? HWの補助なしじゃDMAはできないんじゃ
もしかしてDirect Mail Areaのこと?
>>172 WindRiverの営業さんに聞くとか、セミナ行くとか
175 :
デフォルトの名無しさん :03/12/04 17:41
CPU使わないでメモリアクセスすればDMAにちがいはなかろう
>>174 昔のマイコンキットはそうやってプログラムを入力してたんだよ。
CPU以外がバスマスタ(人も含む)のメモリアクセスはみんなDMA。覚えておくと良いよ。
ROMライタ直接入力はやったなぁ。 ジャンプ命令は取り敢えず0xffで書いておいて 後から戻って書き直し。 0xffで埋めておけばうっかり書いちゃっても消す必要ないし。 まぁ、トグルスイッチぱちぱちはやらなかったがボードで10キー入力もやったし。
贅沢だと文句言われそうだが、 PPC440GX使おうとしてる香具師いる? まだモノが無いみたいなんだが・・・
>>176-177 ああ、その事か。漏れもリア高のころ作った
ワンボードマイコンで同じ事やったよ
言われてみれば、確かにバスマスタ(w
今の仕事。 チップ選定もプログラムも自分でやらなきゃいけないのが結構欝 選定しくったら終了・・・ マイコン変える度にシリアルで悩まなきゃいけないのも欝 コスト、コストところころマイコン変える要求するんじゃねー!!! って思う。ソフト作る身になってない。 私はセット担当者と仲が悪いです。
182 :
デフォルトの名無しさん :03/12/07 01:46
>>181 マイコン遍歴は?
そんなに頻繁に変わるの?
選定も自分で出来るんなら、余裕のあるデバイスを選んでおけば?
お目付役がうるさいとか?
予算が厳しいとか?
石の値段はコストに見込むけどソフトの値段は想像すらしない担当者は多いからね。
俺の知り合いの人の明言「ソフトって、ただやろ?」 あの〜、残業代・・・ ください、お願いだから、残業した分の半分でいいから もう、ハード屋の気ままに振り回されたりするの嫌です・゜・(ノД`)・゜・
>>184 ただほど高いものはね〜んだよといいつつ張り飛ばしてやれ
ただのコーダーなんて使い捨ての屑だよ。 文句あるならやめちまえよ。てめえの代わりなんて腐るほどいるんだよ屑やろう
>>163 >>164 わかっちゃいると思うが、ひげといっても一概に言えないぞ。
あるケースでは数ステップかもしれないが、
場合によってはソフトでは対応不可能な場合もある。
CS、WE、REあたりのひげだとアウトの場合が多い。
いろんな奴見てるので遍歴なんて言えないが、だいたい半年〜1年に1回くらい変わってます。 ハードもその周期でリセットするんだから、ソフトもリセットしろって感覚だ罠 英語のデバイスはヤだよな〜読むのが苦痛。 多少高くても日本語のデータシートのある石を採用したいところ。
「ヒゲ」って、C-MOSスイッチングノイズだろ。 具体的に書くとこう | |←- 入力ー| |ー- |__出力 | |ー- 入力ー| |→- | で、上のMOSFETと下のMOSFETが同時に動作する瞬間に貫通電流(ショート)が流れる。 >CS、WE、REあたりのひげだとアウトの場合が多い。 確かにそうだな。コントロール信号のホールドタイムは変えられないしな。
192 :
デフォルトの名無しさん :03/12/07 14:09
>>191 自分も対策としてそれ書こうと思ったんだが、0.1μ以下のでも結構クリチィカルに影響するだろ。最近のはバスも速いから。
波形のなまりを補正する為にすでに各ピンのラインにカップリングコンデンサ(スピードアップ)コンデンサ入れたりして(下図参照)・・・。
ーーーRーーーー
| |
.-ーC-ー
Cにチップ型積層セラミックあたりのちっこいのがびっしりバスに噛ませてあるケースがある。
やっぱ、基板レイアウトの見直しになっちゃうんじゃない。
「ソフトはタダ」ってのは「ソフトは固定費」の意味で言ってるんだろうけど
「ソフトの改修は只」っていうのは私の現場でも言われる。 テスト用ツールを勝手に流用しておいて、その改修を要求されたり。 まぁ、そういう意味では「ソフトは只」って言われるのと大差ないね。
195 :
デフォルトの名無しさん :03/12/07 16:20
>「ソフトの改修は只」っていうのは私の現場でも言われる。 瑕疵担保責任の範囲内ならね。 そうでなければ金をふんだくる。 現在では制御装置の中で一番高い部品はソフトです。
趣味で自分の物を作る時はたしかにソフトでできることは全部ソフトでやって いかにハードを安く上げるかって感じでやってるな俺 経営側はおそらくこの感覚なんだろうな
197 :
デフォルトの名無しさん :03/12/07 16:50
制御装置ってハード+ソフトで納入するよね。 ソフトのみ受注で納品時に著作権譲渡する場合以外は、 ソフト作成費用は棚卸資産になって年次償却しないとダメやん。 ソフト只って逝ってる会社は国税局に通報します。 タイーフォ
198 :
デフォルトの名無しさん :03/12/07 17:03
ソフトも固定資産になるのけ?
>>198 法改正で10万円以上のソフトは資産の対象になるよ。
>>198 うちの会社はソフトの開発工数で固定資産計上してるよ
>>200 つまりあんた自身が固定資産という訳だ。
>>192 貫通電流起源のノイズは電源に乗るものだろ。だから電源にパスコンを入れるのが対策。
信号線のはインピーダンスによるリンギングや近所の信号の誘導電流だろ。
192は後者のほうじゃないのか。
ひげとか、そういう誤動作を証明するのは大概ソフト屋ですな。 調べるのに何Hかかったと思ってるんだ!と思っても、 ハード屋はsmnだけだからなー
204 :
デフォルトの名無しさん :03/12/07 23:06
>>203 勤務報告書に書くよろし。
じゃないと自分が(時間がかかっている)として、
評価下がるよ。
205 :
デフォルトの名無しさん :03/12/07 23:33
ハード屋と和気藹々とやってる職場てないのかな?
>>205 昔いた職場...
ハード屋はテストプログラムを、アセンブラで組んで推奨動作方法として提出する。
ソフト屋は、ハードデバッグ結果を、回路図に書いて提出する。
試作段階はそんなもんだった。
あの頃は殺伐と開発を進めていたな〜(遠い目)
209 :
デフォルトの名無しさん :03/12/08 07:56
話がそれてきてるようだな、ところで1よ 制御系の定義を示せ
>>209 スレも(4)にまでなっているのに、何を言いやがってくださいますんですか?
211 :
困ったちゃん(´-ω-`) :03/12/08 12:40
ちょっと質問。 Javaのプログラムで「Win Shot」のようなイメージ取得印刷を実現したいのでしょうが 実装可能でしょうか? 板ちがいだったらごめんなさい(*- -)(*_ _)ペコリ
>>211 実現可能だけど、まあそれやっちゃうとJavaのメリットは
9割減なんだよな
213 :
困ったちゃん(´-ω-`) :03/12/08 12:52
>>212 もしできるなら方法をご教授願えませんか?
今やってるプロジェクトで任されちゃって困ってます。
>>213 自分で作ったJavaアプリの描画領域の内容だけでいいなら
メモリイメージ作ってそれに描画する独自のGraphicsをとって
paint(Graphics g)
を呼び出してメモリイメージに描いてもらえばOK
他のネイティブアプリ等なんでもキャプチャできるようにしたいなら
ネイティブのAPI呼び出すDLL作ってOSの機能を呼び出すしかない。
JNIでぐぐれ。
これを使うと212のいうとおりJavaのマルチプラットフォームを
捨てなければならないが。
215 :
困ったちゃん(´-ω-`) :03/12/08 16:40
今回はJavaアプリ上のイメージだけでいいのでJNIというのは使わなくてよさそうです。 またまた質問なのですが、 メモリイメージを作る、描画する独自のGraphicsとはとはどういう風にすればいいのでしょうか? わりと大規模なシステムにも対応可能でしょうか?
・・・という回路を作りたいんですか?
217 :
困ったちゃん(´-ω-`) :03/12/08 19:50
??? ちょっとよく意味がわからないのですが。。。すみません。 えっと、金融機関系のシステムなのですが、「印刷」キーを押すと 見たまんまの画面を印刷するようなしくみをJavaで作りたいのです。
>>217 それはこのスレの趣旨と違っているような気がするんだが気のせいか?
そもそもここは制御系のスレだぞ。
>>217 その「印刷キー」がハードウェアキーであり、
印刷を行う機器が「ワンボックスタイプ」とかなら、趣旨にあっている。
間違ってもPC上の一般的なOSでの話ならスレ違い。
最近、組み込み系にもUMLという表記法を使ってオブジェクト指向を適用 しようという動きがあるようですが、実際問題ぶっちゃけどうなんでしょうか?
今度ATMに印刷ボタンをつけることになったんです。 #だったら笑うんだけどな。
222 :
困ったちゃん(´-ω-`) :03/12/08 22:13
>>217 すれ違いでしたらすみませんでした。
いちおう私が担当しているところはJavaアプリケーション開発の
汎用プリンターのところだったので、これも制御にあたるかな?と思ってカキコしました。
質問もどこに書いていいのかわからなかったので・・・。
>>221 ATMではなくて営業店端末の話です。
わ、笑えん・・・プ
>>220 オブジェクト指向??
eUMLの渡辺何某かぶれだな
敢えて言おう。
戦場には不要だ!
>>205 自分の職場はそうかも。
小規模なものならシステム設計から製作まで一人でやるので、
ソフト屋・ハード屋の境界はあまり無いかも知れないけれど。
分担する場合でも、ハード担当がソフトを手伝ったりその逆があったり。
どちらがこけても互いに泣きを見ることになるので、協力してさっさと終わらせた方が得。
勤務報告にはちゃんとつけとくけどね。
227 :
デフォルトの名無しさん :03/12/08 23:59
俺は、今まで業務系しかやった事ないが、 最近からLSIの評価プログラムを作る事になったが、 はっきり言って、わけわからん。 とにかく、ハードの仕様書が読めない。 割り込み処理がよくわからん。 割り込み処理のレジスタに値入れてるのに、 なんで割り込み処理が起きないんだ? まともに動作確認も出来ない。 ビットごとに値や、イネーブルをどうのこうのとかもわからないし。 メモリ管理とか、ここのアドレスはスタック領域だとか、 全然わからねー。 一体どうしたら、仕様理解できるんだ?
229 :
デフォルトの名無しさん :03/12/09 00:26
答えになってないです。
>>227 >ハードの仕様書が読めない。
これをなんとかしない限り100年かけても完成しません。
「漏れがDBって何だ?」という状態で業務系APを作っているようなもんです。
まず「プログラムはなぜ動くのか」、「コンピュータはなぜ動くのか」
あたりでも読んでください。
割込みは、最初の頃は 命令フェッチサイクルで別の命令を”割込"ませることから割込みと呼ばれています。 しかし、今では専用ハードウエア機構を持った強制callのイメージですね。 ですから、割込み処理のレジスタ --たぶん割込みベクターやイネーブル制御だと思うが に値を入れたり変更しても割込みが発生しない事が多いです。 割込み要求フラグの場合は、それを変化させれば割込みが発生する場合もあります。 割込みをソフトウエアで発生するなら、トラップ命令やpushステータスとcallを組み合わせる事が多いですね。 でも、実際に割込みを発生させてトレースした方が楽でしょう。なぜなら、通常割込内でハードウエアを アクセスするのが普通だからです。 ビット毎に値やイネーブルは、それは勉強しましょう。 フラグ管理は最近業務系では嫌われますが、組込、制御では、いまだに全盛です。 メモリ空間については、メモリアクセスの機構について学べば理解出来ると思いますよ
233 :
デフォルトの名無しさん :03/12/09 17:44
割り込み処理のレジスタに値入れてるのに、
なんで割り込み処理が起きないんだ?
は良く分からんけど、
ビットごとに値はページ切り替えとかで使うだろ。
ページ切り替えとは例えばPICのようにアドレス00〜4Fと80〜8BまでのアクセスはSTATUSレジスタの5bit目を0/1することによって切り替える。とかな。
イネーブルは入出力ポートの入力方向に設定か出力方向に設定かをこれまたレジスタのbitの0/1でポートごとに切り替えられるてことだろ。
(実際どう入出力ポートの入出力方向切り替えてるかはVHDLスレの
>>219 みてみ)
(どうやって切り替えてるかは、トライステートバッファでググって見ろ)
あと、処理の基本の分岐はアセンブラでは条件付ジャンプ=フラグを見てJMPするか決める、だからフラグに直接bit立て下げは頻繁にする罠。
スタックは基本的に先入れ先出し(FIFO)だろ。例えば、通信データを受け取って、スタック領域(スタックポインタ)に入れていけば、CPUの処理に応じて、先に入れたものから、順次取り出せる。先入先出機能が付いた便利なサブルーチンみたいなもんだ。
あと、割り込みかかるときは、CPUが自動的に割り込み処理終了後の戻り番地をあるレジスタ(CPUによって違う)に退避させ割り込み時に必ず飛ぶ番地にJMPする、以外に、
人間が手動でやらなきゃならないことがあるんだぞ。
まず、割り込み中に使用するレジスタはすべて、別の場所に退避させなきゃならない。(CPUは勝手にやってはくれない)
上に、「必ず飛ぶ番地にJMP」と書いたが、そこにサブルーチンへのJMP(どこからの割り込みかによって分けるときは条件JMP)を書いておき、割り込みはサブルーチンにすると便利。
で、割り込み終了命令を掛けると自動的に上記戻り番地を読んで処理を戻してくれるCPUもあれば、自分で割り込み処理の最終行に読み込ませるコードを書かなきゃならないものもある。
>>233 何が言いたいのかよくわからんけど、
スタックは普通LIFOだ。
つーかFIFOなCPUってあるの?
単に割り込み禁止になってるだけのような…気がする。
>>235 んだ。
割り込みのコントロールレジスタとデータレジスタの両方持っている奴も
最近は普通にあるからな。
あとはDirection RegisterとかでI/Oが逆とかな(w
論理逆にしていたことがあるな。 あれは気が付くまで、えらく苦労した。 間違って出力にしていた時は、オシロであたってすぐに気がついたんだが。
プルアップとプルダウンを間違えてはまりました
ふっと「オープンコレクタ」を思い出してしまった。
>>238 モノによってはショートの恐れもあるから、気を付けるべし。
(って、最近のは保護回路も入っている?)
>>239 入力側の話じゃろ。
C-MOS(FET)は入力インピーダンスが∞に近いから、手でピン触れただけで静電気で死ぬ。
プルアップかプルダウンするけど、それ間違えて、入力のロジック狂ったのだろう。
或いは、まさにオープンコレクタで、プルダウン抵抗(プルアップ抵抗でなく)にしてしまったか・・・だな(w(これが動作しても入力側チップのピンに入力電圧源がない)
日本は湿度が高いので強烈な溜まり方はしにくいので 多少の静電気では死なんのでよけいたちが悪い ピンの電位を固定したつもりでプルアップ(ダウン)抵抗が 繋がってなかったため静電気でチャージされて HiになったりLoになったりで動いたり動かなかったりというのがあった 一気に壊れてくれれば話が早いんだけど(笑 こういうのはいくらソース眺めても原因はわからん
プルアップなんかに抵抗は要らないんだよね。Vccに直結でいいじゃん。
>>242 もちろん、オープンコレクタにVcc直結は思いっきりショートするから論外だけど、
電源ラインに乗るノイズ(石内部で増幅)を防ぐ(抵抗で消費させる)ためにも、気休め程度に入れとくのがスジ。
>>243 あっ、2番目のは使用しない入力ピンの話ね。
>>242 抵抗といったのは言葉のあやってもんよ
部品としては0オームの抵抗というのもあるわけだしな
要するにジャンパーだが
>>242 後になって入力ピンが必要になったときに、直結だと困る。
入出力切り替え可能なピンのプルアップを直結にすると ソフト的にバグって出力に設定されてしまった時に死ぬので・・・以下略
そんな死ぬほど電流取れるのかな最近のCPUの出力って・・・・ でも空きピンでも抵抗つけてくれていると、後で足が不足したなんて時にはホントありがたいよね ピン間0.3mmなんてのにジャンパしなけりゃならなくなったホント
うむ確かに死ぬほど流れないかもしれない でもデーターシートに短絡保護ありとか 壊れないことを保障する文字が無い限りは 壊れるものとして扱わないといけんじゃろうやっぱし
>>242 プルアップは抵抗でやるのが定石.
実験でやるならまあいいっか.
>>241 ソースだけじゃなくて.回路図もみるべし.
252 :
デフォルトの名無しさん :03/12/10 13:10
すれ立てるまでもない質問は…から来ました。 パソコンで、パソコン外の機器の、複数のスイッチのon、offを操作したいと 思います。 例えば、DIRECTORで制作したムービー再生中に、 [1]キーを押せば、ひとつの照明が点灯して、 [2]キーを押せば、もうひとつの照明が点灯して、 [3]キーを押せば、上記ふたつの照明が点灯する、 といった、感じです。 学校の課題で必要になってしまったもので、 初心者というか、ど素人なんです。 このスレの内容をざっと読んだんですが、 難しい内容で、ここでこの質問をするのが適当か、さえ分かりません。 こういうことをしたい場合の、適当なスレが他にありましたら、 誘導をお願いします。
>>252 >パソコン外の機器の、複数のスイッチのon、offを操作
その装置はどんな構成になってるんだ?
>>252 ・学校には詳しい先生がいるのか
・機器を作る所からはじめるのか、機器はあって制御方法がわからないのか
・作るならば、パソコンと機器はどのような通信方法を考えているのか
・部品は調達できるのか
・半田ごてやROMライターはあるのか、また使いたいCPU等の種類は何か
・予算はいくらくらいなのか
>>253 構成と言われても、どう答えたらよいか分からないので、
見当違いな答えになるかもしれませんが、
パソコンから信号を送ることで、
スイッチのリレーをon、offして、
照明のon、offをしたいと思っています。
やりたいことは、映像に合わせて照明を光らせたい、ということなんです。
パソコンに何でつないで出力するのがいいのか、
ということさえ、分からない状態です。
こんな私には無茶なことなのでしょうか?
>>255 無茶かどうかは>254の質問を答えてからだな
あと、納期と電子回路の経験の有無も聞きたい。
>>254 ・学校には詳しい先生はいませんが、詳しめの先輩はいるようです。
・機器をつくるところからはじめるのですが、ほんとにただの自作照明の
on、offです
・パソコンと機器との通信方法は未定で、ノートパソコンとつなぎたいので、
USBやLANポートくらいしか現状ではないです
・部品は秋葉原までならなんとか行けます
・半田ごては大丈夫です。ROMライターっていうものは、初耳なんですが、ざっと調べたところ、持っていないことは間違いないです。CPUと言いますと、
ここは、どう答えれば分かりませんが、ノートパソコンはmacのiBook G4なんです。
・予算は安いにこしたことはないのですが、8万くらいは用意できます。
すごく失礼な環境でしたら、申し訳ないです。
>>256 納期は半月からひと月でなんとかしたいです。
電子回路の経験は、初心者に毛が生えたくらいって感じでしょうか。
半田ごてなら自信あるのですが…
電子回路に対して拒絶反応はなく、勉強することは苦ではないのですが、
問題は納期っぽいですね。
>>255 パソコンのI/O(例えばSerial)でリレーのコイルを駆動できるドライブ電流は得られない。
では、どうするか。ダイナミックドライブを使う。
ダイナミックドライブとは何か。→トランジスタ駆動で駆動(後はググレ)
一応、軽く・・・。
Vcc
__|
| .|
△ リレーのL
|__|
.|
/
I/Oのピンーー| Tr
\
.|
.R
.|
GND
△はダイオード。つける理由は、トランジスタがOFFしたとき、今まで流してた方向にLから誘導電圧が発生するな。
誘導電圧+Vccで約2倍以上の電圧がトランジスタにかかる訳だ。
ダイオードでLの両端を回しとけば、Lの電圧による電流は循環されて、誘導電圧は0.7v(ダイオードの電圧)な訳だ。
この回路はディスクリート基板で作るだろうが、I/Oのピン出力電力は微弱で、ノイズ電力に影響される。(容量性のノイズに影響されるという。対して、波高が高いのをスパイクノイズに影響されるという。ジッタは共振性だ(反射波の影響等))
従って、I/Oのコネクタを基板につけてTrとの間にドライバICを設けるのも手だ。
(内部回路は
_|\_
|/
のただのバッファ)
>>257 担当はこのスレで良いと思うんだけど、かなり無茶っぽいねえ。
漏れだと「無理でつ。他当たってくだたい」って言っちゃうな。
Windows環境なら今やってる仕事よりは難易度低いんだけど…
照明オンオフはいくらでも助言がでてくると思うけど、
Macとのインターフェイス部分を教えられる神が居るかどうかだな。
>>260 の回路でやるなら、I/OPINとTrの間に抵抗を入れたほうが良いかもしれない。
抵抗値はTrの下の抵抗との兼ね合い。(分圧されるから、TrのB電圧が失われるのを防ぐため)
抵抗入れると、容量性ノイズを食ってくれる。
また、リレーのチャタリングを抑えたいなら(波形のなまりをシャープにする)
_C_
| |
ーーーR−−−
というようにカップリングコンデンサ(スピードアップコンデンサ)を入れる手もある。
USBでAC100Vを操作できるアダプタって売ってないのか? そんなもの誰も必要としてないか。
まあUSBにRS-232C変換を買ってくればCOMでの制御は可能・・・かな
>>260 シリアルのI/Oでリレー駆動させるの?
マイコン買ってきてマイコンと照明機器をI/Oでつないで(照明機器をON/OFFさせる回路は別途作る)
マイコンのI/Oポートパタパタさせて照明ON/OFFするのかと思った。
LAN機能のあるマイコンで、サンプルソースに簡易Webサーバ機能がついてれば、
PC側のソフト作る必要もないし、遠隔での操作も可能になるぞ。
まあ開発環境を構築する必要はあるが。
>>260 ベースエミッタ間のRは場所を変えたほうが良いでしょう.
LSI からとれる電流は生成5mA(それでも普通はスペックオーバ)
だから元の接続方法だと,Rの値は4.7KΩあたりかな?
そうなると,VCCを5Vと仮定するとリレーを動作させるために
必要な電流(マイクロリレーで100mAくらいか?)をながせないよ.
Vcc
__|
| .|
△ リレーのL
|__|
.|
/
I/OのピンーRー| Tr
\
.|
.|
.|
GND
すでに
>>252 は話題についていけてないに1000カノッサ
あっ、しまった待てよ。
>>252 は「複数の照明」とかいってたな。
>>260 の椰子じゃ、パラレルポートなきゃできないじゃん。(w
MACのnoteにそんなのないし。
やぱ
>>261 のように、pic-232Cコントローラ-232CUSB変換-MACとつないでpicと通信させるとかじゃないとダメかな。
>>269 そうなりますねぇ
問題はMACでのコンパイルや書き込みだけど。
皆様、たくさんのレスありがとうございます。 ひとつひとつのレスが言わんとしていることを理解するのに 時間がかかりそうです。 うーむ、思った以上に複雑そうですね。
>8万くらいは用意できます。 だれか請け負いそうな金額だね。
正直、PCで制御云々は投げちゃって、 普通にスイッチでポチポチとやるってのはだめ?w >[1]キーを押せば、ひとつの照明が点灯して、 >[2]キーを押せば、もうひとつの照明が点灯して、 >[3]キーを押せば、上記ふたつの照明が点灯する、 このくらいなら、PCで制御させる必要ないでしょ?
>>272 VirtualPCを使っているけど,これって課題に即しているのかな?
MAC 上でクロス開発までなら周辺デバイスの制限はないとおもう
が, Virtual PC 上の windows から USB 経由で RS232C が
制御できるのかな?
ほんとに動くようなら,興味ある.詳細情報ギボン.
>>274 こっちのほうが,H/W の方はかなり使えそうだ.
しかし Apple の開発環境立ち上げがつらそう.
マイコンは初心者でも使えるとしたら・・・ 簡単>PIC,AVR>H8>難しいってな感じ。 80系CPUキットもあるけれど、ワンチップじゃないから(ROM,RAMとCPU別々)バスを理解するのに手間取るかもしれない。 ところで、MACのC言語はconio.hあるのかな。 これあると、API抜き(APIと呼んでよいのか(w))でポートに直接読み書きできるから楽だけど。 picから先はダイナミックドライブでリレー駆動ー照明器具の感じかな。 やる為に必要なこと。 ・C言語を理解。(VBでもできるな。) ・CPUのプログラムのアセンブラを理解。 ・ダイナミックドライブ回路、MACとのIF回路を理解。 ・ワンチップCPU(あるいはROM)への書き込み機やハード部品をそろえる。 こんな感じか。
>>276 >VirtualPCを使っているけど,これって課題に即しているのかな?
>MAC 上でクロス開発までなら周辺デバイスの制限はないとおもう
>が, Virtual PC 上の windows から USB 経由で RS232C が
>制御できるのかな?
その前に、VirtualPCにVisualStudio載らんだろ。
VC6.0の箱見てるが、CPUもPenが指定されてるぞ。
>>280 どこをどうつっこんだらいいのやら・・・
PCからデジタル出力を取出すだけなのに、ものすごく手間かかるな。
やることの一つ一つは単純なものなんだけどね。
あるいは、PCIカード挿して、DA変換した出力をダイナミックドライブ回路に突っ込むって手もあるな。
そうすりゃ、マイコン使うというマンドクサイことしなくてもよいと思うけど。
DAボードとかでググレば色々あるだろう。
例えば、
http://www.interface.co.jp
↑スマン。外部回路無しで直接照明器具駆動できるかもしれない。 出力 10組/リレー接点/NC,NO,COMの3線式 接点容量:DC30V1A/AC125V0.5A ~~~~~~~~~~~ とあるから。 ただ、0.5Aて、照明って電流もっと流れなかたけ? これ以上流れたらボード死ぬし。
>>285 RBIO-2U(USB対応モデル)¥11,200(税別)
>>288 いや、たしかにUSBだけ
RBIO-1 Windowsが動作するDOS/V機、NEC製PC-9801/21シリーズ、シリアルポートを持ったMacintosh、RS-232Cポートを持ったPDA(Palmマシン等)、シャープポケコン
RBIO-2U USBインターフェースを装備しWindowsが動作するDOS/V機(デバイスドライバ付属)
RBIO-3E Ethernetを装備しJavaアプレットが動作するブラウザ環境(http使用時)
Ethernetを装備しソケット通信が可能な機種(データの直接操作時)
とあるから、
>>252 はマクーだし、RBIO-1でしょ。
ただ、問題が、RBIO-1がUSB/232C変換使えるかどうかってことかな。
Cでsocket使えるなら3もありだな。 Javaでもできるとは・・・・、どうやるのか知らんが、3でも楽勝っぽいな。
RBIO-1はRS232CであればOKだろうけど、MACのDIRECTORが USB-232Cにデータを送れるかどうかと、 ダイナミックドライブ回路-照明器具を彼が作ることができるかが課題ですわね Ethernetのほうは、単にsocketプログラムだろうから普通のネットワークプログラム ができればOKだと思うわ
PCからコントロールするわけでもないのになんでPCを経由させようとしてるのか・・・・ 謎である
?
>>252 にキーボードで照明を切り替えたいって・・・
>>251 回路図は正しいのよ、つまりハードバグね
>>294 だからさソフトでオートマチックにコントロールするんでなくて、あくまで手動なのよね、この場合
スイッチから照明がダイレクトに反応するだけでしょ
PCを経由する必然性が感じられないわけよ
>>295 ちゃんとよんでななった.ごめん.
>>ピンの電位を固定したつもりでプルアップ(ダウン)抵抗が
>>繋がってなかったため静電気でチャージされて
ハード不良は見分けるのが難しいね.
>>296 >ソフトでオートマチックにコントロール
>>252 に聞いてみないと分からんが、いずれ、スイッチの変数をプログラムに取り込んでそうしたいんじゃないのかと・・・。
いーんじゃない?学生であればやって損は無い課題だと思うわ。
わたしの0.5ビット勘ぴゅーたーによると 技術系ではなく美術系の課題だとみている
全世界の初代チプータイプのCPUはintelの4bitCPUの4004です。 電卓のみで使用されてました。 0.5ビトーとは用途は・・・(wr&ry
用途は人生をかけた大博打
>>301 アナログコンピュータということをいいたいのではないかとおもわれ.
4004 かあ.ふ.古い.
1bit CPUってもう無くなった?
豚に真珠的なアドバイスも多かろうと思いますが、
たくさんのレス、ありがたい限りです。
最終的には、ムービーの再生にあわせて、スイッチがon、off、
自動で行われるのを目指しています。
ですから、[1]キーとか書いているのは、
分かりやすくするためのものでした。
>>285 さんが紹介してくれた製品を視野に入れつつ、
もう少し熟考してみようか、って感じですね。
正直、こんなにレベルが高い作業が必要とは、思ってもみませんでした。
>>300 その勘ピューター、優秀です。
美術系なんで、ねぇ、
この部分はメインではなくて、おかずなんですよ。
簡単にいうと、ディスコ(死語)の照明みたいなのが作りたい、といったところかな。 "MIDI"ポートで"照明コントロール"して音楽と照明を同期するってのも ありますけどね。(高いよ)
>>304 うーん.おもいだせない.モトローラに 1bit MCUがあったような
気がするが 1970年代の話だっけ?
>>307 実は、照明ってとこも、便宜上のことで、
動かすものは、ちょっと違うんですよね。
せっかくのアドバイス、申し訳ないです。
>>309 情報の曖昧/不正確な質問は、かなり失礼だぞ
>310 日頃からあいまいな仕様書と戦うプログラマの苦悩
制御が"おかず"って・・・。 *゚。(´-⊂)。゚*ノワアアアーン いいさいいさ、どうせ制御なんて・・・(ry
>>310 ほんと、すみません。
美術系なだけに、動かすものが特殊なものなので、
AC100Vでon、offするものの代表的なものとして、
照明をあげてしまいました。
>>306 まかせなさい0.5ビットの偉力です(笑
プログラミングのほうはできる人なのかな?
間に合わせでいいのならプログラミング的には画面上に光点を表示させといて
それをフォトトランジスタなんかで拾ってリレーを駆動するっていう手もあるよ
この程度のハードならそこらの電子工作少年レベルでなんとかなるから
部品代込みで5万とかって言ったら狂喜乱舞して引き受けてくれるだろうと思う(笑
光点をムービー内に作りこめばプログラミングもいらなくなるしどぉ?
>>308 うん、そのころだったとおもう
マイクロマウスに使ってる奴が居て
なんやそれって思って印象に残ってた
>>307 MAC に MIDIポートあるならそれが一番簡単かもね。
MIDI通信規格は調歩シリアルで簡単。
8PINのPIC でシリアル受信1 残り5個のポートにフォトトライアック で 5つまでチカチカ出来るよ。
1bitコンピュータってのは CMOS 45xx シリーズの事だろう?
美術系の場合は要求仕様がものすごいことになる場合が多いんだよね 効率とかその辺のことはまったく考慮されてなくて、これ動かしてって感じで来るから 飾りがばたばた動くだけなんだけど消費電力が数十キロワットとか有ったりして うそだろぉ〜って(笑 実に制御屋泣かせ
>>318 小林幸子の裏方さんですか。大変ですね。
>>318 数百アンペアか・・・。
10階以下くらいの小型のビル並みだな。
>>314 さすが!.
普段,USBだ,1394だとかあーだこーだいってると,
そういう発想しなくなっちゃいますね.
昔のライトペンをおもいだしました.
>>324 '1977といえばモト(冬樹じゃないYO)が6800、8bitCPU出したとっくの後だな。
マウスとか、ペンシルデバイスの狙い撃ちCPUか。
>>324 おお〜これですかぁ、一応4500シリーズということになってるわけですね^^;汗
329 :
デフォルトの名無しさん :03/12/10 18:02
>>266 の回路ってダイナミックドライブなのか?どの辺が動的?
普通ダイナミックドライブって言うと、
7segLEDとか、複数のLEDを駆動する際、高速で順番に点灯させることによって
残像効果を利用して、LED一つ分の電流で同時店頭に見せるっていうこととかだろ。
増幅するのが何でダイナミック?
330 :
デフォルトの名無しさん :03/12/10 18:04
まちっがった 266じゃなくて260ね
>>329 全くその通り。ギャフンです。(-ω-)ξ・・・
単にTrドライブでした。
>>329 たぶんダイナミック点灯の回路図をみて
ドライブ方法の名前ではなくて
ドライブ回路の名称だと勘違いして
それを指摘してくれる人がまわりに居なかったので
定着してしまったものとおもわれ
>誘導電圧+Vccで約2倍以上の電圧がトランジスタにかかる訳だ。 これは正しいか?
あっゴメン。ダイオードでLの両端を回しとけばって続いてた。
335 :
デフォルトの名無しさん :03/12/10 18:23
>>333 かかる電圧はLdi/dtでないの?
di/dtはトランジスタのターンOFF特性に依存するだろう。
仮にターンOFF時間が1us、リレーのインダクタンスが10mH、電流が100mAならば、Ldi/dt=10mHx(100mA)/1us=1000V
Vccの2倍ってのはわからん
>>Vccの2倍
やってみると大体それくらいになったからです。
かかる電圧はLdi/dt全くその通りで、Trの性状にもよると思いますですハイ;;。
ここは
>>260 を晒しアゲのスレでつ。(w
どうぞ祭上げてくださいましですハイ。
>>336 では遠慮なく(笑
やってみたらというのはどんな測定器で測ったのかが問題
インピーダンス低いとそっちに消費されて高くならない場合もあるし
時間が短いからそれなりのものでないと観測できないし
#24Vでリレー接点でソレノイド駆動の回路でズガンズガン感電するので見てみたら
#フライホイルダイオードが入ってない・・・・触感では優に100Vオーバーな感じ
#でも何食わぬ顔で動いてる装置、すごいと思ったよ
#CPUは386が乗っていた
ダイオードないと5V駆動のリレーでも、火花飛びまくるよ。
あと、測定にはオシロつかっちゃだめだよ
プローブってのはコンデンサだからね。
あと、実際にリレー動かすならば、
>>260 の回路のフォトカプラで絶縁しよう。
それと、マイコンで数mA出せるってのは誤りで、性格にはLow出力時に数mA吸い込めるって言うこと
Highd中と出力時はuA程度しか出せない
だから、
>>260 の回路ではマズ動かない
>>339 I/O バッファが TTL 互換だと,電流ソース型で回路を組むとだめだけど,
最近のは push-pull 型(ソース,シンクとも同じだけ流せるタイプ)が多い.
MPU の型番によっていおりろあるので,だめ〜なものもたしかにある.
折れ的には,電流駆動型のデバイスであーだこーだしたくないので,
MOS FET でスイッチするのが好みだな.
んで、この祭りのネタ蒔いた彼はどうなったのだろうか?
いろいろ意見が出ているが、シーケンサ使うのが良いんじゃないの? スタート信号だけ与えてシーケンサの内部タイマでON/OFF制御させるっての。 リレー接点出力タイプで容量が足りない場合はトランジスタ出力タイプにリレーなり SSRなり繋げばよいし。 あと、PICやAVR使ってMIDI信号に同期させる調光装置なんかも海外のサイトで見た 気がするけど...忘れた。
>>265 100票!
ふつ〜のRS-232C制御のリレー板買ってきて終わり。
>>343 それは元ネタの彼がプログラムを組めるかどうかにかかっている
質問なんですが。 複数台の機器Aのパラレルポートの出力を計測して結果をPC(Win)に取り込みたいんです。 (計測中も結果はPCに表示される)。機器Aに機能追加はできません。 出力は1ms〜4msくらいで、機器A1台につき16Bitもあれば今のところ十分です。 機器AとPCの間に機器Bが必要だと思うのですが、機器B⇔PC間の通信方法で悩んでます。 制御系は未経験で、分かる言語はJava、C、C++、C#、VB、Z80アセンブラです。 できればPC側はJava+TCP/IP通信でやりたいんですが、可能ですか? 可能なら機器Bに必要なものはなんでしょうか? 秋月?のH8+LANボードで実現できますかね?
>>346 16kbit/sec が数チャンネルなら USBで十分じゃないすか?
>>all
たくさんのアドバイスありがとうございます。
とりあえず、
>>314 さんのアイデアで制作を進めていきながら、
不満と余裕があったら、その回路を流用して
他の案も考慮したいと思います。
なにしろ、314さんの案でさえ、かなりの試行錯誤をしそうなもので…
まずは、たくさんある(であろう)フォトトランジスタのなかから、
最適なものをみつけなければならないわけで…
光点っていうのは、画面の一部を光らすってことですよね?
どれが専門用語かも、わからなくなってきました…
>>349 あらら採用されちゃった^^;おそるべし0.5びっと
外乱光の影響受けやすいから安定性の面ではやや難有りかもですよ覚悟してかかってね
ライトペンが実用になってたわけだから大丈夫だとは思いますが(^^;
>光点っていうのは、画面の一部を光らすってことですよね?
そのとおりでふ
>>347 うーん、USBも考えたんですが、Javaという選択肢はむりぽになってくるので・・・
かなり好き放題(できるはず) & PC側のGUI構築もあるので
WinAPIとかMFCではやりたくないんですよね・・・
>>348 (つд`)もちっと教えれ・・・
>>351 > (つд`)もちっと教えれ・・・
これに対するレスちゃうの?
>秋月?のH8+LANボードで実現できますかね?
もっと詳しいことあるいは最適解は信号がどんなものなのか具体的に分からないとむりぽ
すごく遅レスですが、
>>260 での回路図の概要がようやく分かってきました。
しかし、トランジスタ保護ダイオードとでもいうのでしょうか、
それをつける理由がいまいち分かりません。
ググってばかりではなく、本屋にでも行ってみようかと思います。
>>353 こういう使い方の場合は
一般的にはフライホイルダイオードと呼びます
それでぐぐってみたらいいかも
>>352 あ、そうでしたか、スマソ
>>348 信号の各Bitにはそれぞれ意味があり、
・機器Aにつながってるセンサを物が通過したかどうか(センサにより検出方法は違う)
・機器Aはある状態か否か
でつ。これらが何個かあるだけでつ(合計で16以下だったと思う)。
主にやりたいのはセンサ通過回数のカウントなんですが、
それを状態別に分けたい、という要望があります。
ダイオード+リレー → オム○ンのダイオード内蔵型リレー + トランジスタ+抵抗 → デジトラ or 抵抗内蔵型トランジスタアレイ + 入力制限抵抗 100Ω + アイソレート → フォトカプラ 汎用的なディスクリート部品は内蔵されている物もあるんだから初心者はそれを使った方が確実だな。
>>355 装置Bに必要な機能としては、
・TCP/IP socketによるPCとの通信機能、IP、Port設定スイッチ
(IPは192.168.20.Xなどにして、Xだけを重複させないとか。Portは固定でいいかな)
・スイッチONまたはリセット時、PCにconnectをする機能
・装置Aのパラレルポート状態を監視する機能
・パラレルに変化があった時、状態を送信する機能
・リセットスイッチ
くらいかねぇ
PC側(Java)としては
・装置Bとの接続(listen状態にしてBのconnectを待ち、acceptする)
・readがあれば状態の変化があったものとして反映
・通信のスタート/ストップのパケットを決める
・Bのクローズ/スイッチオフ等の処理
あとはBから自動的に送られてくるデータを処理すりゃOK
くらいかねぇ。。。
ボードにTCP/IPプロトコルスタックがついてるかどうかでまた違うけど。
機器Aはパラレルに、モノが通過した旨をどんなコードで送ってるの? 何種類かセンサあるんでしょう。 どんなコードとは、セントロとかの通信規格がどんなの使ってるか・・・。 また、モノが通過した旨のコードはわかってるの?
>>353 見た所 260の回路は定電流回路で使うエミッタ帰還のようだ。
hfeに関係なく一定の電流に制限したいという目的に便利。
でも、リレーには VCC-リレー電流/Rと電圧が低くかかってしまう。
× VCC - リレー電流/R ○ VCC - リレ電流+R
>>361 >一定の電流に制限したい。
そうなってしまいますですハイ。殆ど電流増幅しないですハイ。
>>260 の回路のB-E間抵抗をhieとしますと、電流増幅度hfeは
hie
hfe=1+ーーー
R
となってしまい。Rが大きいと出力電流が入力電流に殆ど変わりなくなってしまいますですハイ。
エミッタフォロワ(コレクタ接地)にしたのは間違いでしたですハイ。
やるなら
>>267 サンのようにするか、リレー電流を制限したいなら
Vcc
__|
| .|
△ リレーのL
|__|
.|
R
.|
/
I/Oのピンーー| Tr
\
.|
.|
GND
とすべきだったですハイ。(-ω-;)ξアセアセ。
あと、
>>339 さんの通り、PCやマイコンのI/O出力ではTrを駆動できないですハイ。
入力はI/O-ドライバIC(バッファIC)-Trとすべきだったですハイ。
ドライバ(バッファ)の内部回路はただの
_|\_
|/
ですハイ。;(-ω-;;)ξ
Xport かぁ 1個入手して転がってるけど、なんとなく手付かず 英語読むのだりぃので日本語の資料がほしいなあ
漏れ昔にさーんのエンジン制御をあせんぶらでやってた アールさんにとかさんさん。 れーにっくつくってぽしゃって、オートマのほうにとばされてC言語やった。 んで、いまは、ぱーぴーしーのTPUやってる。 んで、ニホーン語わすれた。。。
>>364 100Vの制御は、基板的にちょっとつらそうですね。
リレーの出力をなるべく太い線で引き出して、端子台をあらたにもうけるとか、
回路そのものやPIC,XPortを流用して、リレー周りに電流流せるようにした基板を
起こすか。P板.COMなんかなら、5万くらいでPCB起こせるし。
>>369 俺、伊勢崎の某所に、エンジンコントローラのチェック冶具納めたことあるぞ(w
重工か日産車じゃないと追い返されるってー噂の(w
日○ユ○シ○か…
ちがわいヴォケ ということで、自動車の制御系はオープン・ソース化しますね
エンジン制御のプログラムとかって何人ぐらいで作ってるのかな?
少なくて2人、多くて4〜5人がベストだと思ふ それより多いと予算で激しく流動するので プロダクト・ラインとしての保守が難しくなりまつね
多人数でプログラム作る時って分担とか面倒だと思うのだけれど、 皆さんはどんな風に切り分けていますか?
市販のPCI用のD/Aボードについて疑問に思ったこと。 使ったのは±5Vまで出力できる奴。 電源投入時は0Vだろうと思って、試しに電圧を測ったらDC5Vが出ていた。 プログラムでドライバを初期化したら0Vになるものの、危うく出力先の回路を壊しかけた・・・・・・ これって、5Vを出力することに何か意味があるの? 素人の考えでは0Vにしておいたほうが安全だと思うのだけど。
>>378 制御がかかってないのでだだ漏れになってるだけなのでは?
たぶんコストとの兼ね合いで仕様なんでしょう
>>380 PPI(たとえばの話ね)なんかだとリセット時はピンがハインピーダンスになるでしょ
そうするとプルアップなんかしてるとその後に繋がってるデバイスにとっては
全Hiの信号が来るので対策してない限り最高出力になってしまうというのがごく自然なような気がスル
>>381 PPI みたいな入出力が設定できる奴は、リセット時にハイインピ (と言うか、入力モード) になるのは普通だけど...。
その場合だとプルダウンしておくか、ドライブ能力等でプルダウンが難しいなら、反転して DAC に入れるしかないかなぁ。
(データは、ドライバで反転してもらうとして...。)
う〜〜〜ん、そこら辺がコストに跳ね返るのかな...。
>>382 PPI はたとえ話なので適当に聞き流してください
使ってるデバイスがたまたまそういう動作をするものだったということじゃないかな
そしてそれが一番安くあがるものだったというような(笑
どっちにしてもリセット時は最大出力か最低出力になってしまうのが普通なような気がするので プラマイ出力のボードをリセット0vってのはそれなりに対策が必要な気がしますね
答えてくれた方々、有難う。
やはりコストと仕様の問題なのか。
>>380 インターフェースのPCI-3525。
説明書に描いてあった内部概略図によると、出力側を+5Vでプルアップしてる。
+5Vが出力されるのはこれが原因であることは判ったけど、
なんでそんなことをするのか理由がわからなかったのよ。
そんなこと知らなくてもボード自体は使えるんだけどね。
後学のために理由を知りたいと思った。
>>380 なるほど、そういうボードもあるのね。
わざわざ書いてるっていうことは、やはり珍しいのかな。
386 :
デフォルトの名無しさん :03/12/14 01:39
PPIはプッシュプルのIFのことなのかなぁ。 なら、蛇足だけど、 例えば、出力がオープンコレクタなら +5 | R __|____出力 / ボード _| 内部 | 出力 .\ | | GND で、電源投入直後は、ボードの出力でてないからC-E間は断で、出力は5V出てる罠。 ボードが立ち上がれば、Bに出力でて、C-E間が通になって、+5VはRで消費されて、出力は0V
>>385 たぶんねリセット時は出力がハイインピーダンスになるかオープンコレクタだからだと思うよ
>>386 うひゃあ、PPIを知らない人が・・・年食ったな俺も(笑
その昔は入出力デバイスといえばこれというくらい標準的な物だったのだが
ウチの昔は244と273が定番だった…
>>385 > 説明書に描いてあった内部概略図によると、出力側を+5Vでプルアップしてる。
?? CN4 のことだよね ?
100KΩでプルダウンされてるし、ディフォルトはオープンだから 0V がでるはずなんだけど。
(取説の P.25 の注記参照)
このメーカーがそこまでアフォ (=リセット時に +5V を出力する) とはとても思えないよ。
>>388 まあ、若い奴が知らんのは無理ないだろ。
いくら当時は 8255 が定番とは言え...。
(CPU が 68系でも使ってた。(6821 が 8bit × 2 ポートなのに対して、8255 は 8bit × 3ポートだったからな。))
電源投入時にDAコンバータのアナログ出力に、+5V 出ていて問題だったという話なの!
はぁ ? 内部の DAC の出力 (=リレーの前) を言ってるのか ? そんなところの電圧を云々することに何か意味があるのか ? メーカーは保証しないし、いきなり変わることも充分ありえるぞ。
いま分かりました。 PPI=プログラマブル・ペリフェラル・インタフェースですね。 8255は使ったことはあるけど、 そういう風に略して呼んだことがないので最初は分かりませんでした。
>>393 そういえば8255といわなければ意味が通じなかったかもスマソ
PPIじゃ同じ名前のがありそうだわ(笑
俺も8255なら嫌っていうほど使ったけど、PPIは「ポイント・トゥ・ポイント・インターフェース」 かとオモターよ。あの石でよかった。話が通じる。
8823謎の人
398 :
デフォルトの名無しさん :03/12/17 22:27
メモリマップというかセクションの使い方に関する質問です。 .text はコードで書き込まないから ROM、.bss は未初期化変数で RAM。 で、ここまではいいのですが、問題は .data です。 初期値を持つ変数のための .data は RAM にあるが、値自体は ROM にあり(.rodata)、 スタートアップルーチン等でコピーしてくる、というのが一般的だと思っています。 が、今作ってるものだと .data が ROM にあります。 このような使い方はよくありますか?また、このようにする理由は何が考えられますか? よろしくお願いします。
>>399 初期値を持つ 「変数」がROMにあったら 役に立たないではないか
定数の間違いではないのか?
>>399 .rodataと.dataは別だが。
んで、.dataがROMってのはLMAの事でないの?
>>399 スタートアップルーチンを作り間違えているか、
399 の勘違いでは?.text とかいっているんなら、
C言語で開発ですか?
const な変数を ROM エリアに置くのはメモリ
圧縮の定石です。(書き換える)変数は、RAM にないと
だめですね。
初期値を持つ変数なら、初期値はROMにおいておき、
スタートアップ処理でRAMエリアにコピー。
初期値がない変数なら、スタートアップで00H
フィルして、main()をコールはなかろうか?
const な変数を。。。。 --→ const な定数を。。。。 失礼しました。
リンカースクリプトを見てみろ。話はそれからだ。
>>400-404 お答えありがとうございます。
情報の後出しになってすいませんが、ITRON を使っているというのは関係ありますか?
>>400 グローバルで static int a=0; みたいに定義した変数 a に対して a=0 のように値を書き込むとリセットします。
初期値を書くと ROM 上行っちゃうかもしれないんでやめてねー、みたいなことも言われました。
>>401 間違えました。
.romdata が .data の初期化用、.rodata は const 宣言したもの用ですね。
ぐぐってみたんですが LMA というのはコピー元のアドレスがってことですよね?
上に書いたように初期値を与えた変数に書き込むとリセットしちゃうんで実体(VMAって言うんですか?)も
ROMにあるような気が。
>>402-403 C言語による開発です。
const だと確かに .rodata に行ってました。後は同上って感じです…。
>>404 リンカスクリプトを直接見たわけじゃないんですが、.text, .data, .rodata, .api というセクションが ROM に
行ってそうでした。これから出社するのでもちょっと調べてみます。
.dataがROMに配置されるなんて有り得ないと思うんですが。.dataの初期値はROMに配置され なければなりませんけれど。 それとも、一般的(だと私が勝手に思っている)用語が、お使いの開発環境ではまた違った定義で 扱われているのでしょうか?差し支えなかったら、参考までに開発環境を教えてください。
>>406 そういう指定にすればちゃんとROMに落ちます。
当然まともに動かなくなりますが。
謎な挙動を示すのでobjdumpで確認したら、おもいっきりROMの上…
ということが数回経験あり。
俺、初期値を持つ変数は「絶対に書かない」。イニシャルでRAMクリヤはたいていやるから、 代入する前はゼロだけは仮定してもよいというルールにしている。 ゼロ以外の初期値は必ずinit処理で値を代入する。
>>407 >
>>406 > そういう指定にすればちゃんとROMに落ちます。
> 当然まともに動かなくなりますが。
?「初期値」はROM領域に落とされて、RAM上に配置された.dataにスタートアップでコピー
するんですよね?どうしてまともに動かなくなるんですか?.dataそのものはRAM領域に
配置しているんですよね?
> 謎な挙動を示すのでobjdumpで確認したら、おもいっきりROMの上…
> ということが数回経験あり。
objdumpで確認したらって….dataのアドレスがROM領域になってるんですか?変ですね。
初期値がROM上に置かれるのは当然ですが。
ちょっと腑に落ちないのですが、問題が開発環境にあるのか、開発者にあるのかは別として、
こういう話が多くある以上、
>>408 の考え方は妥当なのかもしれないという感がしてきます。
本当に 変数 がROMへ行っちゃうなら コンパイラのバグだとおもうな
>>409 単にセクションの割り当て指示を間違えて、
.dataの実体がROMに割り当てられただけです。
こんなアホな事をやるのは漏れだけなのだろうか…
>>410 最終的にアドレスを決めるのはリンカのお仕事なので、
コンパイラは無実ですがな。
セクションを間違えてくれたら、コンパイラの問題だけど。
>>411 たしかにリンカのせいだ、わはは
いつもコンパイル一発でバイナリまでできあがっちゃう環境でしかいじってないからつい(笑
statcをtextにおいちゃうコンパイラっつーかリンカあったま
初期化するとROMに配置されるとか、 グローバル変数使うとスタートアップでこけるとか、 そんな特殊な環境のことを常々考えてコーディングする方がどうかしていると思う。
>>414 ROMで動かす機器を開発するときは、最初の時には考慮するよ。
いったん開発環境が固まればほとんど意識しなくて済むけどね。
セクションをどのようにメモリに配置するとかを検討する人は
スタートアップ処理を作る人がやってくれる(?)ので、あまり
意識はしないと思うが、エミュレータでソースを見ているときに
この foo とか言う変数の挙動がおかしいけど、どこに配置
されてんだっけ?とか聞かれたときに困らないかな?
古株の人はみんな意識してるとおもうけどな むかしはコンパイラーのバグをいかによけて使うかっていうのが わざだった時代があったわけだし いまでもマイナーな環境だとなかなかバグフィクスされずに しかたなくつかってるなんてのもあるんじゃない?
そういう知識が「経験」の一言で片付けられて 明文化されない職人の領域、それが制御系。 lヽ ノ l l l l ヽ ヽ )'ーーノ( | | | 、 / l| l ハヽ |ー‐''"l / 制 | | |/| ハ / / ,/ /|ノ /l / l l l| l 制 ヽ l ・ i´ | ヽ、| |r|| | //--‐'" `'メ、_lノ| / ・ / | 御 l トー-トヽ| |ノ ''"´` rー-/// | 御 | | ・ |/ | l ||、 ''""" j ""''/ | |ヽl ・ | | 系 | | l | ヽ, ― / | | l 系 | | !! | / | | | ` ー-‐ ' ´|| ,ノ| | | !! | ノー‐---、,| / │l、l |レ' ,ノノ ノハ、_ノヽ / / ノ⌒ヾ、 ヽ ノハ, |
ダメだ!! だったらこの秋月コンパイラ static変数をRAM領域に配置して 普通に使えるようにしてくれよ!
環境に合わせてコーディングに気を遣うのはいいとして、 それなら明文化して欲しいと思う恭子の頃。 例えば>408のような特殊仕様、書いておいてくれきゃお手上げ。
つーかそもそも組み込みの基本はハード屋が作った回路を元にアドレスマップを決めて それを元にデータの配置をリンカで指定するものだ。 極端な話、スタートアップ以外はプログラムコードも全てRAM上で動作させる事も出来る。(よくあるデバッガの手法の一つ) で、そんな物はCQの雑誌やら組み込み関係の入門本なら絶対書いてあるる。 流石に組み込みにとって仕様とも言える回路図や、ROM、RAMのアドレスマップが提供されていなければお手上げだがな。
>>418 Global に置いちゃダメなのか?
昔から組み込み用のクロスコンパイラは
M$のVCみたいにこなれてないのが多かった
アフォ!ヴォケ!とかコンパイラに文句をいいつつ
しかたなしにコンパイラのバグ回避をするコードを
かいていたなあ。
新しいCPUのファーストユーザーになる事があるこの世界では よくある話だな。 へたすると、CPU自体のバグに出くわす事もあるから。 これを解析するのはかなり鬱だ。
メーカはバグとはいわずに制限事項とかいっていろいろ資料を送りつけてくるな。 あと,エミュレータ動作と実機動作で速度や挙動がかわることがあって、データバス をロジアナで比較したらエミュレータのときよけいにウェイトがはいったことがあったり、 A/D, D/A の精度がダメポだったり。
毛色の変わったOS用のアプリの開発やると、 ansiライブラリにディレクトリ操作系関数がない理由がよく判るよね。 つーか、「ansi互換ライブラリ」を銘打つならせめて fopen()/fread()/fwrite()/fclose()くらいちゃんと動いて欲しいぞ。>某OS
抽象的に書くほど逃げうつのも楽だ罠
話題も変わってきて、ちょっといまさらな気もしますがリンカスクリプトです。 やっぱり .data が .text 等と同じ領域にくるような。 直接「何でこうなってるんですか?」って聞こうかとも思ったんですが、 問題が見つかったりしてそんな余裕もなく。明日も出社です。 -sec { .BM 0x0D9600000 : .BM_D01 align(8) : .bss 0x074A00000 : .sdabase align(8) : .text 0x049800000 : .api align(8) : .data align(8) : .rodata align(8) : }
>>426 もしかして,普通に .text のあとに .data がてきないか?
.data は .bss の後じゃないとまずくない?
メモリ下位アドレス
.text 0x049800000 :
.api align(8) :
.data align(8) :
.rodata align(8) :
.bss 0x074A00000 :
.sdabase align(8) :
.BM 0x0D9600000 :
.BM_D01 align(8) :
メモリ上位アドレス
>>426 .textのアドレスエリアがハード的に細工がされてるんじゃない?
例えば、電源起動時は.textはROMだけど
スタートアップルーチンで丸ごとRAMにコピーしてから
あるI/Oを叩くと.textがRAMに切り替わるとか。
>>426 会社からカキコでもなんでもイイから、メモリマップ教えれ。
.bss が 74A0000H からスタートしてんなら RAM は 74A0000H
以降にしかないんだろう?やっぱり,.data が .bss のまえにある
のが原因のようが気がするぞ。
>>429 「原因」って何の原因?
399=426は
「なんでこれで動いているの?」
って質問してるのかと思った
あうっ。これで動いていたのか。
おまけに誤爆.スマソ -> 430 もうだめぽ。
434 :
デフォルトの名無しさん :03/12/21 16:04
>>433 そうか?
職場内での完全オレルールだと非常に困る
初期化しない癖がつくのも困る
初期値を当てにするコードを書かれても困る
困る困る
帰ってきました。会社で見ちゃってましたがカキコできない小心者です。
>>427-433 お答え、どもです。でも今回リンカスクリプトとかメモリマップとかは、
こっちの部隊の管理下にありません。その上で、
>>399 .data が ROM にあります。これって普通?理由は?
回答 .data が ROM にあったら使えねぇだろ、ゴルァ! 初期化用の値なら別。確かめろ。
>>426 リンカスクリプト見てきますた。やっぱり .data が ROM にあるような。
という流れなので、ROM にあるじゃねーかって言われても、そうなんすよ〜って
ことになりますし、実際には RAM にあるんじゃねーの?というのも、
>>405 のように値を書き込んだら実際にリセットがかかるので違うかと。
# 今日もそれでリセットがかかってました
.data が ROM にある、という前提で、そのような設定はよくあることか?
そのようにする理由として何が考えられるか?を聞きたかったんです。
でも、これだけ突っ込みがあるということは、少なくとも .data が ROM に
あるのは一般的でない、つーかむしろ変ってことですね。
なので、後は ROM におく理由なんですが。
スタートアップでの初期化をけちってる、というのは
>>408 のように自前の
初期化が必要になるだけなので意味がなさそうですし、RAM 領域の節約って
いうのも .data に置く分が .bss(+自前初期化)になるだけなので違うだろうし。
あと別件ですが、アラインメントに関する質問ってこのスレでいいですか?
>>435 だから、どっかのポート叩くとシャドウROMが隠れてRAMにアクセスできるようになったりしない?
アライメント云々も制御系に関する限り問題ないと思う。
リンカオプションでR=Dにして、自動的にデータ本体のみをRに置くことが できるのもあるが。それを見落としてることないかい? リンカの吐くマップファイルを確認してみそ。
デバックしちゃえよ。 停止位置指定して、そこの変数値調べてみなよ。 レジスタの値は間違ってないか(セグメント切り替わってるか)とか。 駄目なとこのうち一箇所調べれば分かるんでない。
_| ̄|○そんなに有り得ないですか、そうですか。
>>437 実際に作ってるのは TRON 上で走るタスク内の1つのモジュールだけです。
同タスク内の他のモジュールから呼び出されるだけなので、タスク自体の
初期化処理は終了してると思われます。
なので、ROM->RAM コピーとか I/O ポート叩きによる切り替え等が存在するなら
既に行われているのではないかと。
他、実行時にも ROM にあると考えている理由です。
・メモリの使用量を計算している中で、"text,api,data,rodata"と"bss,sdabase"
が区別して計算されており、bss,sdabase 分がタスクで使ってよいと言われた
RAM 容量と一致する。というか、"text..." が ROM, "bss..." が DRAM って
書いてあるところを見つけた。
・同タスク内別モジュールで、.data に配置されるオブジェクトは
ttp://sies.tjsys.co.jp/support/ghs/faq/6.5.x/text/coding-const-to-rodata.html がされておらず、.data に配置されているだけで実際には const。
つまり const 以外に初期値を与えていない。
>>438 すいません。よく分からないのでもちっと説明してもらえませんか?
とりあえず map ファイルは
>>426 相応の結果と .debug*, .line, .comment という
デバッグ情報と思われるセクションしかありません。
制御系に関する限り、というかアラインメント一般の質問なんすが。 以下の認識であってますか? 1. 「N バイトアラインメント」と言った場合、N バイト以上のスカラ型が N バイト境界に配置されており、N バイト未満のスカラ型は自分のバイト サイズの境界に配置されている。 2. 構造体を配列で確保するときに、構造体の各要素のアラインメントを保つ ため構造体末尾にもパディングが入る。 3. 全体のサイズが変わらない限り、パディングはできるだけ後ろ側に入る。 (アラインメントとエンディアンが確定すればメモリ上の配置が決定する)
>>399 ふと思ったんだが、アセンブラコードがフルデコードされてないんじゃ。
例えばROM上に
□□□□の領域だけのプログラムがあったとして、
フルデコードされてないとプログラムのイメージ領域が直後に3つくらい作られて
□□□□
□□□□
□□□□
□□□□
とあとの3倍分の領域はイメージ領域でプログラムの計4倍の領域が必要。
RAMも全く同様。
最近この手の仕事から離れていた所為か、
>>444 の言いたい事がよくわからん。
ちと勉強した方がいいかな。
>444=>446ってすっごく説明下手だな。 言いたいことがよくわからんぞ。 #いや、>444で言ってることはわかるんだがそれが>399とどう絡むのかがわからん。
>>446 フルデコードしないっていうのは、デコーダ回路をケチる
ためじゃないんだっけ?アドレスの最上位ビット線でRAM/ROM
切替とか。
タイミング要件を満たすためというところよくわかんない。
うん。 デコーダ回路をケチる=各所のタイミングをそろえやすい。
ゴメン、うまい説明が見つかたよ。
http://www.necel.com/ja/faq/mi78k/__78extend.html 外部のデバイスをアドレスのデコード信号だけで制御する事はできません。
アドレス信号には切り替わりの時に全てのビットが時間遅れなく切り替わるのではなく、切り替わりにはある時間が必要で、その期間には正規のアドレス以外が出力される状態が存在します。
アドレスのデコードだけで制御を行うと異常な制御信号が出ることがあります。
これを避けるためには、必ず RDや WRのような制御信号を使う必要があります。
ここにもあるように、アドレス信号をコントロールに使うと特にセットアップ時間中のイメージが出てしまう。
>>448 が的得てるね。
ちゃんと説明できないってことは、キチンと理解してないね。
>>450 デコード:A0〜Axx --> CS(CEか?) に接続
制御信号:RD, WR
だな?
フルデコードしない使いかたでも、RDやWR
はちゃんとつながないとだめだね。
>>451 はい、言いたかったのは正にそのことデフ。(汗焦;
>>441 Nバイト境界に配置するのが「Nバイトアライメント」。
「Nバイトアライメント」設定の時Nバイト境界で配置されないとしたら、
それは100歩譲って処理系の仕様上の例外。
で、どこが制御系?
>>444 >450で日本語のミス。
的は得るもんじゃなくて、射るもんです。
恐らくはそうした細細とした注意が足りないから説明も下手なんだろうな。
最近の研究で、「的を得る」 でも いいらしいことがわかってきたそうだ。 弓を持ってうろうろしてる領主のために 的をどこかからゲットしてきた領民が 褒められて出世したとかなんとか って ことわざから来たのがあるんだってさ。
456 :
デフォルトの名無しさん :03/12/23 22:44
制御系初心者は どうやったら仕様理解できるんだ? 「教科書で覚えるレベルだ」とか言われても、 どの教科書を使えばいいかわからんし。 どかからどこまでが教科書レベルなのかもわからん。 どこから手をつけていいのかもわからん。
>>399 からの質問、お答えいただいた皆様ありがとうございました。
結論がはっきりせずもにょるところかもしれませんが、
とりあえず変数を宣言時に初期化しなければ動いてはいますし、
新しい情報もちょっと出せなさそうですので、この辺で切りたいかと思います。
ありがとうございました。
>>453 (´・ω・`)
PC 上で主流の x86 系ではアドレスエラーとかも発生せずあまり気にすることもないですし、
比較的ハードよりの話題だと思い、制御系の方に聞くほうがいいんじゃないかと思ったのです。
↓に移動することにします。
【初心者歓迎】C/C++室 Ver.3【環境依存OK】
http://pc2.2ch.net/test/read.cgi/tech/1069719929/
459 :
デフォルトの名無しさん :03/12/24 10:35
カバレッジはやってますか? どんなツールを使ってますか?
460 :
デフォルトの名無しさん :03/12/24 14:07
電気電子板
【悪】物性と情報工学が愚痴るスレ【代官】
http://science2.2ch.net/test/read.cgi/denki/1072103600/l50 10 :☆必見☆ :03/12/24 13:19 ID:yk+hQdcF
情報工学は
・ハードと直接やり取りするOSカーネル、デバイスドライバ、ブートローダのスレ。
・カスタムLSI、システムLSIの大規模集積回路のロジックのスレ。
物性は
・液晶、有機EL、プラズマディスプレイ等のスレ。
・半導体製造でのステッパで行われるnpn、pnp、npnp構造の構築のスレ。
(個人的には、エレクトロマイグレーション、イオンマイグレーション、ラッチアップ等の故障モードにも興味あり)
辺りを建ててくれヨウ!
電子部品は物性と切っても切れない仲だし、情報では、カーネル等に関するスレを見かけないしCPUなんかのロジックを深く語るスレもあまり見受けないし。
461 :
デフォルトの名無しさん :03/12/26 09:24
>>459 コードカバレッジが必要なほどのものを作ったことない。
>>227 遅レスだが、スタックポインタはサブルーチンの帰りに使うのだよ。
サブルーチンに飛ぶときは戻ってくるときの為に次のアドレスを保存しとかなきゃならない。
ところで、サブルーチンは先入後出し、すなはち、コップのようになってる。
一番最初に入れたのが一番最後に出る。
どうして、サブルーチンで使うか・・・。
それは、サブルーチンの中にサブルーチンを入れたときのことを考えればいいだろう。
Cならforの中にforのイメージ。
制御というよりは、組み込みでの質問です。
PCIバスのDIOを使っているのですが、どうも
アドレス空間とI/O空間に分かれているということ
までは判りました。
ttp://www.mnc.co.jp/Intime/intimepci.htm とか参照しました。
質問
例えば入出力が30点あるDIOのボードのうち
21点はアドレス空間で、9点はI/O空間になる
なんてことはありうるのですか?それだと
アクセスする関数が2ついることになってしまう?
浅学で申し訳ありませんが、宜しくお願いします。
465 :
デフォルトの名無しさん :03/12/28 01:10
CPUに接続されたデバイスや内蔵レジスタを読み書きするとき、 レジスタを構造体にするところまではやると思うけど、書くビットのアクセスは ビットフィールドで書く? マスクを使って読み書きする? どっちにしてますか?
GCCはI/Oに対するビットフィールドだめじゃなかったっけ?
>>464 それは挿したカードの設計しだいでいかようにもなるが
普通はそんなややこしいことはしない
>>465 特定のアドレス空間だけ直接bit操作できるチップ向けの言語拡張(sfrとか)があるなら
ビットフィールド。(sfr HOGE 0xFFFFFFF9; bit ENABLE HOGE.7; とかね)
無ければマスクが無難。ビットフィールドの定義に対してどんなmask操作吐くか
特にマイナーなチップのcでは信用しないほうがいい。PGの責任で明示的にmask操作が
コードしてあれば、機械語まで気にせずソースで追えるから。
>>469 その図で縦はバイト
0−15 16−31(64) は4バイトの中に
おさまってるのを見て分かるとおりビット
2種なのは単に規格がそうなっているからってことでは? 規格を確認してないからちがうかもだけど(笑
ところでDIOを設計仕しようとしているのかな? 使うだけならそのへんのことはドライバにお任せしとけば済むところだけど
皆さん早いレスありがとう。 皆さん早起きなんですね。(徹夜?) >470ですよね。 >471規格ですか。 >472 そうです。ドライバを作りたいのです。 PCIはPnPがあるので楽なのですが、 仕組みを理解するのが難しいのです。
>>473 PNPはドライバが面倒を見ているわけで
出来合いのものを使うだけの者にとっては
らくちんなんだけども
ドライバを作る側からすれば面倒くさい以外の
何者でもなかったりしますね
制御系の専用機の場合PNPである必要が無い場合が多いので
そのへん手抜きしたドライバもあるみたいです(やっぱりめんどうくさいらしい)
>>469 電気電子板から来たが、
分かってると思うが、そのアドレスマップはCPUがベースインデックスアドレス指定を表しるんじゃないの。
もしそうなら実際のアドレス計算しないとだめだよ。
>474,475さんどうもです。 アドレスを計算するときに、>464 のようなことは起きないと言えるのかなと 思うのです。 それに、もう一つなにか別のボード(PCI) を刺すとまたまたずれるとか。 普段、パソコンで何気なくやっていることを 実際手作業でやってみると(私にとって)かなり難しいです。
>それに、もう一つなにか別のボード(PCI) を刺すとまたまたずれるとか。 ハード屋の自分もハンドアセンブルしてると、アドレスにインデックスついてるとややこしいです。 インデックスアドレス指定はCPUの内部でのアドレス指定方式(アドレス方式ではないです)の一つですが(というよりCPUによって決まっていますが)、 このようなものです。 |オペコード|IX(インデックス)|基準アドレス(A)|データ等 | __| | | −−−−− |アドレス | レジスタ ↓A+B | ______ +→メインメモリ | | | ↑ | | | | | | | | | |_____| | −→|___B_|ーーー | | インデックスが指すアドレスと基準アドレスを足した値が実際アクセスされるアドレスです。 ちょうど、C言語のポインタ操作をCPUが毎回やっているように見えます。
しかも、IXが指すレジスタアドレスはセグメント(上位アドレス)が変わればもちろんのこと、フラグやステータスレジスタの値が違うと変わるものがあります。 レジスタマップを充分把握してないと、いろいろなところでハマリます。
>>465 マスクを使って書いた方が安心。
以前レジスタ書き換え中に割込が発生して、
割込処理ルーチンのなかで書き換え中の
レジスタアクセスが発生したときバグった。
高速な応答が必要なところだとセマフォとか
つかって処理できないところがあるので、
マスクを使ってやることが多い。
割込マスク
↓
レジスタリード
↓
ホゲホゲな処理
↓
レジスタライト
↓
割込許可
>>480 ん?。そのつもりですYO。
書き方が悪くてスマソ。
>>481 読む→新しい値にする→書く
の途中で割り込まれて変になったから云々ということか?
それはコンパイラがどういうコードを吐くかによるのでは。
>>481 >>479 の最初の「マスク使って書いたほうが安心」は
どう読んでも「割り込み禁止して書いたほうが安心」
の意味にしかとれないよ
484 :
デフォルトの名無しさん :03/12/28 21:22
もしよければヒントをください。 LEDダイナミック点灯において、スキャン周波数が低ければ 当然ユーザーには「チラチラして見える」わけなんですが これを2KHzくらいにした場合でも なぜか一定頻度(人口比1%)で同様の反応を示す人がいるように思う。 こういう視覚的感覚の個人差には 人種や年齢といった要素が関係してるんでしょうか?
>>482 わかりにくい書き方でゴメン。volatile の事を言いたいのでは
ないかと思いますが、コンパイラの吐き出すコードはエミュレータ
でチェックした結果わかった現象です。
不具合が起きたときは、メイン処理でレジスタアクセスしている
最中に、割込処理でそのレジスタを書き換えてくれて、さらに
メイン処理で新しい値を上書きしてしまうという現象でした。
ここでvolatileの話が出てくるの なんでだろ〜
にっよって違うな
>>484 同一人物の同一時でも、注視したときと視線が動いているときでは
ちらつきの感じ方は変わるし、移動体のLEDパネルだとまた感じ方が変わる。
まぁ、一般的傾向としては若年者ほどちらつきを感じやすいんでないかな。
この場合は、割り込みを禁止しておけば、 ビットフィールド使っても、マスクを使っても、 結果は同じように思うけど、違うのか?
SHマイコンの場合、 純正コンパイラはビットフィールド使用可能ですが gccがダメだったと思います うろ覚えなのですが 割り込みの問題というより アクセスサイズの問題だったような・・・
ビットフィールドを使うのは、日立が広めたんじゃなかったっけ?
ロックフリープロトコルで排他しろ。
>>489 個人的感覚では若年層のほうがちらつきを感じにくいのではないかと思ってる
子供の頃は蛍光灯のちらつきをあまり感じたことが無かったのに
年を食ってきてから感じる頻度が多くなってきたから
って、子供の頃は白熱電球全盛だったか・・・・(爆
生理学的根拠からは若いほうがちらつきを感じやすいはず。 歳とともに神経細胞が減るから短時間の現象に対して感度が鈍くなる。 子供がちらつきをあまり感じないのは注意力のせいだとおもう。
割り込みmaskはお約束の話ね。 bitフィールドではこんな例があります。 bit WDATA=0xFFB7.6; sfrp word=0xFF7E; sfr wreg=0xFF7F; WDATA = word.15; \ 003A 7E7F7770 BLD.B #7,@127:8 \ 003E 7FB76760 BST.B #6,@183:8 H8はビッグエンディアンのはずだが、nのMSBbitを取りだそうと思いこの コードを書くとFF7E番地ではなくFF7F番地のbit7が取り出された。
もうひとつ、 bit RDATA=0xFFB7.7; short hoge(short n) { register ushort epbuf; 57 epbuf = epbuf<<1 | RDATA; \ 0058 7EB77770 BLD.B #7,@183:8 \ 005C 1EEE SUBX.B R6L,R6L \ 005E 178E NEG.B R6L \ 0060 1866 SUB.B R6H,R6H \ 0062 0D45 MOV.W R4,R5 \ 0064 0955 ADD.W R5,R5 \ 0066 14DE OR.B R5L,R6L \ 0068 1456 OR.B R5H,R6H \ 006A 0D64 MOV.W R6,R4 // BLD #7,@B7:8, ROTXL R6L, ROTXL R6H という命令が出ることを // 期待したら、とんでもない命令が出た。これではif文のほうがよっぽどまし。 こういうことに出会うから、bitフィールドを信用しないで自分でbitマスクをコードします。
>492 日立某事業部じゃビットフィールド使用禁止だったが…
>>491 SH7144+GCCでビットフィールド使ってるよ
>>484 2KHzでチラツキが見えるというのは、2KHzでないからでしょう。
他の割込みのせいで、低い周期の明暗差が起きているのでは?
LEDダイナミック点灯の視覚的反応の件: みなさんレスをありがとうございました。参考になりましたです。 視神経?の反応速度の年齢差、制御系もこうした生理的な要素が問われるんですね。 501氏の指摘も感謝です。 LED制御は最優先タイマ割り込みで周期を乱さぬようにします。 ありがとうございました。
>>503 これだけど、LEDの見方にも関係するよ。
1kHzくらいでも、じーっと凝視すればちらつきは感じないと思うが、
視点がぶれていると誰でも簡単にちらつきを感じます。
2m先の3mmのLEDは1kHzで点滅しても30cm/0.1秒の視線移動があれば
縞々になって点滅が把握されてしまいます。このへんじゃないかな。
敏感な人は視線が微妙に動揺しているとか。
この方法でLEDを見るとおもしろい。
たまにスタティック点灯に出会って「お!」って感じ。(数kHzのダイナミックかもしれないが)
>>503 前にも書いたが、移動体のLEDパネルの見え方は面白いから体験しておくといいよ。
例えば首都圏なら京王線の車両側面のLEDパネルは目の前を通過するときに見ると、
斜体で書かれているように見える。
#進行方向が←のときに縦棒(|)が斜線(/)のごとく傾く。
参考情報
ベンハムトップ錯視
http://www2.tokai.or.jp/seed/seed/minna7.htm ↑のページでは書かれていませんが、回転する白黒に塗り分けられた円盤に
多くの人が黄色系の色を「見てしまう」原因は、ヒトの網膜細胞の応答性が
赤担当と緑担当が速く、青担当が遅いからだと考えられています。
結果的に断続する白色に、赤・緑系統の波長を「見て」しまうわけです。
これは、スタティック点灯時に同じ輝度である赤と青のLEDも
ダイナミック点灯であれば青の輝度が低く感じられてしまう
そんな可能性を示していると考えられます。
制御ソフト設計(むしろ回路設計的か?)のご参考に・・・。
そういう、staticでない点灯というのは、省電力のため?
同じ明るさにすれば消費電力的にはダイナミック点灯のほうが損だねスイッチング素子でロスるから
なるほどね。俺は「生きてるよ」表示に1Hz程度で点滅させるのしかやったことないから。
>>510 どうしてdynamic点灯でポートが減らせるの? それにしてもみんな早起きだね。
>>512 キーボードマトリックスと同じ原理だと思ってくれい
>>511 いやまちがいだったかも、抵抗で電流制限しなくてもデューティーで明るさ調整できるから
電流制限抵抗を小さくできそうだから省エネにもなるような気がする
あ♪7segなんかのことね。俺1bitのLEDのこと思い浮かべて、なんでポート節約?と(´∀`)
>>515 7segじゃなくても単眼のLEDがいいかげんな数あれば使うにょ
>>514 うん。それは 気 だけだね。
抵抗値を下げてスイッチングしたって、無効電力は同じ。
抵抗でなく、Lならスイッチングで効率は上がるけど、
常時点灯よりは点滅する分だけ減る罠
常時点灯する場合、LEDは大抵10-20mA流す。 ダイナミック点灯では通常、50-100mA流す。 100mAを連続でLEDに通電したら切れるか、暗くなってしまう。 回復不能な障害ってやつさ
省線や省端子が希望なら、 単体でも7segでもTB62705だな。 シリアルで定電流のスタテック点灯。 抵抗1本+IC1個はホントに楽チン ダイナミック点灯用のLEDの値段差あるから、それほどコストアップにならないしね。
>>517 順電流上げるとLEDのA−K間の電圧も上がるので
10倍の電流流すためには抵抗値は10分の1以下になって
消費電力減ってうま〜とおもっていたら、アァ勘違い
回路全体で見れば電圧不変だから10倍流せば消費10倍だった
すまそ
結局駆動回路が消費する分が上乗せされて
省エネにはならないいうことでおあとがよろしいようで
>>512 8個程度でポート数減らしたければシリアルinなシフトレジスタでスタティック点灯の方が
いいのかな。
>>520 さんのいう奴、便利そうですね。知りませんでした。
http://www.pureslink.co.jp/4bit/tmp472.htm 7segの点灯方法にへぇ〜
>>514 抵抗両端の電圧は電源電圧-Vfでほぼ一定。
電流制限抵抗を小さくする=電流増加=抵抗での電力消費は電流に比例して増える。
平均電流を同じにするなら、duty比低減と相殺して同じになるんじゃない?
あとは、視覚的効果。同じ平均電流でstaticとdynamicどちらが明るいか。
平均電流同じならdynamicの方が明るく感じる気がするんだけどどう?
>>517 1kHz以下のスイッチングでもLEDの消費電力に影響するほどの無効電力あるんですか?
白色LEDって蛍光灯と同じで、青色LEDから蛍光材で発光させてるんでしょ? だから白色LEDなら蛍光材の蓄光効果が期待出来るから数KHzならチラつかないんじゃない?
>522 >>平均電流同じならdynamicの方が明るく感じる気がするんだけどどう? それは、 1、ダイナミック点灯用のLEDの方が同じ電流で明るいから だからそのLEDを壊れない範囲でスタテック点灯させた方が明るい 2、LEDは、負抵抗ってのを忘れて計算ミスしてるんじゃないの? Vfは電流に影響される =ある程度の電流を越えると負抵抗だよ。 LEDは負抵抗だから並列接続すると、アンバランスになって より電流の流れた方に沢山電流が流れる。 だから電流制限抵抗を1個づつつける必要がある。
>>522 むふふ
>>抵抗両端の電圧は電源電圧-Vfでほぼ一定。
教科書的にはそうなんだけど
実際にはVfって結構動くでしょ?
>>525 え、負抵抗だったの?
通常使用範囲の電流域で?
げげしらなかった
>>522 >>1 kHz以下のスイッチングでもLEDの消費電力に影響するほどの無効電力あるんですか?
ここで言ってる向こう電力とは回路の抵抗分で消費される電力のことを指してるのであって
交流電力でいうところの無効電力のことではないとおもわれるので念のため
>>527 自分で測定してみたら?
温度一定のグラフとは違うグラフが描けるはずだよ。
つまり、電流を流す -> 温度が上がる -> 順方向電圧が下がる->電流がより流れる というループを描くわけ
>>520 それいいねえ知らなかったよお
さんくす
安く入るなら使いたいなあ
>>529 はいな、温度特性のほうね
それだったら今回の場合は同じ明るさで点灯させるわけだから
温度条件はほぼ同じと考えていいのではないだろうか?
>>531 スイッチング周波数が十分に高ければという条件でだね。
>>531 スタック点灯の時は
素子温度 = IF*VF*熱抵抗 + 周囲温度 熱抵抗は 200〜400 ℃/W
10mAだと、実際にはこの温度差は数度程度だ。
基板全体の周囲温度がゆっくり(数10分) 上がる効果の方が大きいかもしれない。
ダイナミック点灯の時もこの素子温度の平均値は同じだし、周囲温度の上昇度合いも同じだ。
しかし、瞬時の発生電力は分割数倍されている
たとえば10倍だとすれば、
1の期間10倍の発熱し9の期間冷却される事になる。
この係数がいくらかが判らない。
電流を測定すればわかるのだろうけど、パルス駆動していると測定は難しいからね。
534 :
17C44 :03/12/30 10:49
PICのPICStart Plusのファームのバージョンアップについておしえてくれる? 今回PIC16F877Aがかけないんで、バージョンアップしようとおもうんだけど、 Microchipの説明している方法だと、「17c44/JWをかってこい」ってなってるけど だれかの、プログラマーをかりてきて、中の石をバージョンアップをすることは かのうなの? つまり内部の石はFlashタイプなの?それともワンタイム? 多分ワンタイムだろうなーー。いやそんなはずはない。 いやワンタイムだろうーな。 ラベルは引っ剥がしてみた人ある? 「17c44/JW」 3800円もするけど、これがベスト?
>>526 いやだから「ほぼ」って書いたつもりなんだけど。
1mA〜100mAまで0.1〜0.2Vくらいでしょ?
>>525 ちょっとわからないんですけど、並列ってどの部分ですか?
PeggyでPIC を使う為のTIPS ・特殊タグパターン Error\[\S*\]\s*(\S+)\s*(\S+?)\s: ・バッチファイルを作る。 パス\MpAsmWin.exe /q %1.ASM TYPE %1.ERR ・バッチファイルをプロジェクトに入れ 引数には /C "$p" $m これでPeggy上でアセンブルしてタグジャンプ可能に
540 :
17C44 :03/12/30 18:53
昔、TIのSN7447と東芝TLR316(だったかな)を使って4桁の表示をするのに、7447が500円位も した時代があった。ダイナミック点灯すると、各桁のLEDを表示するには7447が1個+トランジスタ 4個(10円くらい)で済むのでコストが低減できた。70年代のオールドデイズな話しでスマソ。
プログラム作る側からいうとI/Oがふんだんにあるチップつかって全部スタティックでやってほしいというのが正直なところである(笑)
>>542 7セグ16桁とかあったら,8*16=128本もI/Oピン
必要だな。電グラ込みで 160pin の QFP パッケージを
選択でドライブ能力を16mA のI/O バッファ選択。全I/Oを
同時スイッチしたら、グランドバウンドでチップの内部ロジック
あぼ〜ん。
ファームウェア的には楽になるんだけどな〜。(笑|笑)
>>542 更新頻度が低ければ定期的にシフトレジスタに送れば3線でいいしな。抵抗はいっぱいいるが
>>545 お笑いのつもりだったが。。。
マジレスしとくと、電源ピンを VDD と GND のペアを16組み(16個所X2本=32)に置いたら、
制御線やバスがとれなくなってしまう。8ビットのデータバス、アドレス5本+-CS,-RD,-WR+
チップのテストピンを4本位わりあてると、電源ピンは12本だね。I/O ピンがばたばた動いた
ときにちょっと苦しくない?
547 :
デフォルトの名無しさん :04/01/02 22:53
548 :
デフォルトの名無しさん :04/01/03 01:34
以前、日立のHPにあった日立製CPU用のペリフェラルや内蔵レジスタを定義したヘッダファイルが、 ルネサスになってから見当たらないんだけど、 どこにあるか知ってる人いたら教えて。
551 :
デフォルトの名無しさん :04/01/09 18:04
画像ボードからの画像情報をsimulinkブロックとして組み込みたいのですがどうも・・・ ボードの関数はCなのでs-functionを使ってDLLファイルまでは作成できたのですが、 実際(外部モードで)ブロックを動かそうと思うとうまくできません。RTWの設定?なの か・・・ こんな感じのデバイスドライバ,s-functionやA/D変換等にくわしい方はいますでしょうか?? よろしくデス!!
エロイか?
555 :
デフォルトの名無しさん :04/01/14 16:13
何かこのスレすたれてないか? 電気・電子板が出来た影響か?
女のコントロールは下手くそだね。( ´,_ゝ`)プッ
557 :
デフォルトの名無しさん :04/01/14 22:56
8ビットマイコンで、32ビット÷16ビットをC言語で できるだけ高速でやりたいのですが、良い方法ないですかね。
>>557 そのへん得意な奴に晩飯おごって作ってもらう(笑え
>>561 うーむ、これは固定の小さな数で除する場合にしかつかえないような。
任意の16bit数で割るというならCPUに乗算命令がないとかえって遅くなりそうだ・・・
CPUに除算命令が無いんだよね? CPUに掛算があるならニュートン法 無いなら素直にシフトで計算するのが一番速いでしょう。
序数被序数とも、DAC通してlog回路通した結果をADC通して取得、差分をとったら 同様にDAC⇒exp回路⇒DAC。 回路の精度がよければ充分高速で実用的。
>>566 乗算あるなら逆数をかければいいじゃないか!(`・ω・´)
>>568 16bitの逆数はどうやって求めますか?
ニュートン法って何ですか!?
ネタなんだろうけどさ、
もう諦めて
>>561 のリンクの Udiv をパクりなさいな。
>>572 理解できんかった_| ̄|○
けど、普通に引戻し法か引放し法を使った方が速そうな予感
電子ボリュームの制御について、聞きたいです。 A/D変換した値(最小0〜最大3ff)を5msおきに読み出す関数があるんだけど、 ボリュームのつまみを急激に変化させたとき、例えば瞬時に0->3ff->0みたいに 変化させたとき、ボリューム値として読み込まず、安定した最後の0だけを読み 取る場合どういう処理が必要になりますか?
>>570 ニュートン法で逆数求めようとしたら結構難しいね。
初期値をうまくとらないと計算誤差で発散したり時間が掛かって
筆算法でもいいじゃん・・になっちゃうし
実際に使うときはどのように初期値を決めてるんですか?
>>575 前回との差をとって規定の値以上の差なら無視して前回値を採用とか
d=Volume-PreVolume;
if (d>max_d) Volume=PreVolume
PreVolume=Volume;
>>575 おいらは過去数回分ののデータと平均をとるようにした。
FIRフィルタ
>>575 ローパスフィルタとかメジアンフィルタでどうよ
これはもうシステムの性格によって適切な処理法が異なってくると思う。 常にノイズが重なってる場合は過去n回分の平均値、 フィルタリングならソフト的なローパスフィルタ、 パルス状に入ってくるノイズなら一定以上の変化量を無視、 あるいはハード的にAD入力端子に抵抗器とコンデンサを付加、 その他にも様々な対処法がある思います。 「色々やってみるしかない」のも制御系の面白さかと・・・。
575さんや581さんの言っておられる、n回分のデータの平均値をとるように するというと、バッファにデータをためておく必要があると思うのですが、 例えば、n=4とすると、4回読みこんでその平均を出力値とするということで しょうか? これって4回読み込んで平均値をだすまでは音はださないことになるんでしょうか?
>>583 まさにそれを心配してましたが、よくわかりました。どうもありがとう。
うちはちょっと特殊用途の製品で、ベッセル関数で平滑化してます。 レスポンスを指定できるので便利です。
586 :
デフォルトの名無しさん :04/01/18 20:35
>>585 > うちはちょっと特殊用途の製品で、ベッセル関数で平滑化してます。
> レスポンスを指定できるので便利です。
えっ、なんでベッセル関数で平滑できるの?
TIのTL16C752BPTつかってシリアル通信のドライバ(C言語)作んなきゃ いけないんだけど、ぶっちゃけ何から書き始めていいのか全く わかりません。この辺に詳しいサイトなり書籍なりってなにかありませんか?
>>587 まず、587の書き込みからOSなどの環境を分かってくれる、エスパー募集の
広告を書きはじめる。
>>587 まず仕様書とか企画書とかを書き始めるべし
>>587 UARTならどれでも考え方は一緒。その石を使ったハードで、CPUにとって何番地に
I/O_regがマップされてるかが判る文書はある?最低限、送信データreg、受信データreg、
ステータスreg(送/受 別かもしれないが)=受信の有無、送信データregが空いているか、
受信バイトのエラーステータス(parity,stopbit_err,overrun)等を知るバイトまたはワード、は必要。
その石の概要を見ると、送受それぞれに64byteのFIFOを持っているらしいので、BPSレートが
間に合うならソフトでリングバッファを持たないでも済むかもしれない。ステータスregには、
送受それぞれのFIFO上の滞留バイト数もきっとあるだろう。
単純化したソフトはこんなもの:#defineでRDR=受信FIFOの先頭、TDR=送信FIFOの末尾番地 をdefine、FIFOの滞留数regもdefineして、<--*(char*)0xFFFF02とかね。 メインループ中で、if( 受信FIFOの滞留数>0) RDRにある1文字を取りだし、受信フレーム再構成 (ヘッダとトレーラ文字は決まってる?STXとETXとか$〜CR,LFとか?) 送信したいときは、if( 送信FIFOの空き(=64-滞留数かも)が、今送信しようとしている文字数以上) なら、送信FIFOの末尾に(送信したいバイト数)回、書き込む。FIFOサイズより長い文字列を送信 したいなら、「リングバッファ」をドライバが抱え込んで持ち、そのリングバッファの滞留数、 リードポインタ、ライトポインタを管理する。一定時間毎に送信FIFOの空きを見て、リングバッファ から取り出してFIFOへ書き込む。 ドライバと言うからには、I/Oマップのdefineなどハード依存の部分はこちらのモジュール内で 持ちアプリには意識させないようにして、送信/受信の機能だけを使ってもらうようなコール シーケンスを決めて、リンクで結合するようなことを考えればいいのかと。
もっと細かく教えて欲しければメルで。雛形になるような書き方ぐらいあげるよ。
cpuからみてCHAがB8000007〜B8000000に、CHBがB8000087〜B8000080にマッピングされています。メル記載しておくのでよろしくお願いします。
エッジがきちんととれて、ヒゲも除去できる そんな都合のいいフィルタ
初めてPICというものを触っているのですが、HP上のサンプルプログラムが
理解できなくて困っています。
ヒントだけでもいいので教えていただけませんでしょうか?
使いたいのは16C711というPICで、AD変換したいです。
http://www.picfun.com/moduleframe.html ここを参考にしています。
---------抜粋--------
(1) 初期化でADCON1を設定
・RA0、1の2チャンネル
・Vrefは外部入力は使用せず
;***********************************
; Initialize
; PORT A RA0,1:Analog input
;***********************************
INITA
BSF STATUS,RP0 ;Set Page 1
MOVLW 02H ;Set to RA0,1 are analog in
MOVWF ADCON1 ;Set A/D
MOVLW 017H ;Set PortA to receive mode
MOVWF TRISA
BCF STATUS,RP0 ;Set Page 0
MOVLW 010H ;Set A/D Fosc/32 CH0 A/D off
MOVWF ADCON0 ;set
--------抜粋終わり---------
・・・
これの、 MOVLW 017H MOVWF TRISA ってのは、なにやっているんでしょうか? 017Hを2進だと、0001 0111 ですよね? ポートAの0-2および4Pinを入力に、3および5-7Pinを出力に設定したということですか ?(ポート0、1が入力になるならば何でもいいんでしょうか?例えば、ポート0.1のみが 入力ピンで、それ以外の2-ピンが出力ピンでかまわないならば 0000 0011 ->03hで あってもよいですか?)
あと、 MOVLW 010H MOVWF ADCON0 これがまったく判らないです。 0001 0000 を、ADCON0(で定義したレジスタアドレス)の内容として、入れていますが これだとADCON0レジスタの設定は 6.7bit ->00->Fosc/2 01->Fosc/8 10->Fosc/32 11->Frc 5bit ->定義なし 3.4bit ->00->RA0 01->RA1 10->RA2 11->RA3 2bit ->AD変換完了後と同値(1でかつADONも1だと変換開始) 1bit -> AD変換割り込みステータス 1で完了 0bit -> AD変換開始ステータス。1で開始 だから、 Fosc/2で、定義なしで、RA0で、AD変換終了時と同じで、割り込みステータス0で、 変換開始しない ってなる気がするのですがどうなんでしょうか? >MOVLW 010H ;Set A/D Fosc/32 CH0 A/D off とのコメントにしたいならば、 1000 0000 ->80h とするのが正しい気がするのですが
Fosc/2で、定義なしで、RA0で、AD変換終了時と同じで、割り込みステータス0で、 変換開始しない あ、 Fosc/2で、定義なしで、” RA2 ”で、AD変換終了時と同じで、割り込みステータス0で、 変換開始しない の間違いです。
>>597 初心者来るなウザい。
長文ウザい。
屑は死ね。二度と来るな。
>>597 このチップは使ったことないけど、そのサイトを読む限りは
>MOVLW 010H ;Set A/D Fosc/32 CH0 A/D off
ここは、080Hが正しいような気がするね。
ただし、その直後のAD開始で081H、089Hをセットしているので、
このままでも、動作上の実害はないと思うよ。
TRISAは、内蔵ポート表を見ないと判らないけど
たぶん
>>598 の考えでいいと思う。
>>595 追記です。各レジスタの情報はデータシートの24ページからのものです。
>MOVLW 017H
>MOVWF TRISA
最初の方に、TRISA EQU 85
てないかな。出力ポートはPORTAとするとPORTAのIO出入り口はこうなってる。
|
___|\___
| |/ |
| |
| /|_|
 ̄ ̄\|
|
となっている。ここで、脇から入っている|はこのバッファを導通にするか断線にするかを決めるステート入力。
従って、トライステートバッファと呼ぶ。
TRISAレジスタはページ(後)の85。ここに0/1を立てることにより、PORTAを1bitごとに通、断を決めれる。
出入力方向に関しては、TRIS PORT 0(出力)/1(入力) 命令で行う(入出力方向はbitごとでなくレジスタで一括)。
ページ切り替えはそれぞれのページ(前にも後にも)03、83にそれぞれSTATUSレジスタ(共通)があるから、ここの5bit目を0にすれば、前ページのレジスタに、1にすれば後ページのレジスタにアクセスできる。
だから、結局この場合は、017HをTRISレジスタに入れて、IOに対して導通にするPORTAのbitを決めている。
2bit ->GO/DONEでAD変換起動と変換中、プログラムによるセットでAD変換開始1/AD変換完了するとリセット0
じゃなかったけ。
Set A/D Fosc/32 CH0 A/D off
はミスプリかぁ。それとも、レジスタ内exchangeのエンディアンがあるのかぁ。
試してミントわからんな。
>>601 どうせ、人すくねェだろタコ。
双方向TriStateバッファ | ___|\___ | |/ | | | | /|_|  ̄ ̄\| |
双方向TriStateバッファ | ___|\___ | |/ | | | | /|_|  ̄ ̄\| |
教えて君で申し訳ないのですが、シリアル通信をしていて、 comポートの「CTS」のon/offって、 どうやって見ればいいのでしょうか? よろしくお願いします。
そういう意味なのか?
>>608 機械がなんなのか、どういう接続なのか晒さないと答えようがないと思うが。
>>612 多分フロー制御が上手くいかないとかそういう事じゃないの?
通信する相手にもよるが、フロー線使ってないシステムもあるからな。
ラインモニタ使えば制御線関連のデバッグ簡単になると思うがな。
ラインモニター買うより 廉いデジタルオシロ買った方がズッと利用価値があると思うぞ ラインモニターが必要ならWindowsパソコンをレシーバにして横から覗けばいいじゃない。
>>616 そういう機械にだまされて大はまりくらいました
>>614 > ラインモニター買うより 廉いデジタルオシロ買った方がズッと利用価値があると思うぞ
時と場合によるだろ。
制御線見るだけならオシロでもいいけど、そのうちデータの中身まで見たいとか言い出しかねないし。
>>618 データの中身みたい場合でもデジタルオシロは便利だと思うよ。
通信ログを取りたいなら、パソコンで横から覗けばいいじゃない。
ここのレスしてる人は何屋さん? オシロでシリアル通信を見るって本気で言ってるの? プロトコルアナライザ(ラインモニタ)が無いと デバッグ出来ないと思うけど。 ポートが動いてるかどうかの確認ならオシロでいいけど。
>>619 > 通信ログを取りたいなら、パソコンで横から覗けばいいじゃない。
そんなことできる奴が
>>608 みたいな質問するかどうかをよく考えてから書いたほうがいいぞ。
チョットした工夫で見えるよ たとえば、C-R-でなまらせた信号をトリガーにするんだ。そうすると0の多いパターンでトリガー出来るとか 2CHの場合信号線を抵抗で合成すると 一度に動作を確認出来る 10K+22K みたいに倍倍で合成すればいい
>>621 そんな事も出来ないから、オシロで見て信号の働きをしっかり理解した方がいいと思うわけだ おじさんは
>>608 の聞いてるのは、もしかしてWindowsプログラムで
CTSのステータスを見たいと言うことだろうか?
それなら GetCommModemStatus() APIを使えばいい。
626 :
デフォルトの名無しさん :04/01/24 13:18
つまり両方使えばいいってことですなっ
ここの人は個人でオシロを持つことが半ば常識化してるんですか?
628 :
デフォルトの名無しさん :04/01/24 14:07
常識じゃないだろが、個人で欲しいと思ってる奴は多いだろう
629 :
デフォルトの名無しさん :04/01/24 14:27
windowsならシリアル通信をフックして ログ取ってくれるフリーソフトが有ったね シリアルの開発なら通常はラインモニタは用意すべき モニタ自体はPCで出来るやつとか有って昔より便利 オシロよりは使い勝手がいい 汎用ADボードで自作するのがいい場合もあるだろう
昨日秋葉の QA-Pass の近所の中古屋さんでテクトロの 2465B が 12万だった。 昔よく使ってたから、なんかちょっとクラっときてしまった。 まあ、いまさらアナログオシロ買ってもしょうがないよなと自分を言い聞かせながら、家路を急いだよ。
装置同士の通信を覗きたいだけなら、単なるターミナルソフトで十分だろ。 作ったって簡単だしな。
>>631 > 装置同士の通信
と言うことになると、送受信の時間関係も見たくなるので、単なるターミナルソフト×2では役不足
じゃなくて、荷が重い。
> 作ったって簡単だしな。
と豪語する奴に限って作れなかったりするんだな。
ハード的にちゃんと動いてない時に通信モニタが機能するのかいな・・・・
>>633 このスレってハード屋さんが多いんですか?
それならこの流れは分からなくもない。
ハードウェアが判らない人は使い物にならないと思うが。
636 :
デフォルトの名無しさん :04/01/24 22:30
>>636 > 力不足、な。
「荷が重い」と書いてあるのにその突っ込み...、よっぽど書きたかったんだな。
制御系って、純粋ソフト屋や純粋ハード屋に比べて 情報が少ないと思いませんか? ノウハウとか、どうやって身につけるのでしょう。 独学でやるしかないのかなぁ。
>>638 対象が限定されるから、ノウハウなんてあってないようなものだと思うよ。
漏れも経験は浅いんでなんともいえないけど、色々参考書とか読み漁っ
て最終的には試行錯誤が基本かと。
640 :
デフォルトの名無しさん :04/01/24 23:12
ソフト屋も専門・得意分野が有れば強いわけで そのひとつが制御系と考えれば 会計や医療やバイオやその他あれこれの ひとつかもしれません 職場によっては、ソフトもハードも出来る人を求めていますが それは大概ソフトも出来るハード屋さん
>>640 >それは大概ソフトも出来るハード屋さん
なんか分かる気がします。
642 :
デフォルトの名無しさん :04/01/24 23:31
ぶっちゃけ、ハード屋とソフト屋の間が殺伐としてると、とても 仕事がやりにくいっす。 そんなおいらは君らが作ったハードとソフトを製造ラインに乗せ る製造技術者。 「事件は研究室で起こってるんじゃない、現場で起こってるんだ」
>>642 > 製造技術者。
ほとんどソフト屋さんとは縁がないと思いますが ?
まあ、ハード屋さんとソフト屋さんの関係が殺伐としていてそのとばっちりが来てるのかも知れないけど。
>638 昔は、自分で試行錯誤か、何処かに丁稚奉公状態で教えてもらうしか無かったけど、 最近は、FAのMLとかそれ系の掲示板とか有るので困ったら聞ける状態が全国規模である。 2ch用語連発すると、大反発確実だけどね。
645 :
デフォルトの名無しさん :04/01/24 23:56
>>643 馬鹿いっとれ。
製造ラインだけで使うファンクションってのがあるんだよ。
だからソフ屋ト&ハード屋との打ち合わせは欠かせない
んだよ。
他にもあるぞ。幾ら想定通りの動作を研究室でしてても、
製造ラインではまるで違った挙動を起こすって事は何度
も経験してるんだ。
まぁ誰が悪いって訳じゃないけどな。
646 :
デフォルトの名無しさん :04/01/25 00:03
所詮人間だから、トラブルがあれば 信用の薄いものを疑う 従って自信家なソフト、ハード屋は お互いに――
>>645 > 製造ラインだけで使うファンクションってのがあるんだよ。
量産用のテストプログラムみたいなのを言ってるのか ?
今時、製品毎に毎回そんなことでもめてるようだとちょっと DQN 会社じゃねーか思うのは俺だけかなぁ...。
> まぁ誰が悪いって訳じゃないけどな。
??? 誰かが悪いんだと思うけど ?
(設計者じゃなくて、資材部門だったりすることもあるけど。)
そのたびに原因究明しないのか ?
648 :
デフォルトの名無しさん :04/01/25 00:16
>>646 まぁ分かるんだが、第三者から言わせれば
「どっちも信用してない」
ってところだね。だからこそソフト屋とハード屋は腹を割って
話し合って貰わないと困るのよ。
事がスムーズに運ぶなら俺たちはその為の調整役も厭わ
ないしね。まぁ、調整役がいなくてもスムーズに事が運ぶ
のが理想なんだが。
ソフト屋とハード屋が強力タッグを組めば向かうところ敵なし
たと思うよマジで。正直組み込み系って、お互いを知らないと
やっとれんじゃん。
649 :
デフォルトの名無しさん :04/01/25 00:24
>>647 すまん、
>>643 のレスにカチンと来たので事例を出しただけっす。
製造技術者がいつもソフト屋と無関係だとはいえないって事ね。
「誰が悪いって訳じゃないけど」、ってのは言葉のあやっす。当然
実際には原因究明するけど、この場では、ハード屋とソフト屋に
対して中立な話をしたかったので、何れかが悪者になる表現を
したくなかったって事ですわ。誤解を招く表現ですまん。
>>648 ハードを知らないソフト屋なんて組み込みには向かないだろ。
と言われて、猛勉強しました。
隣の香具師は組み込みPGのくせに自分のターゲットメカのCPUが何なのか知らない(SH3だが) 底辺はこんなもんだ
>>638 俺のところはまさに一子相伝だよ 師匠と弟子でペアを組む
XPとか新しいソフトウェア技術なんか誰も知らないのに、ペアプログラミングが普及してる
653 :
デフォルトの名無しさん :04/01/25 20:16
>>652 ペアプログラミングって言う言葉は初めて聞いたけど、
そういわれてみれば俺の周りにも2人ペアで仕事してる
状況は多いなぁ。自然とそうなるのかね。
コンピュータサイエンスで学ぶ論理回路とその設計 柴山 潔 (著)
ミスりますた コンピュータサイエンスで学ぶ論理回路とその設計 柴山 潔 (著) この本を読んだ方いますか? こんど組み込み系の仕事をやりそうなんですがこの辺のバスのタイミングやらの復習を濃い目にしようと思いまして これ以外に参考になりそうな本がありましたら教えてください
657 :
デフォルトの名無しさん :04/01/25 22:25
>>655 =656
役に何か勃たねぇよ、タァコ(藁
半田ごてでヤキいれたろか??
>>651 ,
>>653 最近は珍しくないだろ。
組み込みもそれなりの OS があるし、ちょっとしたところだとドライバとアプリケーションは別の人間がやってたりするから、アプリケーション屋さんが CPU 知らなくても不思議はない。
GUI を除けば Windows のアプリケーションとあまり変わらんよ。
もちろんドライバとかのハードべったりのところを担当してる奴はそんなことないだろうけどな。
>>658 うちはハードがからむ部分は自前で実装して、アプリは完全にハードのことを
考えずに書けるようにし、開発環境を整えて、ハードをあまり知らない外注にも
投げられるようにしてます。
>もちろんドライバとかのハードべったりのところを担当してる奴はそんなことないだろうけどな。 ところがどっこい。解ってないのにコピペと勘だけで動かしてしまう厄介な人種が存在します。 もちろん解ってないので、動いたり動かなかったり、出荷してから返品とか事件が絶えませんが。 先日も助けを求められたので、とりあえず「回路図とデータシートみせて」と聞いたら「???」状態。 「呆れて嫌になる」というより「不思議で仕方がない」という気持ちの方が大きいです。
>>660 DQN な奴と言うのはどこの世界にも一定数存在しますけど。
>> もちろんドライバとかのハードべったりのところを担当してる奴はそんなことないだろうけどな。
「そんなこと」 = 「対象 CPU を知らない」 と言う意味は理解してますか ?
> 出荷してから返品とか事件が絶えませんが。
て言うか、そんなところに DQN を配置している会社 (かどうかは知らんけど) の組織が問題だと思うけど。
>>642 大抵は両方出来るんじゃない?やるやら無いは別にして。
ハード屋はクリティカルな所は自分でソフト組んでチェック。
ソフト屋は仕様見からこんなハード構成にしてよって提案とか、勝手にバラック組んでテストとか。
>>662 それが本当だとしたら、かなり理想的な環境じゃないの?
>>663 小規模なところは、そういう風になってるとこ多いよ。
CPU もショボイし、メモリーもきちきちだったりするからソフト屋さんと言えどハードウェアを意識して書かざる得ないしね。
ICE が対応していない CPU とか、ICE が買えなかったりすると、ハード屋さんも特定ポートを叩けるぐらいのプログラムは書けないとハードデバッグもままならんかったりする。
まあ悪く言えば前近代的なわけで、大規模システムには適用できないんだけど、結構楽しかったりするわけだ。
>>664 そそ小規模なとこは何でも屋さんが多いからスキルが高い場合が多い
ヤパー、ハードデバッグはシリアルでCPUに対して1biteごとに|OP-CODE|OP-LAND|送って(シリアル外部割込み)、REMOTE-IPLみたいにしてOS移植してみたり、 デバ〜グコード送り込んで、ロジアナ・高性能トリガラブルオシロで観察で、料理するのがウマ〜(゚∀゚)
スキルが高い方が給料安いって不条理だね。
669 :
デフォルトの名無しさん :04/01/28 20:45
結局、制御系ってオートマトン系ってことでしょ? 時間オートマトン。
>>666 なんかありったけの知ってる単語つないだって感じだな...。
一応 bite と op-land には突っ込んどこう...、なんじゃそりゃ ?
671 :
デフォルトの名無しさん :04/01/28 21:30
>>670 ププッ。バイトとオペランド知らねーのか。もいちょ、ぷっブブッ。
まぁ、キットの檻の中ならモニタ・エミュレータ・デバッガ付いてるしな。
>>670 もいちょ。
モニタ・エミュレータ・デバッガがない状況でも、シリアル1本あれば、コードをシリアルに載せてPCから、ターゲットCPUをあやつっちゃうのさ〜。
ども〜!
673 :
デフォルトの名無しさん :04/01/28 22:17
そのネタは飽きたので、新しいのにしてくれ。
675 :
デフォルトの名無しさん :04/01/28 23:36
>>672 それはほんとにモニタレスなのかと小一時間(ry
biteだけにえさに噛み付いてみるw
>>675 モニタレスだよ。ワンチップの石ならシリアルINT掛かったら、シリアルから吸い込んだのをメモリに展開して先頭番地にジャンプさせるような仕掛けのブートシーケンスを焼いとく。
ただ、BIOS乗る石の場合これできるBIOSじゃないと駄目だね。もしくはモニタプログラムが載ってるか。
1biteごとに⇒一齧りごとに
>>676 追加
ただし、転送中他の割り込みは必ずマスクしてなきゃいけないけどね、ターゲット側もPC側も。
679 :
デフォルトの名無しさん :04/01/29 11:57
結局ターゲット上にローダがいるんじゃん。広い意味ではモ(ry そして、実動作だけでは、デバッグが難しいことに気づき、レジスタ表示、メモリ読み出し、ステップ実行と機能を追加していき、やがて完全なモニタにw 製品出荷前日に重大な不具合を発見。しかし、いくらモニタでチェックしても原因はわからず。実はモニタ自体に重大なバグが・・・・ ってことにならんことを祈る ローダを作る(作れる)のはいいことだと思うけど、わざわざ自慢げに語ることなのか?
>>679 シリアル外部割り込みIRQ4(ベクタ番号00001:100)、INT0ChのIDTみて割り込みルーチン割り出して、そこのBIOS変更って手があるけど、外にだせな・・・(ry。
なんか、ちょっとソース直しちゃコンパイル、ローディング、実行って やってると、すごく効率悪いな。なんとかならないか。
>>681 外からダウンロードできるだけいいと思う。
いちいちROMを焼かないとダメなんて事になった日には…
683 :
ポッブコーン正一・正二 :04/01/30 21:52
部分的モデルマッチング法の具体的な手順を知っている人、誰かおしえてください。
>>681 治さなくてもいコードを書け
そもそも、どうしても実機上じゃなきゃテストできないようなとこ以外は潰しとけ
688 :
デフォルトの名無しさん :04/02/03 16:36
組み込みで割り込みなしのプログラミングし出したら、 ファイルスコープグローバル、スタティック変数だらけでかっこわるくなってしもうた なれないことに手を出すと、ろくなことないよ。。。
>>688 割り込みを無くすこととグローバル変数だらけになることの因果関係がわからん……
690 :
デフォルトの名無しさん :04/02/04 01:09
割り込みを使う方がグローバルだらけだろ 引き数も戻り値もとれないんだから
「グローバル変数」って名前がイクナイ グロ−バルな経営戦略...なんてテレビCMやってて 憧れを抱いてしまう初心者も多いはず。 暴走族を珍走団と呼ぶことで羞恥心に訴えるように 使うことをためらう呼び名が欲しいもの。 とりあえず「野晒し変数」とか
>>691 もう禿同としか言いようがねえっす!!!!
ローカル変数も田舎臭さが漂うから 引き篭り変数だ オタ臭さはオケー
694 :
デフォルトの名無しさん :04/02/04 15:08
パブリックとプライベートはうまいネーミングだよな
globalって言葉にあこがれを抱いているのは 対外志向の強い日本人だけなんだが。
696 :
デフォルトの名無しさん :04/02/04 23:03
ファイルの中で閉じてれば、あまりグローバルとかローカルは意識しないけどな。 気にしてたら、組めないし。
グローバル変数は全部ひとつの構造体に押し込んでます。面倒なんで。
>>697 俺も・・・同じだー。
あとは、1ファイル内で static 宣言。(ROM焼きはダメヨ)
グローバリーは詐欺
#ifdef japan #define global accept american way #else #define global force my way #endif
701 :
デフォルトの名無しさん :04/02/08 11:06
リアルタイムに近い処理をさせると、長いループが組めない。 関数がコールされるたびに状態遷移するスタイルのプログラムになるので、 スコープはファイルに絞れたとしても、結局staticになる。 ローカルはOSがタスクを切り替えてくれるとかなら、増えると思うが、そんな高級な環境ではやってないので、あまりスタックは気にしたことがない。
Dセクション・Bセクションなど(なるべく)使わないのが美しい それがやがてはオブジェクト指向につながる グローバル厨死ね
でも、ソフトの規模によってプログラミングに対する考え方って 相当変わってくるよね。 制御系ならなおさらのこと。
704 :
デフォルトの名無しさん :04/02/08 14:02
オブジェクト指向と組み込みねぇ
705 :
デフォルトの名無しさん :04/02/08 16:55
プログラマはグローバル変数を使わない コンパイラが最適化の過程において適切に処理する というのが理想かと。 省メモリなんてある意味一番機械的に最適化できる分野っぽいし。
開発環境が面倒見てくれればなあ>グロウバル
mallocとかnewつかって穴だらけのメモりを使う余裕はないな。
mallocできるほどメモリが無いよ
alloc/freeでメモリがガベージ化するのを避けるため、initで30K位のメモリを固定サイズの 汽車ポッポにする。256か512ずつとか。その固定サイズパケットをget/freeで使い回す。 ROM32K RAM32Kぐらいの専用システムだとこれで充分いける。
RAMが4kしかないよ
(4k-スタック)しかないよ
712 :
デフォルトの名無しさん :04/02/09 14:22
男なら変数など使わずにアドレス直接指定しる #define a (*(int *)0xfff0 main(){ a=; }
713 :
デフォルトの名無しさん :04/02/09 14:23
間違った ×変数 ○スタック
外部からの割込みでタスクを再生成しなきゃならん事があるから 状態遷移を管理する部分はスタックじゃ話にならん それとグローバルで持ってるとマップでメモリアドレス分かるから デバッグが楽だ 毎回スタックを追いかけるのは正直辛い…
SH3の外部割込み使ってるんですけど、うまく動いてくれません。 今外部割込み2つ使ってて、1つはシリアル通信に使ってます。 シリアル単体だけならうまく動いてくれるんですが、 もうひとつ別の割り込みをスタートさせると、シリアルの方がとまってしまいます。 おそらくソフトが悪いと思うのですが、割り込みがとまってしまう原因って どんなことが考えられるでしょうか?
717 :
デフォルトの名無しさん :04/02/10 01:19
SHは割込み優先順位設定できるはずだが、ちゃんと設定した?
>>717 それはやっていません。
もちろん、割り込み中に再び割り込みが入らないように、
割り込みルーチンの中では割り込みを禁止するようにしています。
>>716 当然割り込みルーチンの最後にはマスクを解除しています。
SH3といっても、いろんな種類があるからねぇ。 素のSH3(SH7708)とかだと外部にプライオリティエンコーダが必要になるし。 そのあたりハードに関してもうちっと詳しい内容がわからないとね。
SRの上に4bit「割り込み許可レベル」があってここに0〜Fを書き込めるよね。 一方「割り込みレベル制御レジスタ」(IPRA,B,C・・・)を使って「どの割り込みはレベル何」 を決めるでしょ。例えばIPRxでシリアル0をレベル3にし、もう一つの割り込みをレベル4に して、割り込み許可レベルを4にしたら、もう1つの割り込みは起きるがシリアルは起きなくなる。 もうひとつというのがIRQxだとしたらデフォールトでシリアルより優先順位は高い。 IPRxの設定内容とSRのI3〜I0の設定レベルを確認してみて。
721 :
デフォルトの名無しさん :04/02/10 12:12
書き方がまずかったですね。割込みをかけてすぐにシリアル割込みが止まってしまうわけではなく、すぐに止まるときもあれば、100sぐらい動くときもあるのです。ですので優先レベルとかは問題ないと思います。
722 :
デフォルトの名無しさん :04/02/10 12:26
RAMが離れたアドレスにある場合などに、 セグメントを特定のアドレスに割り付けたり、 変数ごとに指定したりと言ったことはできますか? メモリの速さが全然違うので、一部のアクセスの多い変数を速いメモリの上に置きたいと思ってます。
>722 >712見れ スタック無ければ戻り番地はどうするでつか main{ }だけ?
>>724 の言うようにldscript書けるようになって、
目的のメモリ領域にセクション名つけて
int var __attribute__ ((section ("HAYAITOKORO"))) = 0;
としる。gcc。
728 :
デフォルトの名無しさん :04/02/11 00:26
>718 論理演算をミスってるとか、ビットアクセスしかできないとかないですか?
日立のサンプルソースコードをgccでコンパイルしてるとか無い? 構造体使ったビットアクセスで問題があると聞いたことがある。
730 :
デフォルトの名無しさん :04/02/11 08:04
ビットフィールドの並びが普通と逆だったと思う。 ただ、ANSIではこの辺の規定がないと聞いた気がするので、日立が悪いと一概に言えないかもしれない。
>>718 > 当然割り込みルーチンの最後にはマスクを解除しています。
これ当然、RTE 命令でやってるってことだよね。
割込みルーチンの最後で LDC 命令とかで割込み可にすると、多重割り込みになるから要注意。
>>730 規定がないと言うより、コンパイラのマニュアル読めと書いてあるはず。(意訳)
ただし、ビットフィールドっていうのはどうアクセスしているか規定が無い方が
致命的なような気がする。まあ、Read modify write以外考えられないけど。
「実装依存」と訳している。
●Cコンパイラの実装により定義された(implementation-defined)動作、不定の(unspecified)動作、未定義の(undefined)動作の区別は? ・実装により定義された動作…どう振る舞うかを実装側が選択して、その振る舞いを文書にすることを意味する。 ・不定の動作…どう振る舞うかを実装側が選択しなければならないが文書にする必要はないことを意味する。 ・未定義の動作…本当にどんなことがおこっても不思議ではないことを意味する。 上記のどの場合にも規格は、必要条件を課していない。 最初の2つの動作について、規格は時々ありそうな振る舞いの集合について少し提案している(その集合から選択しなければならないかもしれない。) 規格は未定義の動作に直面したときの動作について何も必要条件を設定していないことに注意すること。 だからコンパイラは、本当に何をしてもいいことになる。 プログラムの中に未定義の動作があっても何とかやっていけると考えるのは大変危険である。
718さんは質問者の715ではありません。 まぁそれはいいとして、割り込みルーチン の中でマスク解除ってのはどういうことですか? 割り込みの中ではIRR0(割り込み要因エッジ検出のため)をクリアして いますけど、それとは違うのかな? それと割り込み開始するときにはIPRxを対応するIRQにマスク解除してます。
736 :
デフォルトの名無しさん :04/02/11 22:41
日立のビットフィールドの並びは上位ビットからだけど、こういうコンパイラは他にある?
>>735 > 718さんは質問者の715ではありません。
わけわからん。
トリップ付けろ。
738 :
デフォルトの名無しさん :04/02/12 23:21
unionって使う?
>>738 最近のスレの流れからだと
ビットフィールドアクセスとバイトアクセスの使い分けする時に使ったりする
特定のchar配列だけを longの境界に合わせたいときとか… union{long dummy; char data[256]} buffer;
>>738 複数の構造体があって、それらの最大サイズが知りたいときなんかに使う。
union U {struct A a; struct B b; struct C c;}; size = sizeof(U);
742 :
デフォルトの名無しさん :04/02/13 22:32
>>738 CPU乗り換えるときとか苦労する。
パディングやバイトオーダーとかね。
まあ、共用体が重宝するくらいハードに近いところをやっているなら、
アドレス割付もかわるだろうから、どのみち書き直すしかないんだけどね。
743 :
デフォルトの名無しさん :04/02/14 17:47
>742 ビットフィールドで苦労した
744 :
デフォルトの名無しさん :04/02/14 23:01
16ビットから32ビットへの乗り換えは、絵に書いたような大混乱でした。 int幅は直ってない、メモリのアクセス単位の違い、共用体は全滅。 中でも共用体はパディングがあるので、やっかいでした。 近々、CPUの世代交代がある場合は共用体の使用も考えてしまいますね
745 :
デフォルトの名無しさん :04/02/14 23:20
>>715 割り込みでの特権モード中にユーザーエリアコードを実行して
その時に別の割り込みが入って変になることがあったような?
(割り込み処理をC言語記述していたときにそのコード中でmemcpy等の
ランタイムライブラリを不用意に使用してはまったことが
あったような気がします。)
746 :
デフォルトの名無しさん :04/02/15 00:12
unionを使うときにCPU依存になることを考えない方が馬鹿だろ?
規格通りの使い方をすればCPU依存になりませんが。
unionのどこに処理系依存があるのか?
750 :
デフォルトの名無しさん :04/02/15 16:57
最近はそう呼ばないのかな? 構造体アライメントのことだよ。 アライメントを指定できないコンパイラも結構あるね。
752 :
デフォルトの名無しさん :04/02/15 21:22
ほれあれだよ インテル系はワード境界じゃなくてもワードアクセスできちゃうじゃん あれって他に持ってく時に死ねるんだよね ネットワーク周りのプロロコルってなんつーか 粗い面と適当じゃn
たしかSHはワード境界外してワードアクセスすると 例外が発生したような気が。
>>753 モトローラ系は、ほとんどアクセス例外出すだろ
最近のは知らんが
最近は怒られない方が珍しい。
756 :
デフォルトの名無しさん :04/02/16 05:19
>>752 適当なアドレス指定ができるの?
それって便利じゃん!
CISCの名残かな?
757 :
デフォルトの名無しさん :04/02/16 05:23
このソースコードを見てどう思いますか?↓ h90%勒 uソ ケ .ーヘ装ー|儿iタヘ$@Pアム竰銅 鈩 rムア 暁*フQA礒エヘt闢 u袖sHuエタ・ 闖 聹゚YQク ・ rム^ウ エ ・tィア�ト串t�嵯 �オ・ム肭鏤 ・・A・ミ3Qア`恚Dモネ%,・t・ニ@sツ塗0� r:t抃拌I簣Yテ佻・uPーヘ,テ`奮ウ 咸`葬0ヘヘ)a粽キ7ソネウー|・G`願2 ,r・ ,0・A・ a+U・y焉・簷ヘ;aテY袢僂`エxh �玉`a・@JuJテ
758 :
デフォルトの名無しさん :04/02/16 07:15
>>758 バイナリをソースだと思い込んでわけのわからずまま
貼り付けている素人の相手をすんな。
>>756 例外起きても、OSが相手してくれるから問題ない。(あるけど)
761 :
デフォルトの名無しさん :04/02/16 10:02
ワード境界を外したアクセスって、どうやるの? structもunionもコンパイラが勝手にワード境界をあわせるし。
その変数をchar*にキャストして1足せばいいだろ
>>762 charもintも同じビット幅だったりしてな。
>>763 多分大丈夫。念のためsizeofで確認だ。
765 :
デフォルトの名無しさん :04/02/16 17:19
HEW用ZMODEMライブラリありまつか?
766 :
デフォルトの名無しさん :04/02/16 18:20
通信プロトコルは処理系依存しないだろ
>>766 まじでつか???
グニュゥソースみたいなものが使えまつか???
そんなレベルなのかよ _| ̄|○
何のライブラリを使えば良いか、カキコしる。 お願い。
zmodemぐらい自分で実装しろ
割り込みの件ですが。解決しました。 原因はデバイスのバグで、外部割込みをエッジ 検出するときにエッジがみえなくなるというものでした。
zmodemをフル実装するのは結構マンドクセーぞ。
XMODEMなら楽だ。
775 :
デフォルトの名無しさん :04/02/16 22:50
>>763 charもintもついでにlongも同じビット幅なんてCPU、コンパイラもあるの?
>>771 ジッタで鈍って他信号とのタイミングマージン採れなかったのかな・・・。要は配線レイアウトってことか・・・。
>>756 アクセス例外出さずにのんびり走ってくれるから非常に困る。
>>775 CRAY
こいつは有名だ。逆にいうと多分こいつしかないのだろう。
TIのDSPもそうだね。 INTもCHARも・・・・まあDSPだからさ
gcc/SH用のIDE教えて下さい。
ボーランドから BCBXとか出てるけど、あれはダメなの?
>>780
782 :
デフォルトの名無しさん :04/02/17 16:34
783 :
デフォルトの名無しさん :04/02/17 23:35
すみません、質問です。 ある程度のリアルタイム性が必要なので、大きなループが組めず、時間のかかる処理や、他のデバイスの応答を待つ処理は、 switch文を使って、処理を分割して、状態遷移を表現しています。 条件分岐が少ないうちは、まだましなのですが、 条件分岐が増えてくると、case文のラベルに向けて、処理が飛び込んでくることになるので、 gotoだらけのプログラムと大差なく、スパゲティになってしまいます。 何かよい方法はないでしょうか?
784 :
デフォルトの名無しさん :04/02/17 23:49
>>783 > すみません、質問です。
> ある程度のリアルタイム性が必要なので、大きなループが組めず、時間のかかる処理や、他のデバイスの応答を待つ処理は、
> switch文を使って、処理を分割して、状態遷移を表現しています。
OS 導入したら ?
つーかリアルタイム性が必要なところは割り込みで処理するようにすればいいだけかと思うけど。
>>784 でかい switch 文を関数テーブルに展開するコンパイラは今時珍しくないぞ。
>>787 コードを整形してくれるわけじゃあるまい
>>767 ジャンプテーブルにはしても、関数テーブルにしてくれるのは知らんぞ
>>783 自分の場合、バイトコードインタプリタをCで バイトコードへのコンパイラ(まあBasicもどきの簡単なの)
をDelphiで作ってあるので簡単に解決するのだが
これは仕事で使ってるので差し上げる訳にはゆかない。
一度時間を貰ってそういうの作ってみたら? 自分の場合、1週間くらいでだいたいデバッグも終わったよ。
>>787 OS導入とかそういう問題じゃないだろ。
それに割り込みにしたらタイミングやらI/Fやらの見直しが必要になるぞ。
他の処理とは非同期になるわけだからな。
オーバーヘッドがでかすぎる。
>処理を分割して、状態遷移を表現
これは割りとよく使うよね。
switch caseでスパゲティになるのが嫌なら素直に関数テーブル使うといいよ。
ちなみにコンパイラによってはその方がコードサイズ小さくなったりするし。
switch caseも内部的に関数テーブル(といか参照テーブル)作るけど結局は
2段jumpしてる場合が多いのよ。
だから素直に関数テーブル作ってjumpさせた方がよいよ。
793 :
デフォルトの名無しさん :04/02/19 21:30
全部の処理をメインループの一つの処理でポーリングしてる予感
別にそういう手法でも悪くは無いでしょ
マルチタスクを自力でやってるのよ 1周期○msとか応答時間決めて処理を分割する OS入ってない組み込みで時間に厳しいものとかは ふつうそうじゃないの?
ms単位なら、普通そんな分割必要ないと思うぞ。 といいながら、時間の見積もりたたないようなループが入ったら、スタックポインタ切り替えるだけのCORTNGATE呼び出して誤魔化す事は多いけどな
>>975 うん。普通になるよね。
8bitや16bitのCISCマイコンでは珍しいことじゃないよね。
映像系とかはVsync(NTSCなら16.7mS)に同期してMainJobを
回したりするからね。
>>976 mS単位であってもよくやるよ。
まぁパイプライン積んだ32bitのRISCマイコンクラスなら1mSもあれば
いろんな仕事が出来るが、RISCマイコンを使うシステムってそれなりに
要求される仕様(仕事量)が大きいので、やっぱり処理を分割して制御
させる場合が多いのよ。
ごめん。
>>795 うん。普通にやるよね。
8bitや16bitのCISCマイコンでは珍しいことじゃないよね。
映像系とかはVsync(NTSCなら16.7mS)に同期してMainJobを
回したりするからね。
>>796 mS単位であってもよくやるよ。
まぁパイプライン積んだ32bitのRISCマイコンクラスなら1mSもあれば
いろんな仕事が出来るが、RISCマイコンを使うシステムってそれなりに
要求される仕様(仕事量)が大きいので、やっぱり処理を分割して制御
させる場合が多いのよ。
次スレは「制御系なら俺に聞いてもいいですか?」というスレ名にするように。
uso800
801 :
デフォルトの名無しさん :04/02/20 20:56
usec単位になると、かなりビビる。 処理分割とか、ループを回せないとか、 制御系のプログラマーにしか縁のない世界だよな
うーん。
>>783 さんが現れないからよく判らんのだけど、
#define _GOTO(n) {no = n ; return ;}
void proc( void ){
static int no=0;
switch(no++){
case 0:
処理;break;
case 1:
if( state() ) _GOTO(1);
処理;break;
・・・
case n:
処理; _GOTO(1);
}
こんな感じで一つづつの処理を書いておいて
mainはこんな処理郡を呼び出すだけみたいな感じの書き方?
803 :
デフォルトの名無しさん :04/02/20 21:44
つーか、仕様がよくわかんねぇな? 作りたいのはドライバか、カーネルっぽいけど ASICやFPGAじゃねぇよな?
>792 関数テーブルにすると飛び番号のラベルが付けられないから、 仕様変更とかで状態数を変えたとき エンバグしやすそうだけど、なんかいい対策ない? 自分はそれが怖いんで、switch-caseのラベルを 16bitの飛び番号にして、モードを上位4bitで判定するとか してしまうんだけど、実行スピードの面で効率悪そうなんでね。 ラベルが飛び飛びなんで多分最適化が利かず関数テーブルは 生成してないと思うし。
>806 たしかにいままでにアセンブラソースを確認してないのが悪いんだが、 さすがに2Mbitにもなるテーブルが、1MbitのEP-ROMには入るまい。 ただテーブルを小さくするような最適化も考えられるから、 週明けに会社で確認するよ。 #使ってるやつはそこまで気の利いたコンパイラじゃないとは思うけどな。
出張に出ていたため、レスが遅れました。 用途はモータ制御がメインです。IPコアのステータスを読みながら、処理を進めていきます。 OSを積むような贅沢な構成ではないです。(積み方もわかりません) main(){ while(1){ 処理1; 処理2; 処理3; } } のような構成になっていて、各処理内がswitch文で分割されています。 この処理がものによって、連携しながら動くこともあるので、外部との信号とのやりとりも合わせると、 読みづらいコードになってしまってます。 とりあえず開き括弧と閉じ括弧が離れた巨大なswitch文というのは見苦しいので、 関数テーブルなどは採り入れたいと思います。
809 :
デフォルトの名無しさん :04/02/21 23:47
>>805 うぇー
関数テーブルはツールで作成ッスよ
適当にエクセルでも秀丸でもなんでも使うべし
人間なんて信用できん!俺も含めてな!
>809 制御系なんてやってると乗り物(飛行機・電車とか)乗ってても安心できん! >801 だな 時間厳しいのにコストの関係で遅い(wait)外部付けられてたり((T^T) main(){ for(;;){ 処理1; 処理2; 処理3; WDTリセット } } いつも犬に追われてます。(藁
>>810 for(;;){
↑泣きながら処理してるんだな
>>810 ハード屋は「もう基板起こしちゃったからあとはソフトで何とかして」で済むからね。
関数テーブル、マクロで作成っしょ
814 :
デフォルトの名無しさん :04/02/22 17:40
>>812 「おまえなぁ、今はシステムで一番高いのはソフトだぞ!
ハード部品なんて何円、何十円ってしかかからんのだからそっちで直せや!」
って言ってやれ
>>814 まず基板を作りなおすのにも開発費がかかります。
つぎに、ハードの部品コストは1つづつにかかります。1万個でるなら100円の
コストダウンに100万円の開発コストをかけることができます。
この場合基板開発コストの方がソフト開発コストより高かったのでしょう。
実際のところは部署間の力関係で決まります。
というか、現実にはハード直すには時間コストがかかるからな。 遅れればペナルティがある現状ではこれを言われると勝てない。
『鉄塔〜』や『スタンド〜』はむしろ第4部がテーマ
>814 今は部品の何円、何十円を削減するのに必死だよ しかもこれ言われると終わりだよ 「基板直してたら納期間に合わん」 部品調達も納期2ヶ月とかザラだしな 買ってくれなくて結構とかいうメーカーもあるし(怒
ところで、エクセルのマクロで関数テーブルって どうやって作るの?
マクロで状態遷移をシミュレーションして呼ばれる関数をcsvで出しているんでしょ。
821 :
デフォルトの名無しさん :04/02/23 10:35
制御系のソフト屋って大変だな。 おまいら体壊すなよ。
プログラマから提案出来る部品削減テクニックなんて話題はどうだ? 前スレで出てるのでは ・ ソフトウエアでシュミットトリガを実装 ロジックIC->抵抗1本に とかさ、
チャタリング除去対策にハードで対処(チャタリングを除去する回路)するんじゃなくて ポーリングで処理するのも部品削減テクニックだな。
抵抗1本でシュミットトリガを実装する方法は 抵抗1本と入力ポートの入力容量をCR遅延として使う。 普段は出力ポート 1、読みたい時に入力ポートに方向レジスタを設定 2、時間を置く ->CRの時定数だけ実際の入力レベルがシフトする 3、入力する。 4、入力結果を出力ラッチにラッチしておく 5、方向レジスタを出力に設定 こうすると、普段出力に設定されているので入力端子のインピータンスは低く 抵抗の向こう側は抵抗分インピータンスが高くなるので、外来ノイズによる影響を 受け難くなる(高圧パルスとかに強くなる)おまけつき。
825 :
デフォルトの名無しさん :04/02/23 18:31
HEW 使ってますが、STLサポートしてないそうですが、 vectorクラスの代わりに何使えば良いですか?
そんなもん自分で作れ ('A`) ζ ノ( ヘヘ 旦
826=C++はまだ未実践でC言語しか使えない香具師
828 :
デフォルトの名無しさん :04/02/23 20:37
応答周波数が数kHzのセンサー入力から、 チャタをソフトでとりつつ、信号は見落とすな。 ポーリングはメインループがmsecオーダーに近いので、チャタとりは無理、 タイマー割り込みは割り込み頻度が大きすぎて、メインループが進まなくなる可能性あり。 うーん
>>828 数KHzを仮に4KHzとしたら、 16+αKHzでサンプリングして、2回に一度同じかどうか判定する
in が入力 oldが前回 dataが取り込み値としたら
data ^= (data ^ in) & (not (in ^ old) )
つまり、 on と old のビットが同じでかつ、今回の結果が違う場合にdataを反転
としたら、一度に8bitCPUなら8ポートチャタ取りが出来るよ。
で、アナログ的な信号=中間電位が出るような場合は、
>>824 の方式で
---R1--+--R2--CPU
|
C
|
///
とすればいい。
>>828 センサー入力を割り込みにして、割り込んだら直ちにフリーランさせた
タイマーを見に行く。で、もし前回の割り込みからの時間が短すぎたら
チャタとみなしてキャンセル。
もちろん割り込み中では多重割り込み禁止(って、普通はそうするか)。
ってどうだろ?
あるいは、センサー入力の割り込みで自分の割り込みを禁止した上で
ワンショットのチャタ待ちタイマー起動して、タイマーの割り込みで
センサー入力の割り込みを許可する、とか(文章にすると分かりにくいな)。
でもこれ、万が一両方の割り込みが禁止になったらデッドロックか。
>>828 それをカウントすればいいの? それなら
>>829 の方法で
edge = (data ^ in) & (not (in ^ old) )
data ^= edge;
として edgeをカウントすれば そんなに重い処理じゃないでしょ
LPF作ればいいんじゃないの? 遅延があってもよければだけど。
おまいら、T-Kernelのソースはもう入手しましたか?
>>824 Cで時定数とするのはええが、アナログ的にはCの容量誤差が気になるとこだな
使うのは無論B特品以上じゃないと話にならんし、温度許容も気になるとこ。
遅延を大きくするために容量を大きくしたはいいが、リアルタイム性がnsオーダとかだと話にならんかも。
約4年、業務系の開発を行ってきました(言語は主にVC++)。 (情報2種はアセンブラで取得しました) 最近、家電などの開発に携われる制御系の仕事に興味があります。 そこで皆さんに質問ですが、制御系の面白いところ、つらい所はどんなところですか?
>>836 面白いところ:物理的にモノが動く
つらいところ:動くはずのものが動かないとき
>>836 業務系はどちらかと言えば質より量。大量の数字を捌く仕事。
制御系はどちらかと言えば量より質。大量の数値を捌く仕事。
冗談は兎も角、ハードよりは厳しいんでないかな。
家電といっても情報家電だったりするとハードの知識は要らなかったりもするけど。
>>835 ポートの入力容量をCとして使うんだから、時定数はn秒単位でしょう。
840 :
デフォルトの名無しさん :04/02/24 17:38
ITRON使ってシリアル出力作ってますが、 ITRON系の関数は正常終了E_OKを返すのに、 プロトコルアナライザで見ても1文字も文字が出てきません。 どのあたりを調べれば良いでつか?
>>840 シリアルI/Oの送信レジスタに書き込むところでブレークして、
ステップ実行というのはどう?
>>829 >>832 レスサンキュー!
その方法を試してみるよ。
これなら論理演算だけだから、処理時間が軽くなるね。
タイマー割込で取り込ませても、メインループには影響少なくて済むし。
まあ、2回一致より様子を見て、数回一致検出にするとか、可変回数にしようかとも思ったけど。
実際は、高速カウンタを作りたいので、立ち上がりエッジだけ拾うように、
edge = (data ^ in) & (not (in ^ old) )
rising = not(data) & edge;
data ^= edge;
とするつもり。
>>831 最初に書き忘れたけど、入力ピンが割り込み設定できないのよ。。。
でも、サンキュー!
>>837 最も辛いところ:動くはずの無いものが動いたとき
動かんな〜、動かんな〜と思ってたらパタ−ンミスでVCCきてないとき 年に1・2回、ボンという音ともに狼煙があがるとき 精度がでないのを夢の中でも原因・対策を考えてるとき
皆さんレスありがとうございます。 今、転職しようかとかなり悩んでいます。 オープン系、Web系って聞こえはいいですけど、やるたびに業務も言語も違って、 俺の得意分野、売りってなんなの?状態です。 もう、なんでも屋状態、 なんでも屋って技術者として価値あるのかな?なんて思ったりして... 制御系って専門的な仕事って感じで、惹かれるんですよね〜。
制御系の世界には、ハードもソフトもこなす「何でも屋」が存在する
制御系ソフト屋はある程度のハードは理解できないと困るよね?
JTRONって仕様が公開されているけど、クラス群のソースコードってどこで手に入るの?
850 :
デフォルトの名無しさん :04/02/25 10:21
>>846 制御系ってより組込み系の方がいいと思うよ。
851 :
デフォルトの名無しさん :04/02/25 11:42
>>836 面白いところ:ICが煙を吹いたとき。
つらいところ:基板にふれて感電したとき
>>831 センサー入力を割り込みにしたら
ノイズ、チャタリングでえらいことになりそうですが
>>852 心配なら、それをガードできるだけの R*C入れて シュミット入れてやればいいじゃない。
>>853 高くなる。
コストを削ってソフト処理するのでつ・・・
orz
じゃあ、メインの呼び出すルーチンを全部同じ長さにして、タイマー代わりにしろよ。 俺は4ビットでそれをやった事あるぜ。
856 :
デフォルトの名無しさん :04/02/25 12:29
4ビットクラスならできる技かもしれないな アセンブラだろうし でも、16ビットから上のクラスで、コンパイラ使ってやりたくはないな
>>855 おれもある。
っていうかタイマなんてなかったし。
858 :
デフォルトの名無しさん :04/02/25 12:38
>>852 チャタらないから大丈夫、やっぱり速い処理は割り込みだよね、よかったよかった
なんて思って出荷したら、誤動作することがあるらしいとの報告が来ました
原因を調べたらノイズでした
おまけに割り込みルーチンの中で割り込み禁止にしてなかったもので。。。
なんて間抜けな話はないよね
俺の場合は、トライアック調光を4素子するのに、タイマーの精度が足りなくて仕方なくだったよ。 20u秒程度の精度が欲しかったので、命令数数えて実装するのにえらい苦労した。
俺は50μぐらいまででした。命令数数えるのは一緒ですけどね。 皆さん、ひげそりは丁寧にしましょうね。
861 :
デフォルトの名無しさん :04/02/25 20:35
>850 制御系と組み込み系ってちがうの?
>>861 制御系っていうと、シーケンサ相手とかも
入ってきそうな気がしない?
863 :
デフォルトの名無しさん :04/02/25 22:43
制御系は組み込みの一種でしょ。 どっちかと言うと、ハードに絡む話が多い気がする
パソコンに汎用I/Oボード挿して制御プログラム書くのは制御系ではない?
865 :
デフォルトの名無しさん :04/02/25 23:14
>>864 言われてみると、それも制御系だな
しかし、組込ではない
俺もよくわからなくなってきた
つーか、組み込みシステムって何かを制御する為に作ることがほとんどだから、ニヤリーイコールでしょう
867 :
デフォルトの名無しさん :04/02/25 23:30
パソコンじゃないのが組み込み・・・と一瞬思ったけど、 最近はWindows使ってても組み込みというな。 要は、コンピュータが主か、周辺機器が主かということじゃないかな?
C言語のmainの中に限ってしまえばレジスタ.、I/Oを直に叩いている部分では 組み込みやってるなと言う気がするけどそれより上の層では 正直PCのプログラムと変わらない気がする。 メモリを大量に積んだシステムならなおさら。
モーター制御とかじゃなくて、液晶パネルの描画系なら、あまり変わらんだろうな Cで組むデメリットのほうが多い
870 :
デフォルトの名無しさん :04/02/26 00:22
全部割り込みで書くプログラムってどうよ? メインは割り込み待ちしかしないの。
>>870 メインループでHLT。
割り込み処理後、動き出したメインループで後処理してまたHLT。
CPUへのクロック供給が止まったりするので低消費電力というおまけがついたり。
ハードの知識ってどんなのが必要なのでしょうか?
なんか懐かしい単語の数々・・・ シュミットトリガなんて、15年くらい口にしてないよ。 最近は主にパソコン相手に仕事してるんですが、組み込みのOSがない ようなのが、やっぱりいいなぁ・・・ 年のせいかな〜 やってた頃は、ハードが安定しないから、面倒って思ってたんだけどねっ
>>843 サンプリング時間を調整した2回一致で十分なリジェクト性能を発揮するから
数回取り込みは異論もあると思うけど、あんまり意味無いかもね。
サンプリング時間を適切に調整出来ない場合には仕方なく使う程度かな
あっと、
>>859 の話。 メインから呼び出す処理の長さを20μに揃えた訳じゃないから
一命令4μだから5命令なんて呼び出してreturnしたら終わっちゃう。
処理の長さをその16倍で揃えておいて、
4CH分の調光だから、かならずボコっと連続して空いてる時間があるからそこに突っ込むの。
>>853 単にC+Rで鈍らせてシュミットだと、ちょうどそのシュレッショルド付近でバタバタされるとリジェクト能力が落ちてしまう。
だから、CのGNDをシュミット出力から取るといいよ。
この方法を使うと、シュミットICを使わなくてもイイ インバータ2個余ってればCで正帰還をかければいい
>>873 何でもかんでも割り込みハンドラの中に書く人ハケーン
この手が通用する場面は限られてるよな。
>>878 旭化成のDSPなんかは、サンプリング周期での割り込み のみ で動かすんだぞ
>>870 お前が無限ループとかで待ちを作ってない限り、
大抵のプログラムはそうなってるはずだが……
俺がいつも作ってるのはこんな感じだな。 void interrupt int_handler(void) { /* 割り込み処理 */ } void main(void) { initialize(); /* 初期化処理 */ for (;;) { /* メインループ */ watch_dog_clear(); sub1(); /* 何かの処理 */ : sub2();/* 何かの処理 */ } }
俺がいつも作ってるのはこんな感じだな。 void interrupt int_handler(void) { /* 割り込み処理 */ } void main(void) { initialize(); /* 初期化処理 */ while(TIMER==0) { /* タイマの割り込みまち(10msが多い) */ TIMER=0; watch_dog_clear(); sub1(); /* 何かの処理 */ : sub2();/* 何かの処理 */ } }
>>883 TIMERが0でなくなったらメインが終わるように見える・・・
void main(void)
{
initialize(); /* 初期化処理 */
for (;;) {
while(TIMER) {TIMER--; MainTask();} /* 一定周期に実行したい処理 */
watch_dog_clear();
FreeTask(); /*ヒマな時に実行したい処理 ポートの再設定とか、シリアルポートのポーリングとか*/
}
}
sh3のタイマ割込み使ってブザー音(ポートのオンオフ)作ってるんですけど、うまい作り方が浮かびません。 mixtoneやsingletoneでの動作の切りわけやどこでどんな処理をやればいいのか悩んでます。 音の種類と鳴動時間とかはテーブルにして、簡単に音の追加ができるようにしたいです。ちなみにタスクos使ってます。 詳しい方お願いします。
タイマー割り込みでって意味はアタック・ディケケイ・サスティンとかも処理したいわけ? なら、シコシコ割込の中身書くしかないじゃない。
>>885 やりたいことがいまいち伝わってこないけど、
ポートのON/OFFじゃ複雑な音は出ないね。
D/Aコンバータ付けなきゃ。
P/ECEなんかは、タイマーのみでFM音源実現してるけど、 それはタイマー出力をDAC代わりに使ってるって事だしね。
sh3はDAC内蔵してるのあるでしょ 割り込みじゃないけど sh3でDMAをタイマー起動してDACに転送して単音メロディー鳴らしたことならある
>>888 PWMすな。自励式ブザーには通用しないが。
で、SH3のTMUってPWM出力モードあったっけ?
FM音源を積め と身も蓋もないことを言って無視される。
893 :
デフォルトの名無しさん :04/02/28 22:10
華麗にスルー♪
まあ、今後飛躍するであろう分野はデジタル家電に代表される いわゆる”組み込み”分野であるわけだが。 そう言うわけでこの分野もアナログ物理の処理を主とする昔ながらの制御系 とデジタル処理を専門に行う組み込み系に明確に細分化されるだろうな。
>>894 >アナログ物理の処理を主とする昔ながらの制御系
これが目立たんのは変わらないと思うのだが?
そもそもコレが組み込み系と呼ばれてるような気がするが、そこんとこどーよ?
896 :
デフォルトの名無しさん :04/03/01 16:07
>>895 このスレではそれは制御系って言われいるような感じを受けた。
組込み系っつうともちっとレイヤが制御系より上のような感じを受けた。
漏れが定義してやる 制御系: デバイスを動かす(制御する)ソフト 例) モータ制御のソフト、LCD制御のソフト 組み込み系: 特定の業務目的のための装置を動かすソフト 例) ATMのソフト、半導体製造装置のソフト、炊飯ジャーのソフト
>>898 デジタル家電は組込み系だろ
>897で「業務」と書いたのが不味かったか。
特定の作業目的とでも書いたほうがよかったかな。
言いたいことはさ、制御系ってあるデバイスなりを動かすのが目的 ってイメージ
んで、組込み系ってそれらデバイスを動かしてある作業をするのが目的 ってイメージ
制御系 PLCなどでのシーケンス制御 組込系 小型マイコンなどでの特定機器の制御 でいいんじゃね?
プロコンとかはどこに入るんだろう?
902 :
デフォルトの名無しさん :04/03/02 21:11
>>900 「組み込み」っていうのは、文字通り「機器に組み込んである」
ってことでいいんじゃない?
最近は小型マイコンじゃなくてWindows使ってても組み込みっていうことあるし。
ソフトウェアをインストールすることで目的の機能が実現可能になるパソコン等と異なり、 はじめからその機器で必要とされる機能をプログラムで組み込んでおく事を「組込み系」という。 機器自身の働きを制御するプログラム、又は 外部に接続された機器を制御するプログラムを「制御系」という。
コンクリ打ちっ放しの冷たい床にダンボール敷いた上に ノートPC広げて無人のラインの横で唸っているのが制御系
いいなぁ、クリーンルームだと座ると痛い格子の上で立ち詰めだよ。 常にダウンフローがあるから耳をおかしくなるし、そもそも普通紙も鉛筆も使えない。
いいなあ、漏れ、クリーンルーム入れなかったよ。 体に合う防塵服が無くて
908 :
デフォルトの名無しさん :04/03/03 14:15
制御系のソフト作るのにどれくらい制御工学の知識必要ですか?
非常停止で全停止が解ればOK
正直、あまり知識は必要としないかも。 細かいことは、モノを動かす上で身についてゆきます。 絶対的に必要なのは、確実・堅牢な動作と、909氏が触れていますが、、 緊急時に「本当に」ちゃんと停まるプログラムを書けるスキル。 東南アジア方面辺りに出す機械は、この辺を本当にちゃんと作らないと、 故意に指を落とす人がいるくらいです。 保障は指一本で、日本円換算で100万円くらい。 現地ではかなりの金額なんです。
>>910 PID制御とかその他の制御の知識も必要ないんですか?
>>911 知識としては必要かもしれませんね(w
知っていても、現物のモータ・エンコーダの特性、そして装置の要求仕様に即した実装を
行える能力の方が(自分的には)重要だと思う、ということになっちゃうかなぁ。
PIDが出てきましたのでちょっと意地悪な逆質問です。
あなたはPIDそれぞれのパラメタをどのようにチューニングするでしょう?
PIDを知識として持っているだけでは、ダメですよね。
現場で、現物やメカ屋さん電気屋さんと一緒に考えて、確実に動作するモノを
作らなくてはならないのです。そんななかで得られる知識を積み重ねて行くのが
大事なのだと思います。
もちろん、あらかじめ知識をいろいろ取得しているのは、悪いことではありません。
引き出しが多いのはよいことです。でも、教科書どおりのメカやデンキは少ないです。
理屈・理論一辺倒では仕事が終わりませんので、「ずる」をすることも必要です(苦笑
はじめにもどりますが、PIDなんかは、教科書よりも、身をもって体験したあとの方が、
理解は早いです。PID制御を知らなくても、ちゃんと動くように工夫をしてゆくと、
結果的にそんな感じにならざるを得ない事を、身をもって知る、みたいな。
伝達関数って難しそうな事いってるけど、コレのことかよ?! なんて。
あー。とはいっても、車輪の再発明をする必要はありません。そんなわけで、今できる勉強を
身に付けて、できれば自分で実験してください。
飽きたりしないように、興味のある対象でためしてみるのがいいです。
まず、なんでもいいから動かしましょう、回しましょう。
追伸 大概、デンキ屋さんやメカ屋さんは、自分より10歳くらい年上です。 おっさんとのコミュニケーション能力も磨いておきましょうね(w コレ、結構重要ですよ。
>>913 私の歳になると、現場のメカ屋は大抵私より年下な罠。
俺もだ。 まだ44だが、どこもリストラされて若い若い。
916 :
名無し募集中。。。 :04/03/03 22:09
RAMの容量不足を補うために、 必要なモジュールをフラッシュからロードして、、 不要になったらアンロードするというようなことを、 OSの助けなしで、擬似的でもいいからやっている人いますか? スタティックリンクで、必要なものだけリンクして、出してもいいんだけど、 将来の転用があったり、管理がめんどくさかったりという事情があるもので。
オーバーレイというやつか。懐かしいな。
オーバーレイもバンク切り替えもやったよ。 オーバーレイのほうはディスクアクセスにBIOS使った気がしたけど。
>>912 そうなんですか。今、就活中なのでちょっと気になったもので。
まあ、制御好きなので授業はちゃんと聞いてます。
ところで、H∞とかロバスト制御に関しても同様ですか?
院行く予定無いので学校でならわないんですけど・・・
ちなみに車か飛行機の制御したいんです。
もちろん、必要なら独学で勉強しますが
>必要なら独学で勉強しますが
それで十分
あとは
>>913 じゃないが人あたりも良くしる
>>916 フラッシュつきのワンチップマイコンなんは普段フラッシュ上でコードを実行するんだけど
フラッシュを書き換える時だけは、RAM上にコードを転送しなければならない。
という事が多いから、皆やってると思うよ。
>普段フラッシュ上でコードを実行するんだけど 。 フラッシュつきのワンチップマイコンでも フラッシュ上で実行したら遅くないか? 普通はRAMにコピーしてRAM上で実行するはず。
>>922 アーキテクチャによるだろ。
俺がいま使ってる奴は基本的にフラッシュ上でしか実行できないし
工夫してRAM上で実行しようとするとペナルティが生じてかえって遅くなる。
initでflashに書き込むルーチンとイレーズするルーチンだけはRAMにロードしておいてそこを呼ぶ ような作りにしたな。 割込でflashアクセスがあるとライトシーケンスが途切れるから、 ライトまたはイレーズの間は割り込み禁止にしないといかんかった。
925 :
デフォルトの名無しさん :04/03/04 20:23
フラッシュだとブレークポイントが設定できないね
出来ないのもあるし、ハードウエアブレークポイント持ってて出来るのもあるし
927 :
デフォルトの名無しさん :04/03/04 20:55
>>924 > 割込でflashアクセスがあるとライトシーケンスが途切れるから、
> ライトまたはイレーズの間は割り込み禁止にしないといかんかった。
今、
>>924 がいいこと言った。
俺、つい最近フラッシュの連続書き込みルーチン作ったけど、
割り込み禁止にしてなかった。。。
たまたまフラッシュの読み書きをするときは、割り込みが入ってこないけど、
なおしとかないと。
ICEでのみ、って環境もイパーイ でICEではフラッシュ書き換えがエミュレートできなくて いつまでたってもフラッシュ書き換えを実装できない俺 書き換え可能回数が三桁無いし
929 :
デフォルトの名無しさん :04/03/04 22:08
>>929 いや、あとで割り込みが追加されたもんでね
932 :
デフォルトの名無しさん :04/03/06 21:15
Cから簡単にフラッシュから読みだしたプログラムをコールできればよいんだけど。 フラッシュから読み出すメモリ空間をコンパイルオプションで指定する方法ない? やっぱりアドレスは意識しないといけないのかな?
>>932 自分の場合は、COFFの集合を指定したら一つのHEXファイルを作るツールを作ってる。でも、
ツールによってはリンカーオプションでロードアドレスと、ROMアドレスを設定出来ると思うが?
同じ番地に配置するなら、main()を含むモジュールを複数作れば速いと思う。
934 :
デフォルトの名無しさん :04/03/07 00:39
Cのコードから引数、戻り値を渡せたり、グローバルを共通に使えたら便利なんだけど。 main()を複数作り込んでフラッシュに放り込むしかないのかな。
とりあえず、先頭番地に main(相当)への相対分岐命令を置いて mainの引数を渡せばいいでしょう。 グローバルを使いたい場合は、mapファイルからグローバル変数のリストをアセンブラコードに出力させて それをリンクすると・・・ 結局はアセンブラ使わないと難しいね。
リロケータブルファイルにして、読み出し側でリロケーションするのが最強。 セクション名を同じにしておけば、グローバル変数を共通にもできるし。 って、実際やってる。ちょっとしたDOSモドキ。
>>936 あ、放り込んでるのがnand flashなんで、こんなことしてマス。
938 :
デフォルトの名無しさん :04/03/08 21:57
ハードチェック用のソフト作ってます(基盤が正常に動作しているかどうかの確認) で、よくわかんないことがあるんですが、一般的には メモリ関係は全アドレスに書き込んでみて、読んで同じ内容が見えるとOKとする のが普通でしょうか? あとポート関係のチェックなんですけど、オンオフしてLEDが点灯、消灯すればOK としたいところなんですけど、ポートがえらいたくさんあって、さすがにポートの数だ けLEDつけてらんないんですけど、どのようにチェックしたらいいでしょうか? ちなみにSIO使ってのPCとの通信はできるのでモニタの使用もできます。
チェックし過ぎて回数制限のあるものとか寿命終わらすなよ
>>938 昔アーケードのゲームでやってたRAMチェック
1.RAMを0x55で埋め尽くす
2.先頭番地から0x55かチェックしながらそのアドレスに0xAAを書き込む
3.先頭番地から0xAAかチェックしていく
ポートについてはアウトポートがどんだけあるのか知らないが
PC側に同じ本数で電圧レベルが合う入力ポート用意して
SIOに向けてコマンド送ってPCでポートのパターン比較するとか。
そんでエコーバックでSIOの確認もしておくとか。
>>938 メモリ関係のチェックは、バスラインの錯綜を検査するために
0x55aa55aaを書いてみるなどの工夫が必要。
どこまでやるかはケースバイケース。
DRAMの場合はリフレッシュ動作のテストも必要 リフレッシュ回路が動作してなくても 平気で数十秒ぐらいはデータ保持してしまうものもあるので 実際にリフレッシュ止めてどのくらいの時間で データ化けするか実験するのがよい 俺が昔やったときは1分あれば大抵化けてたけど 最近のはもっと長く保持してしまうものもあるかもしれない
944 :
デフォルトの名無しさん :04/03/09 07:35
そんなにDRAMは放置プレーに強いのか。。。 知らなかった SRAMしか使ったことないけど
>>942 同じ値を書いちゃmsb側のアドレス線が切れたりしてたらダメでしょ。
アドレス値と大きな素数を掛け算して下位ビットを取るとか、
M系列を順に書いておくとか
55とAAを書いて読むのは基本だけど 読むときに書いた直後だとキャッシュに残ってて 書けてなくても読めたことがあって あのときは俺はもう限界だと思った
書いて直後に読んだらキャッシュなくてもメモリもIOも何も繋がってなくても 書いた値が読めるよね
よめる。
使ってるCPUをはっきりしる>938
読みだししかできないポートの場合どういう確認がいいでしょうか? グランドに接続してスイッチでショートして読み出してみるっていうのがあるんですが、もっといいやり方ないでしょうか?
>950 基盤にポートチェック用の冶具とか接続できるんなら 出力ポートと入力ポートを接続して、出力値=入力値であるかどうか 判定すればいいんじゃない? u-com 冶具 ----------+ +-------- IN PORT|<--------|---+ | | | OUT PORT|-------->|---+ ----------+ +-------- こんな感じで。
>>951 もちろん一部そうしてますが一部折り返せない部分があるのでそこをどうしようかなと思って。
>>947 そりゃバスがフローティングになってるんじゃないのか?
>>952 セレクタなりパラシリなりを入れるとか
必要ならDACやマイコンおごる時もあるし
>>944 SRAMなら数秒間電源OFFしても
データが残ってるのを経験したことがある。
データ保持するだけならコンデンサに残ってる程度で賄えてしまうようだ
書いてスグに読めば読めるのは、1チップ系のマイコンでROM内蔵とかでないと
プログラムを外付けメモリから実行してる場合はそっちがバスに残ってしまうね。
>>938 製造ラインテストかどうかでも違ってくるよ。
メモリの場合は
>>941 の方法だと、アドレスデコーダの上位が死んでたりアドレスバスがショートや切れてても
正常と判定されてしまうから、
やはり疑似乱数を順に全て書いてから先頭から同じ疑似乱数を発生させながら比較してゆくべきだ。
それから、初めてのボードテストだと、
書き換え可能ROMの場合は 他のライターでこの疑似乱数を書いておいて
それと比較するのを最初にやっておかないと、アドレス・データバスの配線ミスが発見出来ない。
RAMの場合は、ミスってても問題ないけどね。
ポートの場合も、初めてのボードテストだと
出したのを読むだけじゃ、ビット位置のミスが発見出来ない。
1本づつ試験することが一度は必要だ。
それと1本づつ試験する時に、そのポート1本だけ見てたんじゃダメだ。ショートの可能性もあるから、
関係ないポートも全部確認しなくちゃいけない。
>>956 何も繋がってないのは分かるよ
その上で、pull-up(down)しないでHi-Zのままだからだろってことなんだが
別にpull-upしろと云ってるわけじゃないよ
>>958 プルアップしても、バスの寄生容量が数10Pあると書いて直後の読み返しなら読めてしまうね。
よめるよめる
入力ポートをプルアップせずにオープンにしておくと壊れるよ。
プルアップで確実に1が読めることを保障させようとしたら よっぽど抵抗値を小さくしないと駄目だよな そうすると電源にもバスドライバにも負担かかってしょうがない あ、CPUのクロック充分遅くすればOKだw
>>961 今時のCMOSICは保護ダイオードでしっかり守られてるから、アンテナになりそうなものつないでなければそういう事はないよ。
バスに入れるなら、プルアップというより反射を抑える為のターミネータ抵抗だね。 バスが速いと、上下に入れたくならない?
ハード屋さん多いね、ここ
いや、ハード屋とやりあう為に知識を仕入れたソフト屋ですが?
食うか食われるかですな(w
968 :
デフォルトの名無しさん :04/03/10 23:13
俺はハード屋とソフト屋の確執は知らない。 なぜなら、俺はハードもソフトもやるから。 と言っても、デジタル回路だけだから、FPGAの外のことだと、文句つけまくりなんだけどねw
969 :
デフォルトの名無しさん :04/03/10 23:29
びみょーに知ったか君も混じる今日この頃
>>963 だからといって、プルアップ抵抗付けなくて良いことはない。
消費電流は増えるし、ノイズに弱くなる。
・・・ていうか、本気じゃないよね?
971 :
デフォルトの名無しさん :04/03/11 05:12
>>970 プルアップしないと消費電流も増えるのですか?
電池で動かすような場合は、気になるよね。プルアップしないと電流が読めない。
>>961 の壊れると
>>970 とは大分違うと思うが?
>>971 昔 CMOSICは電源電圧範囲が広かったんだ。
だから中間の電圧になると上のFETと下のFETの両方がONして貫通電流が大きく流れるのを防げなかった。
何mAも流れたんだよ。
今は3.3Vとかにほぼ固定だから、中間電圧になってもそう大きな貫通電流は流れない。
でも、CMOSのメリットはクロックを止めたら殆ど電流が流れない事だから、その場合には問題。
もっとも、そういう電池駆動をするような場合は、殆ど1チップマイコンが使われるから、
入力専用ポートは割り込みポートとか以外には、殆どないよね。
>>973 入力ピンをプルアップしなくてもすぐには壊れないけど、
消費電流が増えたりして発覚するということ。
そのままにしておけばストレスがかかるし、ノイズや静電気がかかると壊れるよ。
ていうか、空き入力ポートをプルアップ処理するのは基本じゃん。
最近のCPUはプルアップ抵抗内蔵のものがあるから、無くても大丈夫だと思ってないか?
・・・みんな、ネタだよね。
>>974 ネタに決まってるだろ。気付いてないのはお前だけ
ふつうプルダウンしないか?
>>974 だからさ、10cmもアンテナを付ければそりゃ壊れる事もあるけど
そのままにしてたらノイズや静電気で壊れるというのはどういう理屈だ?
昔なら
>>975 のリンク先に書いてある事も真実だった。
しかし、現在の一チップマイコンやLSIでは正しくない。
1、中間電位で素子の内部貫通電流が流れる
−>しかし、最近の3.3V系では壊れる程は流れない
2、入力端子は、極めてハイインピーダンスなので、高圧になる
−>保護ダイオードが入っているので電源±0.6V以上ではローインピータンスになる
昔の4000系のCMOS-ICでさえ、入力をOPENにしても5V電源なら壊れはしなかった。
それどころか、インピータンスが高い事を利用して、アンテナ付けてセンサー代わりに使ったほどだ。
それでも壊れはしなかったよ。(もちろん直列抵抗は入れてたけどね)
ノイズや静電気で壊れる程の電圧がかかったら、それを保護出来るプルアップ抵抗はいくらだと?
結局保護する為にならプルアップするより、電源とショートしてしまえよと。