1 :
デフォルトの名無しさん :
2007/10/03(水) 16:46:14
組み込みの皆さん、 Javaが貴方たちを救います。 Javaを信じてください。
例え俺が信じたくても、周りが許さない。 もっとも、俺は信じないがな。
4 :
デフォルトの名無しさん :2007/10/03(水) 21:31:16
前スレみてて思った。 前スレが落ちた後で、H8と M16が同じ会社になってしまったんだな
スレタイに惹かれた。
マスコットキャラみたいなのに魅力を感じられない。 もっと萌え系でおk
軽さん乙
を!くみこスレ復活ですか。俺もこっちのがしゃべりやすそう。
キタ━━━(゚∀゚)━━━!!!!
10 :
デフォルトの名無しさん :2007/10/04(木) 09:38:14
みんな大好きシリアルポート
キライだよ。
YouTube を自作のなんかに組み込みたいの? それにはFlash をサポートしないといけないよ。 それとも、単に自分のページからリンクしたいの?
くみこみ機器って必ずウェブブラウザ持ってないといけないの? ま、必ずWinを入れるよりはマシか。
16 :
デフォルトの名無しさん :2007/10/04(木) 14:58:25
おまんこの組込予定はありますか?
>>14 つまり、このフォームに自動送信させれば・・・
<form class="edit" method="post" action="
http://rimo.tv/en/ch/create ">
<h3>Title and Genre</h3>
<input type="text" name="title" value="" >
<input type="text" name="genre" value="9" >
About this channel or request for adding channels
<textarea name="description" rows="2" ></textarea>
<h3>Related Keywords</h3>
Genre, Artist or Series name
<input type="text" name="keywords[]" value="" >
<input type="text" name="keywords[]" value="" >
<input type="text" name="keywords[]" value="" >
<input type="text" name="keywords[]" value="" >
<input type="text" name="keywords[]" value="" >
<h3>Video List</h3>
<textarea name="text" rows="10" style="width:100%;"></textarea>
<input type="submit" value="Create a new channel" class="submit_button_l">
</form>
続けるんじゃねーっての。 組み込み機器の開発のスレだっちゅーに。
組み込みの話だからいーじゃん?
本気で言ってるのか? 制御系のタイトルでは、現代制御理論がどうとかと騒ぎ このタイトルでは、プログラムを組み込む話で騒ぐつもりか?
VIP育ちのゆとらーの侵攻が専門板にとどめをさすのか?
本気?ばーかじゃねーの?何に本気だっつーの?
windowsの関数電卓で eの値を表示させるには (直接手で2.71828...と入れるのはなしで) どんな手順が簡単でしょうか?
携帯とか電子レンジみたいな組込み機器の場合だと Webクライアントを入れておく必要が結構あるけどね。 たいていの場合Webサーバの方をほしがられるよな。
このスレTcl/Tkのスレとまぎらわしい・・・
>>32 それも直接手で2.71828...と入れるのと同じなのでなしです
[1] [INV] [ln] の3タッチはどう?
38 :
デフォルトの名無しさん :2007/10/05(金) 07:44:05
オープン>PC 汎用>メインフレーム
LEDチカチカは制御系なら俺に聞いてもいいぜ(10)スレで
このスレなつかしーw
>>1 の、北斗の拳のケンシロウみたいにこっち指差してる奴が「くみこ」なのか?
>>44 初代スレの
>>1 が くみこ だったけど
あっという間に消えて、2代目スレからは制御系スレに引越しちまった
実際、住人も被ってたしな
46 :
デフォルトの名無しさん :2007/10/12(金) 21:14:55
なつかし
くいこみではないのねすまそ
この板では自動改札の話題はないんですね それとも生々しすぎて語れないとか
そんなレベルの話題は制御系スレでやれよ 低レベルな奴だな
まあ低レベルな所で頑張る人の為のスレだから。 ただプログラム板にあるんでプログラミングの話題が主になるでしょう。 個人で買えるというと PIC や H8/M16 あたりがメインかもね。
LEDチカチカ野郎は来るなって
はじめて書き込みをさせていただきます。 内容がこちらで間違っていればすみません。 VxWorksでの質問なのですが 例えばpingを応答待ち5秒、リトライ回数5回を行いたいのですが、 タスク内でpingを行うと すぐに応答が返ってきたとしても、多少なりともタスクが止まると思っているのですが 合っていますでしょうか? 普通は別タスクを興すものなのでしょうか? なにか良い方法ございましたらご教授お願いいたします。
LEDチカチカ野郎は来るなって
Lチカ
あるクロスリンカの入力制御文のコメント行: ; XXX-9999 link 配置制御文 リンクリストに表示されるそのコピーが、 ; XXX-9999 link 配置制御*! に、なってた。エディタで見て「*!」だがコピペしたら「・」に変わった。 「文」のコードは95B6なのがなぜか9521に化けて、siftJISで9521は無いから変な文字に なったらしいが、なんでこんなふつうの文字が化けるのか不思議。
>>58 文字コードがあっていないか対応していない上に
びっくりに意味があったとかそんなとこだろう
>>61 そうなのか。つか、もう全部コメント英語で書けよ
日本語米がどーとかなんて、今やってることの本質じゃないだろに
63 :
58 :2007/10/21(日) 05:46:40
>>61 いや、それの続きではないです。NECの78xxxx系の8bitのクロスいじってて出ました。
本質のとこはふつうにできてます。ちょっとお茶目なリンカだなと思って(w
64 :
デフォルトの名無しさん :2007/10/22(月) 01:14:51
【派遣ネガティブ根性チェック】 3つ以上、チェックがつけばアナタの性格はひん曲がっており、 ネガティブ負け組派遣人生を歩んでいます。 □派遣先正社員の作った糞開発ツールはたとえ腐っててもマンセーして使う □派遣先の人事権のある社員の意見はたとえ間違っていてもマンセーする □仕様とは正社員から口伝されるものだ □耳で聞いた仕様を正確に覚えていないのは自分の責任だ □昼食は必ず派遣先の社員と行くべきだ □自分の仕事で問題が発生しても解決するのは派遣の仕事ではない □自社で仕事なんてできるわけがない □派遣労働の問題点の話題が出ると感情剥き出しにして反論する □派遣労働の問題を指摘する人は嫌いだ □派遣先には仕事だけでなくプライベートについてもグイグイ引っ張って欲しい □奢ってくれる派遣先正社員を尊敬する □自分の月額金額を知らないのは当然だ、単金を聞いてはいけない □派遣先正社員より自分の生涯収入が低いのは当然だ □チビは派遣先にかわいがってもらいやすいから派遣には有利だ
コピペ君って馬鹿だな、まで読んだ。
66 :
デフォルトの名無しさん :2007/10/24(水) 23:42:22
そんなばながー
WDTを一度起動したら、ソフトでは止められない(=カウント停止ができない)という石を 使っちゃったんです。で、WDTはhaltを解除しないとも書いてある。アプリはhaltすることを 要求してる。これ、基本的に石の選定を間違った、ってことですよね?
自分でリセットかければWDTも止まるんじゃないの?
リセットじゃhaltしないですぐリセットから走っちゃう。割り込みや通信などが無いときは haltしててね、っていう仕様なんです。(noiseフルな環境で動くので)
じゃWDTでhaltが解除されないで正解じゃないの? haltしてる間にWDTでリセットされたら困るでしょ?
WDTが生かせないと暴走したときの回復手段が無いんです。外部から電源オンしかない。 WDTをソフトで止められる石ならhaltするとき止めてからhaltするけど。
LEDチカチカ野郎は来るなって
そんな石はないと思うなw 仕様書の読み間違いじゃないの?
μPD784038 っていうシリーズ。 12.4.2 注意事項 >(3)RUNビットは,いったんセット(1)するとソフトウエアではリセット(0)できません。 だそうです。
WDTとhaltを両立させようとしてるのが間違ってるような?
そんな石あるんだ。 まあ確かに暴走コードがWDT止めたら困るわけで、そう考えれば合理性はあるけど。 なら対策としては、WDT使うのやめて、空いてるタイマがあれば そいつのカウントアップでリセットするようにするぐらいかね
haltさせる前にWDT叩いて、WDTが起動する前にタイマー割り込みで halt解除とかすれば、いいような気がするけど、 WDTの意味が無い?
>>78 だな。
wdt使うならタイマで定期的に復帰させてクリアさせるしかないだろ。
つーか、そうしないと「いざ」というとき動くかどうか分からんだろ
コピペ君って馬鹿だな、まで読んだ。 なんか変なこと言ってる人がいるけど、HALT後タイマー(というか割り込み) なんて使えるの? それってHALTしてないってことで、語義矛盾じゃんw
HALTして割り込みで再開ってのは省電力化でよくある手法
83 :
75 :2007/10/27(土) 05:10:58
なんかちょっと賑わってて嬉しいな。
>>78 ,79 この石ならそういう手法しかないですよね。
H8なんかだとWDT止めてhaltするようにしましたけど。
>>81 ,82 今回は電力ではなくて、noiseが理由でした。石が5Vで動いてるのに、10cm位近く、
同じ箱の中で4KVの接/断がバタバタ・・・ 石もバスアクセスの度にノイズ出す。 もうね・・・
>>82 HALTのときってDRAMのリフレッシュは行われますか?
>>83 だからそれならそもそもWDT使うのやめて、
通常のタイマ使ってWDTと同じことするようにすればすべて解決じゃん。
HOLTする前に一度リセットさせてWDTを解除すればいいんじゃないの?
>>88 だとしたら実務経験が実に浅そうだな。彼は。
大丈夫だよ ここでの悔しさをバネにして頑張ってくれるさ
FATか…めんどくせ…
93 :
デフォルトの名無しさん :2007/11/19(月) 13:27:35
EEPROMにFFを書いた場合寿命には影響しないのでしょうか?
メーカーに聞けばいいじゃん
フラッシュ型だとページ消去でFFになっていて、書き込みは0を書き込めるだけなんだけどな
玉コロ式マウスを掃除していて気になったことです。縦と横方向のローラーは判るのですが、 もう一つ、斜めの位置にローラーが付いています。これって何してるんでしょう?
単に支えてるんじゃないの?
支えているっつーか、押し付けてるのね。
99 :
96 :2007/11/20(火) 06:11:12
あ〜、玉の重さだけじゃ十分ではないからですね。納得。 じゃ、そのローラーは掃除不要ですね
EEPROMも、原理的には1→0にするのが書き込みだと理解してます。 ページ毎に確定待ちの時間があるのが、ページ消去してから書き込む時間だと思います。 アプリで、サイクリックに使って記憶を残すものを書いていて、最新以外はFFを書いて消して いるのですが、保証回数というのはページ消去の回数ではないかとおもいます。そうすると FFを書いても書き込み回数には含まれるのか、全部FFのページを消去したときは実質NOPに なるのではないか?と言う気もするし。 flashROMでFFだと消去が早いかどうか知りませんか?
>>99 そのローラーの汚れが再付着というのは考えないのね
>>100 ページ消去の回数に限界があるので
FFにFFを書くときにいちいち消去するコードは氏ね
ソニータイマーの実装を研究してるんだよ。
>>100 ええと、フラッシュタイプって事はページ単位消去だよね?
シリアルEE-PROMならバイト単位だけどさ、
ページ単位消去なら 消去したらFFになるんで、全部FFの場合は書き込まなくていい
書き込みは0しか書き込めないから、 1を書いて2を書いたら結果は0にな
だから書き込み回数=消去回数になる
シリアルEEPROMはバイト単位やってるんで、FFを書いても消してるのだろうから回数になるんだろうと思うよ
賢い回路が付いてて 現在FFでさらにFF書こうとしたら何もしないのかもしれないけど
そうかどうかはBUSY端子で確認してみたら?
ご丁寧にありがとうございます。BUSY端子の立っている時間の違いで判別できそうですね。 たしかにシリアルEEPROMではあるバイトに1を書いて2を書いてもいいから、バイト毎に 消してるみたいですね。あれ?EEPROMでもページ(32か64バイト)があって、これをまたいで 書いてはだめよとか書かれてますけど、これはどういうことなのでしょう?
シリアルEEPROMにもバングがあって、 そのバンク内なら一度に書き換えられる。つまり書き込み時間の短縮になる。 その弊害として、バンクを跨ぐ連続書き込みが出来ない。 という事は、 たぶん1バイト書き込みでも、実際はバンク単位に書き換えているのだろう。 内部的にはバンク内の内容をRAMに読み出してから消して、再度書き込んでるのだと思われる。
>内部的にはバンク内の内容をRAMに読み出してから消して、再度書き込んでるのだと思われる。 これができるなら、(0xffで)消す必要がないと判断したら消さないんじゃないだろか。
やってるのもあるだろうね。 BUSYで確認してみたらいいじゃない
109 :
105 :2007/11/21(水) 16:02:06
ご意見ありがとうございます。BUSYの時間を計って違いを見ると面白そうですね。 でも製品では5mSと、決められた時間待つようにしてるので、今回は遅かったようです。 次回のデバックのときやってみようとおもいます。
>>109 え、時間見たいだけならパルス幅みてみりゃいいじゃん
111 :
105 :2007/11/22(木) 06:35:14
その手があったか。ハード屋さんに見てもらえばいいんだ。
< `∀´> パルス幅くらい自分で見るニダ
-‐''''"´ ̄``ヽ、 ____ / _ ヽ //´ __,,>、 /  ̄ ̄ { /::/ / ̄:::::::::::::::\ l _ィニニア二二二ニヽ、j._ /::::l/::::::::::::::::::::::::::::::::l | 0Lj/-‐-レノ ノ_ヽ:::`ヽ l:::::::::::/l/lノノ/_イ:::::l レ:r、/ イ゚テ ピト`|::| l:::::::::/ rtテ、 .ィtq l::::::| l:lヘ '" ,j '"/ノ |::lヘ!j ´ ,j !;:::/ ヽヽ、 r‐-, /' レリー 、 ,...., lノ/ lヽ、  ̄ / `ヽ、lヽ 、  ̄ /´ _,r┴‐-`v´-‐j-、__ , -‐-、_r┴─'ー‐チト / ̄/:.:.:.:| ̄ ̄`T ̄´|:.:.:.:l´ `ヽ / ヽ ̄`ー-‐'´`''''⌒ヽ / ,':.:.:.:.:.l l l:.:.:.l \ _r‐、-、-、r, 、 ', |:.:.:.:.:.:.! ! !:.:.l ,. -‐ゝ/// 〉 〉 〉 〉 〉 ! ', l:.:.:.:.:.:.l | l:.:.:l / 人〈〈〈〈 ' ' ' /っ l l
115 :
105 :2007/11/26(月) 06:31:49
EEPのデータシート読み直したら、RDYは端子に出なくて、ステータスレジスタを読んで知る 仕様でした。今はライトの後の確定待ちに標準の数ミリwaitしてるだけなんですが、ちょっと 安全ではないかな、という気がしてます。 RDYbitを見て、書き込み中が消えるまで待つべきだったかな。
昨日久しぶりに本屋行ったらレイアウト変更されてて くみこ関連書籍専用コーナーが拡張されてた そんなに需要増えてるのはなぜ?
PICのおかげで趣味の人も増えてるんじゃないかな
やっぱ画像重要(←それ拡張子の.PIC)
119 :
115 :2007/11/28(水) 05:24:04
RDYbitを見る手法にしても動作は同じでした。 循環書込のアドレス計算を間違えて、別の用途の場所を侵略してました。
すいませんが組み込みでLinux使います。 クロスコンパイルのバージョンを指定されたんだけど、 どこで落とせばいいのやら… 初心者ですいません。 GCC Version 4.0.4 Crosscompiler: mipsel-linux-uclibc-gcc Linker:mipsel-linux-uclibc-g++ これだけもらったんですが、これだけで分かるんですかー??
わあ。ありがとう!くれくれ君ですいませんでした! がんばります!
124 :
デフォルトの名無しさん :2007/12/03(月) 12:16:03
H8/2378で、queがずれる現象に悩んでいます。複数の割込レベルからcall quewrit(&qcb,evt) quewrit(qcbp,evt)では、 set_imask_ccr((_UBYTE)1); // 割込み禁止必要 qcbp->bufp[qcbp->wpt] = evt; qcbp->cnt += 1; qcbp->wpt =(char)((qcbp->wpt+1)&qcbp->mask); set_imask_ccr((_UBYTE)0); // 割込み許可 07.11.14 とやってます。 取り出しはmainloopで、 c = qcbp->bufp[rp]; set_imask_ccr((_UBYTE)1); /* for ルネサスc */ qcbp->cnt -= 1; set_imask_ccr((_UBYTE)0); /* for ルネサスc */ qcbp->rp=(qcbp->rp+1)&mask; とやってます。 このrpとwpが、中身0のときたまにずれてるんです。
125 :
つづき :2007/12/03(月) 12:18:14
2378は、Ibitの他にEXRもあるのですが、Ibitを立てれば全部の割込禁止になりますよね? 両方maskするべきとすると、どちらが先、とかありますか?
126 :
sage :2007/12/03(月) 13:27:03
>>124 そりゃずれて至極当然というか当たり前というか。。
128 :
125 :2007/12/03(月) 14:33:23
割込モード2を使っているときは、CCRのIビットではなくEXRのI2〜I0のビットによって 割込が制御される、と書かれていました。ちょっと下位の石でIビットで制御してた奴を コピペしたので、そこを誤解していたからのようです。 set_imask_ccr()の替わりに、or_exr(7)で禁止、and_exr(0)で許可とするのが正解みたい。
くみこねえさまならもっとしんみになっておしえてくれるってしんじてたのに〜(TT
コピペ失敗君がかわいそうで
132 :
125 :2007/12/03(月) 17:57:13
>>129 ここにコピペするのはrpとかwpとかスペルはいいかげんに書いてます。
手法上まずい点があればご指摘ください。
割り込みレベルの考慮をした方がいいのでは?
134 :
125 :2007/12/05(水) 05:31:16
使う割り込み同士の優先度を考慮して3,4,5を割り振ってます。 全部禁止にしたいときEXRを7にし、全部許可するとき0にしてます。
割り込みの中でも0に戻してもいいの?大丈夫だと思ってるならいいんだけど。
136 :
125 :2007/12/05(水) 14:21:06
そうか(*o*) EXRのmaskレベルは受け付けた割り込みのレベルに書き換えられる、という所を 読み落としてました。割り込みの最後だけで使うならいいが、一般性があるように書くためには 7にする前にそのときのEXRのレベルを保存して、あとでその値に復元しないといけませんね。 ありがとうございます。これでもうちょい安全になります。
137 :
デフォルトの名無しさん :2008/01/07(月) 16:29:16
>>137 悪い、コーディングの仕方が分からないということか?
>>137 DBCRへのアクセスの仕方はデータシート見るしかないじゃないかな?
>>137 俺が弄ってるPPCはFreescale系ばっかりだが
DBCRてSPRだろ?
だったら
1)mfsprで現在値をGPRに読み出しておいて
2)読み出したGPRの値を変更してから
3)mtsprでGPRの値を上書きする
のが常套手段、まぁ絶対の自信があるなら
GPRに値をセットしていきなり上書きしても違反では無い
あと40x(PowerPC1.10)系のはずだから、こっちだろ
232 #define SPRN_DBCR0 0x3F2 /* Debug Control Register 0 */
こっちはFreescale BookEのconfig依存で括られてるじゃん
213 #define SPRN_DBCR0 0x134 /* Debug Control Register 0 */
そもそも、なんの意図でConfigureが何処を有効にするかも無視して、
U-bootとLinux Kernelのソースを比較してるんだ?
(U-bootも書き方が大同小異で同じだけど)
この手のことなら、しっかりドキュメント読んだ方が早いだろ。
PowerPCならMIPSやARMと違ってチップに載せたベンダで
怪しげな拡張されてるってこともないし、ドキュメントはしっかり公開されてるだろ。
つーか、読もうともしないで弄るな
142 :
デフォルトの名無しさん :2008/01/08(火) 07:05:55
sprintfの%-d ってのは、K&Rの説明だと左に揃える、となっているのですが、正の値のときに +は付きませんね? 10を+10にするには自分で'+'をかぶせなきゃだめ?
%+d
144 :
137 :2008/01/08(火) 10:10:24
レスありがとうございます そうでした。「尋ねる前に読め」と教えられたはずなのに・・・未熟でした。 精進しますっ ありがとうございました>V<
145 :
142 :2008/01/08(火) 10:58:28
>>143 ありがとうございます。+なんてありなんですね。K&Rには載ってないの、グスン。
組み込み関係あったのか
147 :
142 :2008/01/09(水) 14:57:28
3MHzの8085に組み込むんです。私はLSIC-85拾って来れたからいいけど、前の人は全ASM(w
拾ってこれた...て ちゃんと買わないで製品に組み込むコードの生成に使っていいんだっけ?
149 :
デフォルトの名無しさん :2008/01/09(水) 17:47:42
あ、そんな怪しげなとこから拾ってきた訳じゃないです。 お客様のLIBにあったから、 「これ使っていいでしょ♪」 と言って貰ってきました。
>>148 が言ってるのはライセンス的に、自分のところで買ったものでないと
まずいんじゃないかということだと思うのだが。
使用許諾を取ってるんだから問題は無いだろう
使用許諾ってこの場合エルエスアイジャパンから取らないといけないんじゃ?
153 :
149 :2008/01/11(金) 09:25:34
お客様はLSIジャパンから買ってるし、お客様の著作を書くのにそれを使うのだから、 私が使用許諾を取ることはないと思います。 私の著作を(例えばフリーソフトとか)書くのでしたら、私がLSIジャパンからパッケージを 買うべきですよね?
154 :
デフォルトの名無しさん :2008/01/11(金) 10:51:21
組み込みの場合、CPUが特殊だったりして クロスコンパイラはデバッガやらプローブと一緒に提供されることが 多いからそういう感覚になるのかもね。 まあ汎用のでも経費として出してもらうこともあるが。
LSI-Cの使用許諾を読んだことは無いから正確なところはわからんが、 ソフトウェアの使用許諾って、特定の個人1人または特定のPC1台に縛り付けられるのが普通では? 例えば、1つの製品を開発するためでも、5人の開発者(≒5台のPC)がいれば5ライセンス必要かと・・・
わからないなら言うな
159 :
デフォルトの名無しさん :2008/01/11(金) 13:11:13
今時8085使うやつがいるってことが驚き
ゲームソフトでも売り切ったソフトの場合中古として流通される事を妨げる事は出来ないと最高裁で認定された。 客もそのソフトでデバッグするというような事情があると別だろうけど この場合、2人や2台で同時に使ってる訳じゃないのであれば、 法律的な争いになるとソフトメーカはたぶん不利だろう。
実はそのお客様はちゃんとライセンス数を管理していて、 余ってるライセンスがあることを確認した上で使っていいという返事をした可能性もある
162 :
デフォルトの名無しさん :2008/01/11(金) 14:02:09
買えば終わる話じゃないか
ライセンス数に関係なくソフトの貸借なんて認められてないから
もらって帰るなんて出来ないよ。
>>149 さんが客先に出向いてその場で作業を行うのはOK。
Hが昔、貸借?出きるようなライセンスをやってたような?
今後使わないことを条件に、他人に譲渡してもOKだったり、ダメだったり。 自分の記憶では、昔、EPSONのBASICやDOSはダメ、MicrosoftのQuick CはOKだった。
ゲームソフトのようにコピープロテクトしてるような商品なら いくらライセンスで縛っても中古や譲渡は仕方ないと思うけど 複製し放題のソフトだと、譲渡不可のライセンスは有効じゃないかな ただ最近はID/PASS入れさせたりするのが多いから、そういうのはライセンスで縛れないかもな
167 :
デフォルトの名無しさん :2008/01/13(日) 12:37:41
開発に使ってるOSってなに?2000? ノートの調子が悪いので、新調を考えてるんだけど、MacのVMでWindows起動して やってる人いる?
>>167 開発環境が何に対応してるかによる。
大概は2000かXPだと思うが、Linuxってこともある。
>ノートの調子が悪いので、新調を考えてるんだけど、MacのVMでWindows起動して
>やってる人いる?
IDEって重たいの多いから、VMじゃあんまりやらないと思うけど。
組み込み系の最大手ってどこなんですか?
無理して話題を振らなくてもいいよ
奴隷契約書にサインするバカ経営者がいるから注意した方がいいよ。
大手メーカー側もあるんじゃね? でも、失敗すると、サ●ヨー携帯みたいになるんかなぁ。
モトローラとかどうよ
日立とか三菱とか東芝とかNECとかならどの企業になるんでしょうかね?
>>174 中身別の会社で作っててサン○ーの名前がついてるだけ
ってやつですか??
立川駅周辺に多いよねw
178 :
デフォルトの名無しさん :2008/02/10(日) 06:43:06
EEPROMに循環記憶を書いてるんですけど、Flashみたいに、「書いたら前の所をFFで消す」 以外にいいアイデアありますか?NMIがあれば、「ここを使ってた」 という情報を特定のセクタ に残せるのですが、NMIは搭載されませんでした。
>>178 FFも使うから別の手法がほしいってこと?
「循環記憶」でググってもそれらしい意味が出てこないのですが。。
同じ所を繰り返し使わないように、リングバッファ状にメモリを使いたいのだけど、 電源断を挟んでも状態を継続するうまい方法はないですか、 ということではなかろうか。
182 :
デフォルトの名無しさん :2008/02/10(日) 12:45:33
>>181 別にFROMと同じでいいだろ
ブロックごとで扱うのが嫌でEEPROMにしてるなら、
TLV形式にして、古いデータを無効データのTagにしてきゃ良い
初期化で無効で埋めるのを忘れずに
183 :
178 :2008/02/10(日) 16:04:23
あ、いろいろすいません。FFは「無し」の意味で使います。生だとたいがいFFだから、初期に 無効で埋めるよりはFFで消してゆくほうが楽ですね。これ書いてて思ったんですが、 生でたまにbit化けしてたときのガードを書いてないの思い出しました。
「ここを使ってた」情報をどこかに残せばいいじゃん
>>183 たぶんそこはみんな知ってると思うんだw
わからないのは「循環記憶」と呼ばれる処理の中身
>>181 の言っている通りなら、アクティブなセクタの先頭バイトは
識別用のダミーとして必ず0xFFみたいにすればいいんじゃないのかな。
殺したいときは何もセクタ全部をイレースしなくてもそこに0x00でも書けばよいのでは。
>>184 それを書く前に電源断したら?って話では?
>>186 新しい「ここを使ってた」情報を書く
↓
データを格納
↓
古い「ここを使ってた」情報を消す
でいいんじゃね?
189 :
178 :2008/02/11(月) 05:02:15
>>185 181でだいたい合ってます。生/自分で書いた情報混在で、FFじゃない所を探して
前回の状態を復元します。全体を平均に使うためにリング状に使うことを循環記憶と言いました。
00でなくFFを書いたのは、生と同じにしとけばFFの判定だけですむから。
>>187 の手法で、最新の状態を書いた後に1個前をFFで消しているのが今の手法です。
ここを使ってた、ではなく状態そのものですが。
Flashではセクタを消したらFFになりますが、EEPではFFを書くのも00を書くのもデバイスに
かかる負担は同じなのでしょうかね?何となく、0のbitが少ないほうが確定が早いんじゃ、とか(w
>>188 メモリでリングバッファやる時はバッファそのものとライトポインタ・リードポインタ・滞留数は
別物ですよね。EEP上で同じ事やるとバッファと管理情報の更新に時間差が出るから、
メモリと同じには扱えないと思います。 あとリングバッファとの違いは滞留数=必ず1なので
管理情報もこの場合1個でいいです。
今の手法で何が問題なの? わざわざ別の方法を考える必要はどこにある?
シリアルEEPROMなら、だいたいバンクみたいなのがあるよね。 1バイト毎にも書き換えられるけど、バンク内のたとえば16バイトなら一気に書き換えられるとかさ I2Cインターフェースのなら、だいたい統一されてる で、結局やりたいのは書き換え回数が1万回のもので、 1時間に一回書き換えたら1年で寿命来るけど128箇所に分散したら64万回に出来て 実用的に書き換え回数の制限無しに出来るぞ っていう皆がやってる事だろ? 方法としては、バンクの整数倍のセクター作って 1、順にセクターを使って書いては一つ前のセクターを消す 2、連番フィールドを持たせる(連番の代わりに時計情報でもOK) の2つくらいしかない。 1の場合は起動時に頭からスキャンして1つ見つけたら検索終わり 2の場合は全部をスキャンして最大の連番と最小の連番を探す 最大-最小がフィールド数より大きいなら ラップアラウンドしてるとして最小を採用する
192 :
178 :2008/02/11(月) 16:36:32
>>190 自分が思いついたのが陳腐な手法だったら改善したいと思ったからです。
>>191 2の手法は思いつきませんでした。1のほうがやっぱり簡単ですね。
うちのはバンク64byteで、セクタを16byteで、4回進めたら(次のバンクに移るので)前のバンク
を消す、ってやってるのですが、1.のようにセクタ1個ずつ書いて消してでもデバイスの負担
は同じでしょうか? バンクに対する確定待ちの回数が書き換え回数のことだと思ったので、
こうやったのですが、無駄に複雑にしただけかもしれないですね。
>>192 たぶん一つの1バンク 64byte内の、1バイトでも書き換えたら
中間バッファに64byte読んでから全部消して、
1バイト置き換えて書くという動作になってるだろうと思うよ。
だからこういう使い方でバンクサイズ以下のセクターには意味がないんじゃないの?
>>191 の2のアクセス方法は間違いだった。
連番は2づつ増やして偶数になるようにして LSB=1なら未書き込み。
先頭の連番を Xとしたら、残りの連番からXを引いた結果の
符号付で負数になる直前を採用するというのでいいと思う。
この方法なら、過去のデータに戻れるのと、
消さない分寿命が長くなるかもと期待出来るから、
フィールドが余ってるならこっちがいいと思うよ
194 :
178 :2008/02/15(金) 05:44:13
>たぶん一つの1バンク 64byte内の、1バイトでも書き換えたら
>中間バッファに64byte読んでから全部消して、
>1バイト置き換えて書くという動作になってるだろうと思うよ。
そのことは理解しています。データブックにある 「内部書き込み状態のシーケンスに入る」
というのがそれをやってる時だろうと理解してます。
>>192 で言いたかったのは、「1個書いて1個消す」 手法だと、
あるバンクの書き換え(=消し書き)回数は、(bank=64,1回16byteで)
(write) (write) (write) (write) (次のbankのwrite)
(FFwr) (FFwr) (FFwr) (FFwr) で、次のbankを使うまでに8回消し書きになります。
「4個書いて次のbankに移ったら前のbankを消す」 手法だと、
(write) (write) (write) (write) (次のbankのwrite)
( FFで 64byte write ) で、次のbankを使うまでに5回の消し書きで済みます。
後の手法のほうがいくらかでもデバイスに優しいだろう、ということでした。
ハード屋さんに話したら、「百万回のデバイスなんだから、細かいこと気にスンナ!」でした(w
195 :
デフォルトの名無しさん :2008/03/07(金) 22:48:02
ちょ、これ放置されてんのかよ
>>194 100万回って何回なのか判ってるのかね
毎秒1回書き換えたなら100万秒って11日だぞ
2週間持たないんだぞ
くみこというより木津千里だろ
>>195 幾らなんでも、そこまで考え無しには言わんだろ
書き換えの契機はさほど頻繁には無くて
全面満遍なく使ってくれりゃ十分ってことなんじゃね
考えなしに物を言ってるのはたぶん195の方でしょw
>>195 書き換えのトリガーは人間のキー操作(タイマ予約とか、CH設定とか)と、起動・電源断
です。キー操作は設置時の使い始めぐらいで、後は日に高々10回ぐらい自動で起動・電源断
(RTCに次回の起動時刻を書いて電源断) なので、
>>194 の悪いほうで計算してもだいたい200年ぐらいでした。
その頃には自由の女神は砂漠に埋まってるな
200年くらいじゃ猿が支配するのは無理だろう
でも40年くらい前の装置が今でも平気で使われているんだよな。 この前ベルト式のが動いてるのを見たよ。 あれって昭和のはじめだよな。たぶん。 俺達の作ったものが50年60年先にも、もしかして使われてるかもしれないとは考えておかないとな。
こないだ、DOSアプリ、AX→DOS/Vの移植をした。 まだまだよw
技の1号
工場の動力伝達かなぁ?
昔はモータやらエンジンは高価だったからノコや旋盤やらを上からベルトで駆動してたって奴か? 農機具でエンジンから脱穀機の動力伝達にベルト使ってるの実家でやってたの覚えてはいるけど 今ではコンバインだもんな。
自動車エンジンは今でも動力伝達にベルトを使用してますが何か。
それ駆動軸じゃないし
えーと、どこかに駆動軸限定と言う書き込みはありましたでしょうか。
ファンベルトだろ。
横置きエンジンのファンはほとんど電動だしな
その場合はオルタネータだけを回すからオルタネータベルトって言う罠。
ファンドルネCVTはたしかにベルト駆動だが
>>208 が主張したいのはおおかたオルタネータ駆動だろw
つーか脱線しすぎ!
216 :
デフォルトの名無しさん :2008/03/19(水) 09:13:23
H8/2378で、ルネサスのcコンパイラ使ってます。longのデータがxxxxx6番地で、4の倍数 ではない境界にあっても、石のアーキテクチャ上は大丈夫ですよね? また、このデータを割り込みとメインループ両方から触るのですが、32bitレジスタでLD/ST されるので、タスク側から触るときにも割り込みマスクせず触ってよい、と認識していますが 合ってますか?(16bitレジスタで分けてLD/STされるならマスク要、と考えました)
1、 H8は内部16ビットバスの8bitマイコンだから32bitデータは偶数から始まればよく 32bitデータでも4の倍数である必要はない。 2、 H8/500系ならメモリへの加算などが出来るのですが H8/300系では 演算は基本的にレジスタです ですから1ビットのフラグ処理や TASをアセンブラから使う場合を除いて 割り込み側で見る値をメイン側で書き換えるなら割り込み禁止が必要です。
書き間違えた。 ○割り込み側でも書く値をメイン側で書き換えるなら割り込み禁止が必要です。 両方から触るというのを双方から書き換えると読んだので、割り込み禁止が必要と書きました。 たとえばメイン側で cnt++; するのを割り込み側で見るだけの場合は、割り込み禁止する必要はありません。 cnt++は、 偶数番地から始まっていれば32bitレジスタにロードされ、 inc命令を実行してから STされます。 LD/STはそれぞれ2回のメモリアクセスになりますが、 その実行中に割り込めません。
219 :
デフォルトの名無しさん :2008/03/19(水) 10:41:03
HEWって未だにSTL未対応なんでしょうか? 文法的には、テンプレートとネームスペース未対応?
220 :
デフォルトの名無しさん :2008/03/19(水) 11:04:00
>>218 ありがとうございます。割り込み側では++/--するが、メイン側では = n; しかやらない
というケースでは割り込みマスク要りませんよね。
221 :
デフォルトの名無しさん :2008/03/20(木) 17:09:59
このスレの住人なら知っていますね、あの糞開発ツールのことを ・自分のプログラムのバグなのかコンパイラのバグなのかわからない ・他の仕事に応用できない糞開発ツールの独自世界を必死に学習している ・テキストエディタで書いたほうが効率的なのに糞UIツールを懸命に使っている ・糞開発ツールを批判すると「性格が悪いから糞ツールを批判するんだ」と言われる 糞だけど、政治的な理由で無理やり使わされているんですよね。 もう、あんな厨の作った糞ツールを我慢して使うのはやめましょう。 ・糞開発ツールを部下に押し付ける上司の命令は無視しましょう。 上司は糞開発ツールが使われる実績を作ることであの会社のごきげんをとっているのです。 ・あの糞開発ツール提供会社には「おたくの糞開発ツールは話にならない」と突き放しましょう。 バグレポートなどしてはいけません。改善要求などもってのほかです。 あの会社はあなたたちのことをテスター/モルモットとしか思っていません。 ・あの会議で「糞開発ツールを使ったら生産性がxx%アップしました」 なんて話が出たら力強く机を叩き、会議室を出ましょう。 あの人たちは糞開発ツールをマンセーすることで立場を確保しているのです。 糞な開発ツールを糞だと言える、そんな当たり前の環境をみんなの力で取り戻しましょう。
コピペ君って馬鹿だな、まで読んだ。
コピペ警備員はえー
224 :
デフォルトの名無しさん :2008/03/29(土) 04:44:49
HD64180のタイマについて質問です。タイマリロードレジスタ:CH0=0Eh,0Fh CH1=16h,17hで、 64180のpdfではどちらがLow/Highか明記されていませんが、Z80180のpdfを見ると、 偶数番地がLow、奇数番地がHigh と理解してよいようです。 ある機器の内部I/O初期化の所 ; ;TIMER0=10MS LD A,000H OUT0 (0EH),A ; タイマーリロードレジスターチャネル 0 OUT0 (0CH),A ; タイマーデータレジスター チャネル 0L /20 LD A,0CH ; 12288KHZ/20=614400 /3072=200Hz:5ms OUT0 (0FH),A ; タイマーリロードレジスターチャネル 0 OUT0 (0DH),A ; タイマーデータレジスター チャネル 0H /20 ; ;TIMER1=120US FOR BUZZER LD A,025H ;/37 12288KHZ/2500H=1297Hz OUT0 (16H),A ; タイマーリロードレジスターチャネル 1L OUT0 (14H),A ; タイマーデータレジスター チャネル 1 /20 LD A,00H OUT0 (17H),A ; タイマーリロードレジスターチャネル 1H OUT0 (15H),A ; タイマーデータレジスター チャネル 1 /20 このように書かれていました。 CH0のコメントからはCH0=0C00hで分周、と読めます。 CH1のコメントに2500hで分周と書いてありますが、Low側に25h、High側に00hを書いています。 ブザー音のピを作る値なのですが、/20無しで12.288MHz/2500h=1297Hzってのも??です。 これ、動いている機器のコードなんですけど、自分の目が信じられなくて聞いてみました。 私がどこか誤読してるのか? pdfにウソがあって、CH1は偶数番地がHigh-Byteなのか?
コメントが間違っているんじゃないのかな 12.288E6/($25)/20/2 で 8.3 KHz 出力じゃないの?
226 :
224 :2008/03/29(土) 16:30:36
8KHzじゃピの音には聞こえないので、それは無いですね。64180のタイマはΦ÷20しかないし。 分周比の式はΦ/20/リロードレジスタなんですよね。 このシステムも、Φ=12.288MHzなんですけど、 どこかで半分になって6.144をベースにしてるみたいだし、ホントワカランorz
8kHzてふつーに聴けるでしょ?
228 :
224 :2008/03/30(日) 05:35:39
計算し直してみました。レジスタの設定値信じるなら、8KHzしかありえないですね。 私が作った機器だとタッチトーンは3KHz前後が多かったので、思いこみがあったようです。 水晶が12MHzで、64180の中で半分になると理解すればよさそうですね。 CH0のほうも、コメントは5mSになってますが、インターバル処理のほうは10mSとコメント されていました。 12.288MHzの石が生産中止になり、12.28MHzのものしかなくなるのだそうで、その影響を 調べてるとこなんです。uartの信号はあまり長いフレームでなければ(80キャラ以下)いけそう。 ソフトタイマが0.7%遅れるのは許容できなそうですよね。100mS毎とか1秒毎とかの処理が いっぱいあるし。全体の処理もぎゅう詰めなので、CPUパワーが0.7%落ちただけで機能不全 を起こす処理が出そうで怖いのなんの・・・
>>228 ポートに出力させて、DSOで見ればいいじゃん
そうですね。空きポートに1か0を書くコードが残っているので、過去にもそうやって確認した ことがあったようです。DSOが何か判りませんが、オシロみたいなもんですか?
HD64180の資料なんてどっかにしまいこんでしまったけど TOUTをトグルで使ってるのか、割り込みかけてソフトでどっかのピンをトグルさせてるのか どっちにしても 1/2は出力段階でされる。 だから、もしTimerの入力クロック段階で1/2されてるなら 4KHzって事になるぞ
>>232 トグルで1/2になるのを忘れていました。4KHzならちょい高めだが聞こえますね。
ただC4dip付近のトーンになるのが私的にはイクナイですね。
確かに8KHzあたりが聞き取り難くなってる人はいるから8KHzは使わないだろな 4KHz以下でないとね
235 :
デフォルトの名無しさん :2008/04/02(水) 23:13:24
ある一定の時間ループを回し続けたいんですが どんな方法があるんけ? GW中の自由課題でLEDを光らせたいんです。
while(!TimeOut){}
組み込み系をかじりたいのですが、雑誌InterFaceの付録に付いてくるような 基盤はどこで買えるのでしょうか? 予算の関係もあり、出来ればICEとか大がかりな装置は不要な物がいいのですが。 よろしくお願いします
>>235 自分はどうやって計ってるんだ?
同じこと汁ヨロシ
>>235 細かいことを言い出すときりがなくなるんだけど
CPU のクロックが10MHzから100MHz程度までの場合
1. 数マイクロ秒程度ならCPUのパイプラインのストール時間まで含めて
インストラクションのクロック数を求めて空ループ回る
2. それ以上10ミリ秒未満なら適当なハードウェアタイマの割り込みに頼る
3. それより長い場合OSに頼る
ってのが定石的な手法だと思われる
242 :
デフォルトの名無しさん :2008/04/03(木) 02:25:01
243 :
237 :2008/04/03(木) 07:36:33
サンクス、出勤中なんで見れないが14時間後くらいには帰宅出来ると思うので 後でゆっくりリンク先見てみます(´ω`)
MCUのメーカーが直に評価ボード出してるケースも多いんじゃない?
あの、組み込みってどうやって勉強すればいいんでしょうか。 今の会社で組み込みやらされそうなんですが、本を読んでも具体的に分からない。 割り込みとかスタートアップルーチンとか意味はわかるんだけど、いまいち内容がつかめない。 それと組み込みはCが主流らしいのですがC++も勉強したほうがいいんですか? Cは一通り理解していて、C++はかじった程度なんですが・・・。
247 :
デフォルトの名無しさん :2008/04/03(木) 23:24:48
とりあえず教育用のキットを買ってくるんだ
とりあえず俺に授業料の前納汁w
>>246 うちの会社に発注しませんか?
あと、子会社で組込み初心者向けセミナーやってまっせ。
ぼったくるの?
非常にリーズナブル、良心的価格で教えますよ
幼稚園児レベルの教育が受けられて幸せ?
幼稚園入園前レベルには。
ていうかセミナーだけでかなり絞れるな 絞らないけど
勢いで行ける世界& 自己確立の奥行きがないとな
257 :
デフォルトの名無しさん :2008/05/11(日) 04:21:51
振動子と発振器ってどう違うんですか? 12.688MHzの水晶が製造中止になって、13MHz*ぐらい*のに変わるのだが、uartは ずれないかな? とか ダイナミックループでタイミング取る処理ないかな? とか聞いたことがあるので。
>>257 振動子: 水晶とか表面波フィルタ素子に電極をつけたもの
高精度の発振を起こすときに使用する受動素子
発振器: 持続したほぼ一定の周波数の交流を作る回路またはモジュール
振動子は単体で発振することはできない
コンピュータ関連で発振器と言う場合, 水晶振動子もしくは表面波フィルタ素子
を使用した発信回路を小型のパッケージに入れたものをさす場合が多い
260 :
257 :2008/05/11(日) 15:36:21
>>259 ありがとう、それで少し想像がつきました。たぶん水晶が高いので、水晶振動子に
よらない発信回路を採用したが、水晶ほど正確なHzは出せない、ということなのでしょうね。
そういう発振器はどんな原理のものなのでしょうか?
>>260 > たぶん水晶が高いので、水晶振動子によらない発信回路
いや、いくらなんでもそれはないと思うぞ…
100ppm 程度の水晶入った発信器なんて安いし…
表面波フィルタ使った奴だとさらに安いし…
今時、水晶とか表面波フィルタなんて周波数の設定思いの
ままだし…
ちょっとした回路あれば周波数なんて好きに合成できるし…
出荷用の調整とか考えたら、コイルとコンデンサと抵抗を
使った発振回路の方がはるかに割高
262 :
257 :2008/05/11(日) 17:38:59
資料が見つかりました。12.288MHz-->12.3MHzの代品 でした。 現代の素子のほうが正確 なら解るけど、なんでアバウトになるの? ってお客に聞いたら、何とか・・・って説明もらった のですが詳細は忘れてしまいました。量産用の基板だから一定のクロックを付けるので、 調整の効くようなクロックは付けないとおもいます。
>>262 別になんでもいいんじゃない?なにか問題?
UARTなら、言ったとおりbps次第
1200bpsならぜんぜん関係ないけど、5Mbpsなら大問題じゃね?
いわゆるセラロックにしたんでしょ。 水晶振動子はバラ売りで100円以上〜400円くらいする セラロックは20円〜40円
265 :
257 :2008/05/12(月) 02:25:05
uartは4.8Kなんでだいじょうぶです。セラロックぐぐってみました。それみたいです。 水晶に比べると原理的に精度が劣るみたいですけど、その辺のことはヒットが多すぎて 見つけられませんでした。20円〜40円の奴の精度は0.5%くらいでしょうね。 内蔵タイマを使って1秒毎の処理とかあるのですが、0.0977%速くなるだけなので、そのまま 使える、とソフトを調査して報告したことがあります。 原理的になんで水晶より精度が劣るのか簡単に教えてくださいませ。
>>265 セラミックで、温度変化に弱いんじゃなかったかと思う
>>265 というか、セラロックは、ホビーレベルでは普通に使ってるが
温度変化が激しいと厳しいかもしれないな
268 :
257 :2008/05/12(月) 17:03:11
ありがとうございます。セトモノなのに、温度が上がると柔らかくなるんですかね・・・
>>268 セラミックス=瀬戸物なんて、旧時代過ぎる発想だな。
この場合のセラミックスは金属酸化物などを高温で焼き固めたもの(焼結体)だね。
セラロックに使われるのは、チタン酸ジルコン酸鉛だね。
ついでに言えば、結晶体である水晶に比べるから不安定なのであって、 LC発振回路なんかに比べればよっぽど安定しているよ。
焼結体で、結晶と比べて数桁のオーダー程度の精度にできる、ということは粉の細かさや 配合、焼結温度などをもの凄く正確に制御できるのでしょうね。天然素材に人工素材が 追いついて行く過程がこの分野でも見られるようで、興味深いです。
>>271 目的のものを作るのじゃなく
作ってから選別するんじゃね?
それだと歩留まりが問題になりそう・・・
274 :
デフォルトの名無しさん :2008/05/20(火) 04:29:34
コピペ君って馬鹿だな、まで読んだ。
ミドルウェアが強い企業ってどこなのでしょうか?
>>276 質問が抽象的すぎ。
「組込み系で、ミドルウェア製品を多く出している企業」ってこと?
ACCESSて一時期のGoogleショックからは立ち直ったのか。
279 :
276 :2008/07/12(土) 22:54:23
>>277 すみません、抽象的でした。
>「組込み系で、ミドルウェア製品を多く出している企業」ってこと?
そうです。
自分の最近の夢は
組み込みソフト用ミドルウェアを拡販する会社を起業することです。
その参考のため。
それくらい自分で調べられん奴が起業してもろくなことにならんと思うが・・・
>>279 ミドルウェア、って一口にいってもいろいろあるからなあ。
ブラウザとかの比較的上の方ならACCESSとか富士通とかかなあ。
FSとかTCP/IPとか、比較的下の方ならOSベンダーが一緒に売ってる。
WindRiverとか。日本企業ならミスポとかイーソルとか。
282 :
276 :2008/07/13(日) 11:30:40
>>279 ありがとうございます。
大抵知っているところでした。
個人的には特出したところはないと思っていますが、違いますか?
なので、まだ入り込める余地があると妄想してます・・・・
まずは、uITRON4.0準拠OSを作ることから始めた方がよさそうですね。。。
以下、妄想しているもの。
TCP/IPプロトコルスタック
FFS(フラッシュファイルシステム)
組み込み向けGUIライブラリ
etc...
>特出したところはないと とは思うけど、特出できるのか?
284 :
276 :2008/07/13(日) 18:30:30
>>283 正直なところ、できるかどうかは分かりません。
現在、一人でコツコツと作業を進めていますが
一人だと限界を感じてきています。。。
なので、如何に優秀な人材を確保できるのかにもよりますね。。。
すでに他力本願か 夢は寝てる間だけにしとけ
>>282 > TCP/IPプロトコルスタック
> FFS(フラッシュファイルシステム)
> 組み込み向けGUIライブラリ
どれも一人だけでやるには無理があるよ。
全部一人でやろうとしたら20年はかかるぞ。
> FFS(フラッシュファイルシステム)
フラッシュだけなら簡単だろう、と思ってそうだが、ATA/ATAPIとFATの実装も必須。
場合によってはext3とかも。
>>284 頑張れ。
優秀な技術者を20人も集めれば
大体5年で完成するぞ
288 :
276 :2008/07/15(火) 00:22:00
>>286 20年はかかりすぎだと思います。
3年あればできると思いますが、如何せん本業が忙しく(ry
フラッシュはその寿命を伸ばすことも考えないといけないので
他のストレージデバイスより難しいと考えています。
簡単とは思ってません。
>>287 優秀な人材、もしくは同志はどこに行けば
見つかるでしょうか。。。
289 :
276 :2008/07/15(火) 00:27:05
本業(組み込みソフト開発)が忙しいので出来ませんと言い訳してます。 これじゃ、他力本願と言われても仕方ないか。
これじゃ、どころか 最初の時点で、だ。
291 :
デフォルトの名無しさん :2008/07/15(火) 02:22:47
フラッシュROMにFFを書き込む場合、その書き込みによって寿命を縮めますか?
292 :
276 :2008/07/15(火) 02:30:59
eraseに回数制限があります。
1のbitに1を書く分には寿命に影響しない、と理解していいですか? すると、0のbitが増える方向へは重ね書きが可能ですね。 FF→FE→FCとか。
nand flushについて調べてみるといいよ
>>276 確かに一理あるかもな。成功したときに雇ってくれ。
>>288 > 20年はかかりすぎだと思います。
> 3年あればできると思いますが、如何せん本業が忙しく(ry
どんだけ自信家なんだよww
つーか、
> TCP/IPプロトコルスタック
> 組み込み向けGUIライブラリ
↑このへんはどこまでサポートするつもり?
それによってだいぶコード量変わるし、テストの工数まで考えてる?
298 :
276 :2008/07/16(水) 00:06:00
>>297 確かにどこまでやるかで工数は大きく変わりますね。
TCP/IPプロトコルスタックは
ネットワーク層、トランスポート層をサポート予定。
物理層はユーザ作成関数として、ユーザカスタマイズとする。
アプリ層は、サンプルとして提供する。
297は組み込みソフト屋さんですか?
>>298 DNSとかDHCPとかも忘れずに頼むわ
あとARP周りはシンプルだけど地味にトラブル多いから
マジ気合入れてテストしろよ
すいません、ここのスレでいいのかわからないのですが、一つ御相談させてください。
いままでWindows系PCで作っていたTCPソケット通信を多用するアプリがあるのですが、これを組み込みBoxに移植してほしいという話があがっています。
そっち系の会社に投げればいいじゃん、というのはごもっともなのですが、カスタマイズが結構多い関係で、アプリ部分はコストが多少かかっても自社開発でメンテできるようにしろ、という指示がきています。
(ウチは組み込み系の技術者は今はいません)
基本的に、どこかの既存の開発ボード上で組んで、その開発ボードベースのハコに収めてプログラムを焼いて出荷、のようなイメージをしております。
要件としては
インターフェース
・Ehernet * 1必須
・ログ・オーディオファイル用外部記憶デバイス(CForUSBメモリ等) *1必須
・オーディオ制御&出力 *1 必須
・VGA出力 (できれば)
・シリアル(できれば)
・できればイーモバイルのUSB通信可能であること
OS・開発環境
・開発言語は問わず。LinuxでもTRON系でもOK。(一から勉強になるので問わない)
・一通りのネットワーク通信関係のライブラリ、開発環境が揃っていること(DHCPクライアント、TCPソケット通信、NTPクライアントなど)
・1秒単位でLANの常時通信コネクションで1Mbyte程のデータが送られてくるので、それを裁く程度の処理能力
生産要件
・少数ロット(1個単位)で入手可能なこと
・ある程度長期間での入手保証が見込めること(プログラム互換性を持つバージョンアップ可)
・できれば安価なほうが好ましい。Max単価10万円程度
要件みてればなんとなく想像できると思いますが、センサーのデータ収集用です。
そこにモニター用の画面と問題発生時のアラーム警報が必要です。(画面はhttpdで代用が利くかもしれません)
こんなような物で、オススメのプラットフォームはないでしょうか?
ざっと探したところ、下記あたりが要件を満たしていますが、扱ったことがないので評価がわかりません。コレの善し悪しや他のオススメあったら教えてください。
ttp://armadillo.atmark-techno.com/armadillo-500
追記です 元々PCのLinux箱あたりにしたかったのですが、「プログラムはフラッシュに焼いてあるのと同等でないとダメ」と言われています。 (要はCF抜いたからプログラム起動しません、とかは不可。CFがないからログが保存されないとか、音源ファイルがないから音が鳴りませんは可。) なので、組み込み系で探しているという状況です。
追記を無視すればWindowsCEなんだが
Windows XP Embeded、プログラムがVC++でやってましたので、WindowsCEは真っ先に検討したのですが、NGでしたorz (根本的にWindowsがお嫌いなユーザのようです) 「プログラムモジュール部分は不揮発性メモリ等に保持され、外部から容易に触れることができないこと。 またHDDやCF等の磁気メディア等、容易に書き換え可能なメディアでのプログラムモジュールの保持は不可」とされています。。。
304 :
300 :2008/07/16(水) 16:56:36
じゃあBBR-4MGでも買いあさっておけば?
シビアなリアルタイム物じゃないみたいだし LinuxかBSD系の箱でいんじゃね?
玄箱とかどうよ。 アルマジロは私のところのプロジェクトでも話題に上っているから、罷り間違うと使う羽目になりそうだが。
308 :
297 :2008/07/16(水) 23:55:54
>>298 > TCP/IPプロトコルスタックは
> ネットワーク層、トランスポート層をサポート予定。
> 物理層はユーザ作成関数として、ユーザカスタマイズとする。
> アプリ層は、サンプルとして提供する。
Socket、HTTPやFTPぐらいまではサポートしないと売れないと思うよ。
それか、よほど安いとか。
ちょっと突っ込み入れると、「物理層」はデバイスそのもので、ドライバはデータリンク層だな。
ドライバはサンプルで構わないが、アプリが「サンプル」扱いはきついかも。
> 297は組み込みソフト屋さんですか?
そう。最近はアプリの仕事が多いが。
>>308 > ドライバはデータリンク層だな。
つまらん茶々だけど、ドライバってのは位置付けがイマイチ曖昧なんだけど、
おおむね、ネットワーク層からデータリンク層へのつなぎを担当する部分。
チップ側にIPオフローディング機能とか入ってくると、もう完全に、分けが
わからん位置付けになるんだわな、これが………
310 :
300 :2008/07/17(木) 01:32:39
>>306 さん
元々PCアプリのため、リアルタイム性をミリSec単位で要求するようなことはないので、私もLinux系がいいのかなぁと漠然と思っています。
LinuxはPCサーバでは頻繁に使っているので設定・操作は問題ないです。
組み込み開発経験がまったくないので、何を重視すれば良いのかいまいち掴めていません。
>>307 さん
玄箱は玄箱/HGを持っていまして、アレはシステムをHDDに書いてるからダメぢゃん、とおもっていたのですが、
wiki調べてみたら玄箱/PROはARM9ベースになってシステム用フラッシュメモリ載せてるんですね、安価な割におもしろそうです。
ただ、開発がほぼ初心者状態で一からやる関係上、できればご丁寧な開発キットが欲しいところです。
うーん、アルマジロは結構悪くない選択肢なんですかね。
組み込み関係の展示会にでも行って情報収集したいところですが、11月のようで。。。
>>308 > Socket、HTTPやFTPぐらいまではサポートしないと売れないと思うよ。
> それか、よほど安いとか。
あるOSに付いているプロトコルスタックのアプリ層は
サンプルという扱いでした。
アプリ層もちょっと真面目に検討してみます。
でも、今本腰入れて作ろうと計画しているのはFFSだったり...
>>309 > チップ側にIPオフローディング機能とか入ってくると、もう完全に、分けが
> わからん位置付けになるんだわな、これが………
ミドルウェアとユーザカスタマイズ部(所謂ドライバ)との切り口は
イーサフレーム送受信レベルが妥当でしょうか?
>>297 別にその手のものなら、幾らでも売ってる訳だが
それらに対する優位性って何?
>>309 おかげでレイヤでMIとMDがガッツリ別れてる
xBSDのドライバが書き辛いのなんの
>>310 OpenBLOCKSでよくね?
>>311 > ミドルウェアとユーザカスタマイズ部(所謂ドライバ)との切り口は
> イーサフレーム送受信レベルが妥当でしょうか?
ミドルウェアってのは、通常、トランスポートの上にあるもんだと思うが…
ルータ作るとかってな仕事でもない限り, トランスポート以下を
つつくってのはまずないと思うぞ
そして出てくるfj世代の得意技
ソース読め!!!
>>312 > xBSDのドライバが書き辛いのなんの
バークレーの連中は、当初、IPオフローディグなんて考えても見なかったんだろうな
315 :
314 :2008/07/18(金) 09:53:20
>バークレーの連中は、当初、IPオフローディグなんて考えても見なかったんだろう 30年前にどうやってそんなものを予測しろと
317 :
300 :2008/07/18(金) 19:15:07
>>312 さん
OpenBlocksは私も調べてみたんですが、オーディオがないんですよね。(音による警報制御が必須要件なんです)
またOpenBlocks266だと、アルマジロ-220あたりと大差ないのかなあ、と思ってしまうところです。
開発環境でOpenBlocksのほうがイイ!とかあれば是非情報頂きたいところです。
>>314 さん
私はアプリ屋なので、ハードと開発環境をセットで提供してくれるものを探しています。
LinuxBIOSのような技術が私の求めるものを支えていることは察しますが、これを素で持ってきても、どう熱かったら良いのかわからない状況です。技量が低くてすいません。
>>317 LED出力あたりをいぢってブザーでも付けるとか。
発売元か開発元に相談してみるといいかも。
>>317 OpenBLOCKSってLinuxの開発環境がセットで提供されてなかったっけ?
つーか、そんなにPC並のスペックが欲しいなら
CONTECあたりの組み込み用PC使えば?
blanca ってあれからどうなったんでしょ? これはパフォーマンス的にも問題あるかも
321 :
300 :2008/07/19(土) 15:12:37
皆様、色々ご意見ありがとうございます
>>318 さん
なるほど、後付が可能なんですね。ハード関係はさっぱり知識がないので、そういうことすらわかってませんorz
>>319 さん
アルマジロもOpenBlocksもLinuxベースで開発環境が提供されているようです。
開発環境についてはどっちのほうが良いのか見分けがつかないのです。。。
元々がPCベースで開発していたものなので色々てんこ盛りでやっておりまして、それを簡単に機能削減ができないのです。
CONTECを調べてみました。PCベースの機器なんですね。
ざっと調べた感じで、スペックは申し分ないのですが、
>>303 にひっかかってしまいそうなのです。。。
>>320 さん
blanca、ぱっと見では結構使えそうな気がします。ライブラリあたりはまだ拡張開発中なんでしょうかね
こいつはいつまでグズグズしてんだ?2〜3種類くらいさっさと取り寄せろよノロマ野郎
323 :
300 :2008/07/19(土) 18:34:49
すいません、これで最後で消えます。 実は先週アルマジロ-500の購入稟議かけたら、「要件満たしてるのはわかるけど他製品比較資料くらいもってこい、もっと安いのはないのか」と言われて困りましてこちらでご相談させて頂いた次第です。 色々な意見頂き、あまり選択肢も多くないということが確認できましたのでコレで試してみます。ありがとうございました。
新入社員か
uITRON4.0準拠OSでタスク間通信をやろうと思うのだけれど みなさん、どうやってます? 一般的な方法を知りたい。
>>325 ケースバイケース。
普通はメッセージかイベントフラグだと思うけど。
メールだな。 送信側でメモリを確保して そのメモリのアドレスをメールボックへ送る。 受信側でメールを受け取りメモリを解放する。
>>325 データキューと固定長メモリプールの組み合わせが、今ならいいと思う。
メールボックスは、メモリプロテクション仕様のものからは推奨されないから。
結構データキューって、uITRON3.0のメールボックスの一種の実装だと知らない人って
多かったりしない?
それから、スタンダードプロファイルにはないけど、メッセージバッファが使えるなら
データキュー+固定長メモリプールのようにやってくれるので、コードが少なくて書ける
と思うけど。
データキユーって送信時に待たされる可能性あるからなぁ。個人的にはメールボックスを勧める。
331 :
329 :2008/07/23(水) 09:25:29
>>330 個人的好き嫌いは、自由だけど、
データキューで送信待ちが発生するということは、それだけ、受信側のタスクが処理できない状況に
なっているわけですよね。キューが膨れ上がる状態ですね。
固定長メモリプールとの組合せの場合、結局、メールボックスで送信待ちにならないとしても、
固定長メモリプールの獲得時に待ちになってしまう状況になるので、50歩100歩のような。。。
332 :
325 :2008/07/23(水) 23:17:47
>>331 50歩100歩ではないような気がします。
送信側が受信側より優先度が高い場合
優先度の逆転が起こってしまいますよね。
その点、メールボックスの方が安全と言えないですか?
333 :
329 :2008/07/24(木) 10:06:13
>>332 それを優先度の逆転とはいいません。優先度逆転を議論するなら、セマフォおよびミューテックスですかね。
たしかに、送信側の優先度が高い場合は、メールボックスでは、送信一辺倒でひたすら送信する状態になる場合もありますね。
「安全」という言葉が出てきたので、あえて言うけど、
1)送信側が一方的に送信データ、つまりメールボックスが膨張していく状態
2)送信側が一方的に送信データが増えた場合に、ある程度のところで送信タスクがWaitされる状態
ではどちらが安全だろうか? すぐにわかる話だと思いますが
それから、私が言っているのは、MBX + MPF の場合と DTQ + MPF の場合の比較です。
かならず、固定長メモリプールとの組合せの場合のことです。
送信側は、固定長メモリプールから、一定のメモリを獲得、そのアドレスを
データキューあるいは、メールボックスで送る。
受信タスクは、データキュー、あるいは、メールボックスを受信、
そのアドレスから、該当メモリを参照し処理、処理が終わったら、
その該当メモリを固定長メモリプールに返却する。
という流れですね。
この場合にメールボックスが膨張する状況が起こったら、そのうち、固定長メモリ
プールが獲得不可になって、結局待ちになるから同じなんじゃないかという
ことですが、
お分かりになりましたか?
334 :
325 :2008/07/25(金) 00:55:19
>>333 真摯な回答ありがとうございます。
受信側がメッセージを処理しなければ送信側が待たされますよね。
受信側が処理中に受信側と送信側の中間の優先度を持つタスクへ
ディスパッチすることを優先度の逆転と言いませんか?
決して優先度の逆転がダメと言っている訳ではないです。
DTQ+MPFの場合、送信側が待たされる要因として
送信待ち、メモリブロック取得待ちの二つがありますよね。
一方、MBX+MPFの場合、メモリブロック取得待ちしかありません。
保守やデバッグを考えると後者を選択したくなります。
どちらが安全であるか説明していただきましたが
ちょっと理解できませんでした。。。
335 :
329 :2008/07/25(金) 11:03:02
1)優先度逆転について 受信側タスク −− 低プライオリティ 送信側タスク −− 高プライオリティ それ以外のタスク −−中プライオリティ この状況で、送信タスクがブロックされると、それ以外のタスクが動いてしまう。 これを優先度逆転と言えば、待ち条件になった場合のことをすべて優先度逆転という ことになる。 言葉の問題なんであまりたいした問題でもないですが。。。 2)DTQ+MPFの保守性 MPFだけがwaitされる場合とDTQもしくはMPFがwaitされる場合とで保守するのが、難易度が 違うというご意見ですね。 理解しました。 私的には50歩100歩だと思っていますが、 3)どちらが安全かについて 1)送信側が一方的に送信データ、つまりメールボックスが膨張していく状態 2)送信側が一方的に送信データが増えた場合に、ある程度のところで送信タスクがWaitされる状態 安全でないとはどういうことかというと、いわゆるデッドロックをおこさないことだと考えればいいと 思っています。 1)の場合は、その送信タスクが占有するメモリプールであれば、問題は少ないが、共有のメモリプールの 場合にメモリを食いつぶして、場合によっては受信タスクもメモリ獲得待ちになりデッドロックに陥ります。 よくある実装として、それぞれのタスクが送信/受信を行うような場合はそうなります。 一方、2)の場合は、送信タスクが送信待ちでwaitになってもそのうち、受信タスクがDTQを受信し、送信タスクの 待ちが解除されます。 1)の場合はどこまで、メールボックスが増えていくことを考えないというところが非常に危ない設計の ように私は思いますが。。。
>MPFだけがwaitされる場合とDTQもしくはMPFがwaitされる場合とで保守するのが、難易度が違うというご意見ですね。 スタンダードプロファイルにはないけど、メッセージバッファ使うという手もあるかな。
【頑固】派遣テスターの人格問題【向上心ゼロ】 自分からテスト専門です、って宣言してる派遣テスターって何なの? 将来プログラマとかSEになりたい、とかならわかるけど。 向上心ないよね、頑固だし。 そういう派遣テスターって、仕様書は読めない、 テスト仕様書も作れない、テストプログラムも作れない やれることは「テキトーにプログラムを触る」ことだけ。 俺は派遣プだけどさ、こういう派遣テスターがいると 派遣全体がバカにされるんだよ。 テスト専門派遣なんて氏んで欲しいよ、まったく。 今日も正社員の人が派遣テスターに仕様書を読んで テスト仕様書を作ってください、って説教してたよ。 その派遣は頑固に「何故、仕様書が必要なんですか?」って 反論してたから、きっとテスト専門派遣テスターだな。 仕様書も読まず、テスト仕様書も作らず、ただテキトーに プログラム触るだけで給料もらおうなんて頭おかしいんじゃねーの? あ〜あ、あの派遣テスターが3ヵ月後に切られるまで、 仕様書も読まねーでテキトーにテストしたバグ票がまわってくんのかよ。 そんな糞なもん、読んで処理する派遣プの身にもなってくれよ。 うわ〜、しかもそいつが切られる3ヵ月以内に中間納品あるじゃねーか! テスト仕様書もなしにテキトーにテストして納品か。 中間納品後にソッコウクレームでデスマ必至だな。俺の休みも返上かよ。 派遣専門テスターさんよ、少しは向上心持てよ! 頑固な性格直して仕様書読めよ!テスト仕様書作れよ!
>>337 >頑固な性格直して仕様書読めよ!テスト仕様書作れよ!
性格とかじゃないだろ、単に仕事してないだけ
うちの会社の開発プロセスに嫌気が差してきた。 とりあえず、数をこなしてソフトの品質は二の次な体質。 みなさんの会社はどうですか?
マ板でやれクソが。 お前には嫌気が差してきた。 類は友を呼ぶんだろうよ!
スレ違い テスターに適当にさわらせるテストなんて 最底辺会社がPCでやるならありえなくもないが 組み込みでそれやったら会社消滅だろ ありえねー
>>341 納品物が工場の現場の人間が使う端末だったりする場合は
アホに与えて観察することもある。
そのアホは臨時に短期に雇うバイトで十分だろ 派遣にやらせる必要は全くない
>>342 それは納品物のテストじゃなく、そのアホの方のテスト
>>344 「フールプルーフ」って言葉知ってるか?
アホが使っても大丈夫なように作んなきゃいけないものもあるんだよ。
アホは普通の人間には想像もつかない使い方をすることがある。
346 :
デフォルトの名無しさん :2008/08/23(土) 10:02:45
>>345 「優先度」って言葉知ってるか?
アホが使っても大丈夫以前に仕様どおり動かなければお話にならないんだよ。
アホ開発チームは普通の人間には想像もつかない納品の仕方をすることがある。
>>346 人命にかかわったりライン停止の危険をはらむ動作が
アホにはできないようにする必要があるんだよ
納期を守って人が死ぬのはもうカンベン
>>347 ホームラン級バカ発見!
人命にかかわるシステムをテスト仕様書もなしに適当にテストなんてしねーよ
実際に人命にかかわるシステムの動作保証なんて経験したことない癖に
無茶苦茶な嘘を書くなよ、ボケが
349 :
デフォルトの名無しさん :2008/08/23(土) 20:15:44
>>347 >納期を守って人が死ぬのはもうカンベン
アホのテストのせいで人が死ぬのはもっとカンベンだよw
>>347 もうカンベンって、、、、何人か殺してんのかよ(((((゚д゚;))))))
351 :
デフォルトの名無しさん :2008/08/23(土) 21:11:43
テスト仕様書無しでテストして納品しました、バグのせいで人が死にました ↑会社の存続が無理なのは当然として、業務上過失致死で刑務所もありえるよ
組み込みで、イーモバイルとかを使った通信を実装した方っています?
>>352 原理上はPPPダイアルアップ
PHSカードと56kモデムは、やったことある。
むしろネットワークサービス層の選定・実装が問題じゃない?
>>353 ありがとうです
>むしろネットワークサービス層の選定・実装が問題じゃない?
その辺はあまり問題にはしていないです。
CFのタイプにしろ、USBのタイプにしろ、どう制御するのかがまったくわからなくて
どうしようかと思っています。
USBのタイプは、USBのプロトコルから上は、いきなりATコマンド様に扱えるんでしょうかね?
>>354 実装例としては Linux のものが参考になると思う。
もちろん、Linux のものから引っ張ってくるときは、
約束事には気をつけてな!
>>355 thxです
約束事?。。。なんだろ
すいません、わかるように。。(手もみ
丸ごと持ってくるとGPL縛りにかかる
SH2+HEW なんですが 汎用レジスタにアクセスしたいのですが、どうしたらよいですかね #pragma inline_asmを使うとcode=asmcode指定が必要で、 デバッガがお利巧じゃないので、ソースリストがasmになって見づらい #pragma global_register で変数にあてようとすると"Illegal register" のエラーがでます そもそも、global_registerで出来るのかな どなたかわかるかた、ご教示あれ
gcc?
gccの方がレジスタアクセスは簡単だよ。
363 :
359 :2008/10/15(水) 10:57:37
サンプルコードを書いて、ルネサスに聞いた方がいいんじゃないの?
365 :
359 :2008/10/15(水) 19:44:12
>>364 そういうのアリなんですかね?
調べてみます
>>359 俺も同じ体験したよ。
>デバッガがお利巧じゃないので、ソースリストがasmになって見づらい
ルネサスなら、こっちにしないとダメだったよ。必要な箇所は少量だと思われるので、
そこだけを別モジュールにしてASMで書いてCから呼び出すようにしたらいいとおもう。
367 :
359 :2008/10/17(金) 03:28:10
>>366 ありがとうございます
>そこだけを別モジュールにしてASMで書いてCから呼び出すようにしたらいいとおもう。
いまその方向で始めました
スピードはあまり要求されないのでCでまとめられたらよかったんですけどね
そもそも、具体的にどういう動作をさせたかったのかに興味あり。
ポート叩くのに、ROTX(L/R)系の命令を使いたかったのだと思う。 キャリーをポートに出すのがCでは書けなくて若干速いんだよね。
スタックポインタ?
Rnをさわらなきゃいけない状況つうのがあんまし想像できないなあ。 アセンブラで呼ぶことしか想定していないライブラリをつかうとか、 俺OS作っていてコンテキストスイッチ部分を書きたいとか…
372 :
359 :2008/10/18(土) 04:47:08
>>368 >>371 ユーザープログラムモードで、
プログラム上からROMの書き換えをするのに、Rnを触らないといけないんです
ああ、あれか。 引数をレジスタ渡しにすればそのまま呼べたような気がするが。
374 :
359 :2008/10/19(日) 01:41:37
>>373 >引数をレジスタ渡しにすればそのまま呼べたような気がするが。
そう思って、#pragma global_register を使ったら"Illegal register"のエラーが出てしまってます。
375 :
359 :2008/10/19(日) 08:40:14
#pragma global_register(a=R8) int a; としたときは、コンパイルが通りますね どうやら、R8-R14だとOKみたいです 制限がかかってるのかな
>>575 だな、スケールが小さいな。もっとあるだろうに。
ってかやらされてるんだろうな官僚に。何もやらないと要求されるから。
↑gobaku
378 :
359 :2008/10/19(日) 08:51:03
379 :
359 :2008/10/19(日) 08:57:49
よくみたら、
>>374 は、
>>373 の答えになってなかったかも;
ああ、なるほど!
R4は引数をレジスタ渡しにすればそのままってことですね
レジスタ渡しにすればR4に入る保証というのは、どこかで定義できるんでしょうかね
これは、処理系(コンパイラ)依存ですよね?
マニュアルをちょっとよく見てみないとですね
380 :
359 :2008/10/19(日) 09:47:24
>>375 自己レス
マニュアルに書いてありました;
>>373 やっぱり、それでいけるかもしれません
ありがとうございます
今までオープン系業務システムの開発を やっていたのですが、今度組み込みを やることになりました。 具体的に何をやるかまだわからないのですが、 おすすめの入門書はありますでしょうか?
何をやるかわかってから聞けよ
384 :
デフォルトの名無しさん :2008/12/04(木) 01:30:46
アンプってどうやってつくるの?
すみません 防犯カメラの設置および組み込みPGの募集ってあったのですが (HDDに機器をつなげる:サーバー知識あれば尚可) アパッチ、SQL、LINUX、でサーバー構築くらいはやったことあるのですが どういった作業なのでしょうか?単純作業の繰り返しでしょうか?
かっこでくくると判りやすいな。(防犯カメラの設置および組み込み)PGの募集。 組み込み系PGではないな。設置と結線ならPGである必要もない。
要は、普段は防犯カメラの設置をやってもらうが必要によってサーバの設定などの運用や 簡単な保守管理の設定なども行なってもらうけど肩書きはPGなんで宜しく、ってことだな。
>>386 まあ、インストールと設定(ファームウェア)の領域ですかね?
>>387 人数が少ないから全部やると思いますがw
>>385 防犯カメラの設置と組み込みPGってぜんぜん領域が違うと思うんだけどな
なんか、テキトーな会社っぽいね
前にあったのは
会社:「どんなことをやってました?」
応募者:「基本ソフトのですね〜(ほにゃらら)」
会社:「うちはベーシックの技術者は募集してないんです」
応募者:「‥‥‥」
OSを「基本ソフト」と呼ぶ奴を俺は信用しない
基本ソフト、たまにハード
>>390 なにか嫌なことがあったのか?w
おれは、「ping」を「ピング」と呼ぶ奴を信用しないがね
pingerは何て読むの?
>>393 「pinger」は造語だろ、pingerが「ピンガー」って読むから
「ping」を「ピング」とは読まない
1歩譲って「ピング」と言ってもいいけど、恥ずかしい人と思われることもあるから注意な
じゃあ、bomberは?
こういうどうでもいいことをいきがってくだらないこだわり見せる人のが恥ずかしいな。
ピングーとポングー
ソナー員 「艦長!敵艦が"ピングー"を打ってきました!」 艦長 (ズコーー!)
>>383 すいません、どこから手をつけてよいのか
皆目見当がつきません。
何を参考にすればよいでしょうか?
PICマイコンって 組み込み系でいいんですか?
愚問。 ガソリンエンジンって自動車でいいんですか?、と同じ意味で。
404 :
デフォルトの名無しさん :2008/12/05(金) 00:39:44
>>403 幾らなんでも、そりゃ例えが飛躍しすぎで伝わらんだろ
>>402 ペンティアムって 業務系でいいんですか?
くらいだろ
回答ありがとうございました 参考に勉強します
>>401 サイト見たのですがよく分かりません。
ご指導頂けないでしょうか。
何が知りたいんだおまえは
>>409 >>385 の作業を具体的に知りたいんです。範囲がどうのこうのとか
車がどうとかは、別にどうでもいいんです。
説明できなくもないが、まずはその会社に問い合わせなさい こちらが色々予想するのは無駄なことだ
あ わかりました。どうもです。
413 :
デフォルトの名無しさん :2008/12/07(日) 18:01:27
日本で有名な組込み屋さんってどこになるのかな アックスとかウィンドリバーとか? リナックスは組込みに強いと聞くけど 会社としてはあんまり聞かないよね
linuxはいい加減な処理しかできないし動かすだけで余計なコストも掛かる リアルタイム系では出る幕が無い
いやだから最初から選択肢に入らない 無料つっても何も無いも同然だから人件費の方が高くなる
>>417 人件費は、外注にかぶせればタダ
が、クライアントの脳内
作るモノにもよるんじゃない? ネットにつなげるような仕様だとLinuxBOXのような物のほうがラクだと思うがな 電器ポットにLinux入れようとは思わないけど
NICのドライバ部分なんてPICにもあるから そんなとこ楽したいだけでlinuxを載せる理由にはならない 無知ほどlinuxと喚きたがるだけ
規模の話をしたつもりだったんだが、そんなにLinuxを毛嫌いする必要あるのかな
〜のソフトがlinuxでしか動かない、 とか、ソフトの都合が多いね。 linuxが出てるのは大体ソフト屋の発想。 それで完成するのは大抵産業ゴミ。
そして車輪の再発明
>>421 そんな話してないだろ。
どこの誰さんですか?
なにか都合が悪かった?
経験から言えばLinuxが動かせる規模なら 最初からCEやWindows Embedded使った方が楽。 Linuxはソフト作ってくれる奴が確保できない。
意味不明な理由でGPLになるしなあ 信じられんよ
意味不明でGPLとか、それはあんまりだ
NetBSDがアップを始めました
Linuxを使っていいのは趣味レベルまで。 大手なら金の力で乗り切れる場合もあるが、 中小で下手に関わると悲惨なことにしかならない。
このスレはシビアですね。 だがそれがいい。
>>422 >それで完成するのは大抵産業ゴミ。
あるメーカのある民生品は、思いっきりlinuxだけどね。
ライセンス費のある組み込みOSは、民生品に入れるときついんじゃないのかね
>>432 そういう妄想はいくらでも吐けそうだよなw
何か明かせない理由でもあんのか?
明かせない理由はずばり、 おもいっきりライセンス違反してて 明かすとしょっ引かれるから。
>>434 いや、ネタ元にバレるとまずいから;
AV機器なんだけどね、英文字の日本の会社。
これ以上はかんべんしてくれ。
当初Linuxで計画してたのが見事頓挫して、 別の物に丸ごとすげ変わった。 ってパターンだと明かせないわな。
>>436 だからさ、そんな明かせない事例なんかここで出しても
お前の妄想と変わらんだろ。
>>438 悪いが釣られないよ
組み込みlinuxを大量生産の民生品に使うケースもあるってことだ
絶対あるもん! いやいや 絶対あるもん! いやいや ・・・バカ?
明かせない理由→バレるとまずい はいはい
昔linux組み込んだルーターでライセンス問題になって大騒ぎしたことがあったよなあ… 今どうしてるんだろう
>>442 「もう2度と使わない」と悪態吐いてたろう
そういやLinksys GPL違反はどうなったんだろうな?
糞煮程度デカイならそりゃ何だって作れるだろ アホか
linuxはドライバが強制GPL。 その時点でありえない。 NetBSDの方はまだ可能性がある。
>>446 可能性があるつーか、
あっちこっちのネットワーク機器がNetBSDじゃん
某NASや一部のPDAの例外のせいで組み込み=Linux みたいな考え違いをするバカが多いんだよ。
その某PDAのSDドライバは黒いという話が・・・。 負けず劣らずユーザーも黒いけどね。 Linuxで組み込みは暗い話しか聞いた事がない。 あまり関わりたくないね。
ドライバ部分はGPLにしたがって公開しなきゃいけないけど ソフト部は公開する必要ないよね 低レベルのソフト会社には恐くて丸投げできないけど
低レベルなスレだと
>>450 の言う低レベルがどんな意味を持つのか分かりにくいな
Linux積んでる民生機器といえば東芝RDシリーズがそうだが?
何をいきがりたいのか知らんけど、 そうやってジャンル問わず探せば絶無なんてことはないし、 Linuxが使える状況なら使えばいいんでは
>>454 どうしても使っていないと信じたい奴がひとりいるんだわさ
>>453 起動がもっさりで有名になってしまったアレかw
>>456 だから、コンセントを入れたときに既に起動させておいてスリープさせてる機器もあるけどね(笑)
H8/500系を使い続けなければいけないんだ… 10年選手のFULLICEとヘボいデバッガしかないんだ… 何とかならないもんかなぁ…
>>458 デバッガなんかの世話になるヤワな体質の方をなんとかしたほうがいいと思うよマジで。
私見だがデバッガに頼る人っていうのはコードが汚いんだと思う。
十分可読的なコード書けば(もちろんデバッグは必要だが)デバッガなんていらん。
保守性のあるコード書くのって難しいよね。
>>460 規模によってだね。
小さくても、FPGAとかハードが絡むと、身の潔白を晴らすために必要。
>>462 おまいと仕事したいぜ
おれの周りは動かないと全部ハードが悪いって思考停止する奴おおすぎ
こっちもハード確認用ファーム自前で用意して確認してるのに…
数時間後に同じハードを修正したといって渡すとちゃんと動き「やっぱりハードか」
ってどの口が言うって感じw
>>463 同情するわw
いまやってるプロジェクトのチームは10数人の外人部隊だけど
トラブルがあると、全員が「オレか?」って自分のところを当たる
だから、解決も早い
力のある奴らってたいていそうだ
それは・・・普通じゃないチームだな。脊髄反射で 「俺ではない」 が出るのが一般的だよな
>>465 それなりに経験あるなら
そうは言ってても、最低限、自分の責任範囲+αくらいは
裏でこっそりみるだろ
うちはそれだな。
風の中のすぅ〜ばるぅ〜♪
自分のとこチェックしてデバッグしてるうちに原因が特定できることあるしな。 それが他人のとこだったりしても。
10数年前からベース変えずに色々な人間が書き加えてるようなソースに 保守性なんか無いんじゃああああああああっ! 仕向け先ごとに別々の改造入ってるし ああ、全部書き直したい・・・
>>470 そこまで熟成してしまったら、同じものを一から再構成するのは
不可能でないかと思うわけで。
かと言って最初からそこまで考えて作る余裕もないんだよなあ。
OSなどは0から書き直したりしてるよね あれは売るためでもあるけど
OSなんかはマニュアルちゃんとしてりゃ、それに合わせておけば 何も問題ないからねえ。 書いていないような所で微妙に変わっても、今回からそーいう仕様に なりましたで終わりそうだし。
>>470 上司「一部変更でみこんでいる期間で10数年分を書き直して完全に同じ動作するようにできるならやってもいいよ」
雛形が相当ひどかったのでは?
その後10数年分の変更を見込んだ雛形なんて作れないだろ。 当時の仕様に対してきっちりしていたってその後好き勝手な変更加わればめちゃくちゃになるよ。
実際OS(カーネル)書いていますが、元ネタは、10年くらい前のやつ。 それまで、担当者は何人か変わっていますが、「好き勝手でない」レベルで 統一された保守がされていた感じがします。 マイコンが違うので当然ソースは全面変更なのですが、処理方法など、フシュウではなく、当初の ものを踏襲してます。建前上、新規作成ですが、私的には流用と思っています。 私から、また担当が替わって、次の人が見たときは、勝手な変更が加えられたと思われるかも しれませんが、...
アセンブラ?
479 :
デフォルトの名無しさん :2008/12/24(水) 20:28:09
Windowsの深層部にはx86の超レガシーな命令が使われてるらしいね だからx86はいつまで経っても互換性の縛りから抜け出せない
Windowsはx86以外にも出てたんだがな
えっ、そうなの?
WindowsNTにはAlpha MIPS PowerPCで動くものもあったし WindowsCEだとSH4とかARMとか色々あるんだが?
そもそもブートする時以外に「レガシーな」命令なんて使ってるの?w
移植性ってあったの?
>>483 16ビットモードという意味では起動時だけだな。
ていうか479は釣り。加算命令とか基本的な命令はレガシーかつ現役。
そういう命令の互換性が必要なんだし、遺物のような命令は使われなく
なってる(LOOPだとか)。
セグメントのあたりも初期化以外に使われないのが色々ありそうだが。
>>486 セグメント関係は、メモリ管理でバリバリ使うよ。
OSの実装にもよるけど。
つーか、そろそろスレ違いだろ。
折角高速化を期待してアセンブリ言語で書いてるのに LOOP とか遅い命令使ってもしゃーないしな。
>>487 セグメントをメモリ管理でバリバリ使うOSって何?
セグメントは面倒なだけであまりメリットがないと思うんだよな。
32bit 以上のOSでは、初期化以外には使っていないっていうのは
俺も同じ認識なんだが。
8086/80186/80286みたいなアドレッシングできる範囲が実アドレス
空間より狭い場合にやむをえず使うって感じじゃないの?
OS-2
>>490 OS-2ってOS/2のこと? OS/2 もWarp からは32ビットなんで
セグメントは使ってなかったのでは。
すでにサポート終了したOSしか例がないんだったら、
現在はセグメントをバリバリ使ってプログラムするOSなんて
ないって結論でいいのかな。
そりゃぁ、「プログラムするOS」なんてないだろ。 セグメントを使って管理していたとしても。
それは誤解ですね。 x86の16ビットOSの場合、64Kを超えるプログラムを作る場合は セグメントを意識せずにプログラムの作成はできないよ。 正確には、コードとデータそれぞれ64Kまで、それを超えると コードは、セグメントの関数CALL、データはセグメントの切り替えが 必要になる。 ライブラリで覆い隠している場合はあるかもしれないが、OSだけが 管理すれば良いって話ではない。
>>493 それは8086などの16ビットCPUに限定された話だろ。
今の話題は、セグメントレジスタを使ったプログラムをOSがするかどうかじゃないのか?
Linuxの何かで、32ビットモードで実メモリ4Gオーバーを扱えるようにした 拡張バージョンとかやってなかったっけ?
もしかして、OS がメモリ管理にセグメントを使うって話じゃなくて、 アプリケーション側がメモリ管理にセグメントを使うかどうかって話なのか? 現状では普通アプリケーション側にセグメントをいじる権限は与えないのが普通だな。
じゃなくて、セグメントを利用した2次元アドレッシングを活用してるかどうか、という話。
NetBSDやLinuxの移植って難しいよね… まず何から勉強したらいいのかな… BootLoaderは何がいいのかな…
>>498 GPLが気にならないならU-Bootでいいだろ
ありがと、まずはU-Bootの移植頑張ってみる
あけおめ!ただいまクロスコンパイル環境を構築中!
502 :
デフォルトの名無しさん :2009/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を使用です。
コードが判らない
ちょっと1行ずつ何がしたいか解説して見ろ
i_adcl=ADCL;
i_adch=ADCH;
ret = (ADCW
>>2 );
何しとんの?
>>502 >i_adcl=ADCL;
まず、ここに時差がある。
>i_adch=ADCH;
↓adcの遷移はリニア 0x0FFF >i_adcl=ADCL; 0x1000 >i_adch=ADCH; こうなる、ことがある。
>>506 なるほど・・・とすると、同時性を確保するにはADCWだけ読み出せばよいのでしょうか?
しかし、ADCWを使って0-1024までの整数に表現する方法が分からないんです。
>>502 フツーにソースの信号が実際に安定してないんじゃないの?
関係ないけどADCxと、その値をキャッシュしてる変数のビット幅って
それで一致してるの?
あと、504がたぶん言いたいことだと思うんだけど、(もし割り込みを使ってるなら)
サンプリングの間隔にもよるけど、2つのレジスタをアトミックに読み取るように
しないとまずいかもね。
今回の問題とは関係ないと思うけど。
>>508 ソースはLEDを入力に使った距離センサーですし、値が低いときだけ暴走するので良く分からないです。
ノイズ源なども極力取り払いましたが・・・。
変数のビット幅は良く分かりません、参考にした本にはこれ以上のことが書いてなかったので良く分からないのですが、
少なくとも本の通りにやるとおかしな値になることだけは確かなんですよ・・・
データシートによるとADCLを読み出したらADCHを読み出すまでは値は変化しないらしいぞ。 他の問題じゃないか?
これか、 レジスタ名 bit7:0 ADCH ADC9 ADC8 ADC7 ADC6 ADC5 ADC4 ADC3 ADC2 ADCL ADC1 ADC0 - - - - - -
情報が小出しになってしまって申し訳ないです。
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型にはめ込んで値を取得できますでしょうか?
>>509 まあ一番可能性が高そうなのは、符号付1xビットのAD変換値の下位8ビットを、
unsigned charとして扱ってしまってるってところじゃないの?
ADCxはどう定義されてる?
>>513 AD系の定義は、io.hの
#define ADCW _SFR_MEM16 (0x78)
#define ADCL _SFR_MEM8 (0x78)
#define ADCH _SFR_MEM8 (0x79)
という記述がありました。
数字から察するに16bit,8bit,8bitということなのでしょうか?
>>510 なるほど。
となるとADCLだけじゃなく、ADCHの遷移とかもないとわからないな・・。
>>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
>>512 ちょっとまて、
コードが無茶苦茶だぞ
replybuf[3]=ADCL + (ADCH<<8);
replybuf[4]=~(ADCW
>>2 );
replybuf[5]=i_adcl|i_adch;
ADCSRA=0x96;
これらはほんとに正しいのか?
まるで意味判ってないだろ
こんなんでは質問しても時間の無駄
C言語仕様書とデータシート100回読み直して出直してこい
>>516 なんだこれ見る限り、AD変換値は何も問題なさそうじゃん。
bug[1]がADCの下位8ビット、buf[2]が上位8ビットだよね?
ひょっとして「ビットの並びでどうやって数を表現するか?」から知らない人?
>>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
ばらつきはあるけど、別におかしくないんじゃないか?
>>518 うっく・・・よく分からんです・・・
>>519 なるほど・・・!
ということは両方の値を足してやって、256を引けば良いということですか・・・
>>520 (ADCH<<8);
これ、
ADCH=1 とか、ADCH=2
のとき、計算結果がどうなるかわかるか?
いいから出直してこいよ
お前には無理だ
>>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はビットを意識できないとどうしようもないぞ
お前等やさしいなw
>>521 ビットパターンの表を見て、今やっと上位ビットと下位ビットの意味を理解しました。
>>522 恐れ入ります。
本当はもっと勉強したいのですが、月曜に最終発表なのでとにかく少しでも進めないといけないんですよ。
でもおかげさまで参考になりました。値の取得は結構うまく出来てるようなので、ビット表とにらめっこしながら正しい値を取れるようにしてみます。
学生か? 悪いことは言わないから一年やり直せ。
まあそう必要以上に煽るなよ。 逆切れしてる訳でもない奴を一方的に煽るのはちょっとみっともないぞ。 でもマイコン弄るのにバイナリによる整数表現も理解してないのは かなりマズいのは確かだねw
replybuf[0]=data[7]; replybuf[6]=data[6]; ・・わけわからん あまり時間は無さそうだが、 変数名ぐらいはきちんと考えてつけた方がいいぞ おれがこんなの受け取ったら作り直せと言うがなあ 一度tiny辺りのギリギリの環境で修行した方がいい mega88はもったいない
>>525 まだ1年なのでそれはきついっす。
>>526 ですよね。。
しかしこれだけでも少しは勉強になったので、次回以降は同じことでつまずかないようにします。
>>527 1から作る力がないんで、元々教授が作ったソースを改変して作ってるので、多分その名残だと思います。
USBで123456と送ると、612345にして返すとかいう単純なプログラムだった記憶があります
megaにしたのも「AD変換するならmegaのほうがいい」といわれて決めただけなので、入門どころか門前で土下座してるような状態です。
Palmに飽き足らず、 こんどはlinuxを潰す気か
Linuxに法則発動か。 ナンマイダブナンマイダブ。
上の方じゃcharにword押し込んでるのに指摘しない人ばっかだし。 組込み業界に法則発動してるんじゃね?ww
小出しにされたから
SH2で2chのシリアル受信を同時に行いたいんです。 データの取りこぼしがないようにDTCとDMAを 使おうと思ってます。 大筋でどんな感じにすればいいでしょうか?
ブー
>>534 H8系はたくさんやってるから助言はできるとおもうが、レートを書いてくれないことには
方針が確認できないじゃん。イックニか384くらいまでなら割り込みでも取りこぼさないし。
俺はふつうに割り込みで書いて、耐久性はringバッファのサイズで調整したぞ。
537 :
534 :2009/01/22(木) 17:02:55
ボーレートは38400です。 参考までにリングバッファのサイズは どれくらいまで大丈夫でしたでしょうか?
538 :
534 :2009/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 :2009/01/22(木) 17:28:11
連投すみません。 INTDI //割り込み禁止 の間違いです。
384なら普通に割り込みで問題ないと思う
割り込み突入時は割り込み禁止状態だよ。
SH2だと割り込みレベルで考えなきゃいけないんだった。
多重割り込みしないと取りこぼすよ 禁止にしない方向で
割り込み以外のところで長めの割り込み禁止があったら、地獄行きだろうな?
545 :
534 :2009/01/22(木) 19:12:29
みんなありがとう! とりあえず割り込み関数の中の割り込み禁止は無くしました。 が、やっぱり取りこぼしが発生しているみたいです。(;;) 受信したデータをmainループで回して処理していて、 その度にRecCount をデクリメントしてるんだけど、 処理が追いつかずにRecCountの値が MAX_REC_BUFを超えてしまうんです。 これは、DMA&DTCを使っても同じことなんでしょうか・・・
RecCount をデクリメントしてるところで SCIの割り込みがかからないようにしてる?
547 :
534 :2009/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 -------------------------------------------
INTDI uiSCI0_RecCount -= 1; INTEI って、感じかな? それでだめなら、SCIのエラーを調べてみるとか 1CHだけで動かして処理が間違ってないか確認するとか
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) こんなんでいいのでは
それだとPutがGetを追い越さない判定が必要?
追い越してもいい作り 256バイトの間読まなかったらそれはリードの責任ということで
それと、受信割り込みが2つあるなら
>>549 のセットも2つ用意するべき
1つのバッファで受けようとすると予期しないことが起こる
2つのバッファで受けて、メインルーチンで順番に処理する
フロー制御する場合は割り込み側でバッファのポインタを見て行う
フロー制御するなら、別にカウンタがいるのでは?
554 :
534 :2009/01/22(木) 21:46:33
>>548 さん
試してみましたが、駄目でした。
片CHのみの動作は各ch共にOKで、
SCIエラーなどは発生していないです。
>>549 さん
ご指摘のような感じにも書き直してみましたが、
状況変わらずです。
やはりメインルーチン側の読み取りが
追いつかないようです。
ちなみバッファは各ch用意しています。
外部からのシリアルデータは2つのCHに
常に同時に入ってくるような動作をするのが
ネックのような気もします。
マイコンの動作クロックは上げられないの? もしくはフロー制御は出来ないの?
もしくは受信バッファのサイズを大きくしてみるとか?
追いつかないってことは割り込みが連続で発生して メインルーチンに処理が戻ってこないとかかね もしそうなら見積もりが甘かったな マイコンの選定からやり直しだ
せめて割り込み部分はアセンブラでギチギチに書いてクロックを稼ぐ 多分何も考えずにCに吐かせると、えらい無駄なコードになってるだろうから
なんか論点ズレてると思うんだよね。
俺は恐らく
>>534 の書いたコードのアルゴリズムが根本的に下手なだけだとおもう。
「RecCount をデクリメント」なんて書いてる時点で変だと思う奴が誰もいないのかよ。
何かのフラグをメインでポーリングして1バイトずつチビチビ処理するような
コードになってるんだろうけど、そりゃそんなやり方じゃダメだろ。
デリミタ方式かSTX,ETXみたいなやり方かわからんけど、
一区切りのデータがバッファに入った時点で丸ごとバッファからデキューして
処理するように書かないと。
最適化してコンパイルしてなかったとか?
561 :
534 :2009/01/23(金) 01:05:59
皆さん、アドバイスありがとうございます!
>>555 さん
動作クロックをあげたり、フロー制御を入れたりというのは
出来ないんです。
>>556 さん
バッファのサイズはもっといろいろと試してみたいと思います。
>>557 さん
メインに全く戻らないという訳ではないです。
ただ受信のピークに取りこぼしが発生しちゃっている感じですね。
>>558 さん
アセンブラ・・・出来ることなら避けたいです・・・
>>559 さん
ご指摘の通りでポーリングで回して
受信したデータを解析、処理させています。
決まったデリミタがなく、通信の長さがまちまちのものから、
必要な一部のデータだけ抜き取らないといけないので、
どう区切るかが難しいのですけども。
メインでちまちまとデータを解析するなら、DTC使おうが、
DMA使おうが状況は同じでしょうか?
>>560 さん
そんなことはないです。
>>561 だから一番誰でも思いつく単純でわかりやすい方法は、
少なくともデータの区切りかどうかの判定まではISRの中でやってしまうこと。
一区切りのデータを受信した時点で初めてフラグを立てるんだよ。
で通常ルーチンでバッファの中のひとまとまりのデータを解析すればいい。
2CH分のデータ解析処理を同時に動くように工夫した方がいいような。
他の割り込みは使ってる?タイマとか。SCIの割り込みレベルを最優先にしてる? 256というサイズは何から決めた?通信の1バーストがそれより短いことは確実? バーストとバーストの間のお休みはどの位? 決まったデリミタが無い状況で何を手がかりに切り出してるの? 俺が書いたpgmでは、デリミタを認識して状態遷移する部分はメインループに書いたな。 割り込みはringに蓄積するのみ。遅いレートならメインループ1回に1文字取り出す方式でも 充分ついていったし。384なら、while(今ringに溜まってる分)取り出す方式のがいいかもだが、 2ch並行処理がぎくしゃくすると思うから、前者を奨めるなあ。
565 :
564 :2009/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倍ぐらいなら十分以上に余裕があるはず。
>>538 1バイトしか読んでないような気がするんだが、
なぜ FIFO が空になるまで読み出さない?
解析が始まると終了するまで処理続けてるとか?
568 :
534 :2009/01/23(金) 18:19:49
皆さんから頂いたアドバイスに基づいて、 シリアル受信部で一定の処理の後、 フラグを立て、そのフラグをメインループで 見て解析を行うように変更してみました。 しかしながら、片方のCHは動作してくれるものの、 もう片方はデータを取りこぼしてしまい 正常に動きません。 やはり、シリアルの受信をDMA、DTCで バッファに格納しないとだめなのではないでしょうか? (もし理解に誤りがありましたら、ご指摘ください。) タクトタイムは1秒間に20回ほど、 1回につき両CHにそれぞれ240バイトほどの データが送られてきます。
データを取りこぼしてしまいって、 通信エラーじゃなくて解析が間に合わないってこと?
570 :
534 :2009/01/23(金) 18:54:36
受信したバッファとラインモニタの内容を 比較すると受信したバッファが飛び飛びに なっているんです。
試しにシリアルの速度落としてみれば? 速度化ロジックかすら分からないのだとしたら。
マイコンの動作クロックが気になる。
574 :
534 :2009/01/23(金) 20:00:01
水晶が12.288Mhzで 動作モードはモード2。 クロックモードは3(MD2=1、MD3=1)です。 送信元の速度は固定なので、速度は落とせないんです・・・
取りこぼすCHの割り込み優先順位を上げてみる。
576 :
H.K :2009/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回目にならず終了してしまうため直してください 。
嫌です
578 :
534 :2009/01/23(金) 20:50:36
>>575 さん
CH1を優先すれば、CH2が取りこぼれ
CH2を優先すれば、CH1が・・・
割り込み処理をいじって負荷が掛かるようになったんじゃないの?
>>578 対向機の速度を変えられないならダミーを作ればいいじゃない。
Windowsにも相変わらず端末エミュレータがついているんだから。
RecCountにvolatileつけないとコードによっては最適化でとんでもないことになってるかも?
>>547 uiCHってどうなってんの?
両chでenqueueされたら、もちろん両chでdequeueしてるんだよね?
584 :
534 :2009/01/24(土) 19:39:19
>579 シリアルの割り込み時に、まとめて受信する。 なんて出来ましたでしょうか? >580 上に書いたのそんなに変わらないです。 >582 RecCountにVolatileはついてないですが、 同時にデータが入ってこなければ、ちゃんと動いているんですよね・・・ >583 メインループでCH1とCH2を交互に呼んでいるだけですよ。
割り込み処理中にSCI2.SSR.BIT.RDRFが再度立つ可能性がある。 今の状況だと、割り込み処理が悪いのかデータ解析処理が悪いのかわからないので、 片CHをデータ処理しないで空読みだけして、 バッファの内容がおかしくならないかどうか確認してみては?
586 :
583 :2009/01/24(土) 20:08:16
>>584 >>547 では各chバッファにデータが入っているかどうかを
main側がどのように判定しているのかが読み取れない。
>>547 のコードをCH1(uiCHが0)とCH2(uiCHが0以外)で交互に呼ぶだけだったら、
とても正常に動くようには見えないよ。
だな。
>>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 :2009/01/25(日) 11:31:39
>585さん 試してみたいと思います。 >586さん 547の前に -------------------------------- if (uiSCI0_RecCount==0){ return(-1); } ---------------------------- と書いてます。 >587さん SH2-7144を使っています。 INTDI/INTEIに関しては、前にもご指摘をいただいたので、 ・割り込みの入り口・出口にはなし ・RecCount--にだけ書く はやっています。
>>588 それだと、CH1が受信していないあいだは、CH2はチェックされないのだが。
590 :
534 :2009/01/25(日) 13:18:34
>589さん いや、当然CH2も同じようにチェックしてますよ。
>>590 「547の前に書いている」と言っているが、いったいどういうコードになってるんだ?
こちらとしてはコードがバグってる可能性を疑っているのであって、
「当然正しく作ってますよ」的な説明では全く意味が無いのです。
もしコードのレビューが必要なら、できるだけ無加工なものをどこかに貼っておけば、誰かが見るでしょう。
592 :
534 :2009/01/25(日) 14:46:38
とりあえず、547の関数全部書いて見ますね。 この関数をメインループの関数から呼び出して コードを解析する流れとなっています。
593 :
534 :2009/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); }
>>588 MyDocumentsに rjj09b0026_sh7144.pdf があった。 このシリーズでいいよね?
593のコードは自分のテキストエディタに貼って、自分の書いたコードと見比べてみるよ。
>>593 if (uiSCI0_RecCount==0){
return(-1);
}
}else{
if (uiSCI2_RecCount==0) {
return(-1);
}
これは・・・いいのか?
>>593 uiSCI0_RecCount と uiSCI2_RecCount をvolatileにしないと危ないが、
そこ以外は良さそうだ。
そもそもリングバッファのサイズは256で足りてるのだろうか。
enqueue側でオーバーフローした場合に検知できるようにしてみたら?
597 :
534 :2009/01/25(日) 15:28:24
>594さん はい。そのシリーズです。 >595さん 返り値が-1の時は解析処理を行わない。という風にしてます。
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なの?
>>597 そうじゃなくて
uiSCI0_RecCount==0
uiSCI2_RecCount!=0
になることはないってこと?
600 :
598 :2009/01/25(日) 15:39:20
おお、俺以外にも暇人が多数。
>>597 良かったね。
それにしても関数の設計が冗長だな。なんでmainから呼ぶのに「このCHのデータ返してね」
と呼んで、しかも返却値に「無かったよ」とか作るんだ。
>>565 のように作ればイベントドリブン
な作りにできるし、「無かったよ」 なんていうリターンコードも無しにできるのに。
601 :
598 :2009/01/25(日) 15:45:47
割り込み処理は、CH毎に別個に用意してるよね?=ベクタが指すルーチンは (コードが似ていても)物理的に別ルーチンにしてあるよね? それぞれのCH毎に、ライトポインタ・リードポインタ・RecCountを持っているよね? ライトポインタの更新は割り込み側からのみ、リードポインタの更新はメインループ側からのみ 行っているよね? RecCountの更新については既に確認したけど。
602 :
598 :2009/01/25(日) 15:56:57
まだ「冗長」というだけで間違いは見つからないが、とりあえず、呼び出すときに各CHの RecCountが0でないときのみ呼び出す形にするだけで、return(-1)が要らなくなる。 sio_rec1( )とsio_rec2( )に分けると引数のucCHが要らなくなるしそれを判定するif文も要らない。 残る本質はリードポインタ(RecGetがそうだよね?)からのgetとRecCount--だけになる。 コンパイラによっては-=1;と--;で違うコードを吐くものもあるので、減算は--;でやって欲しい。 また何か気が付いたら書く。チェックして欲しいコードは貼ってくれ。ちょっとお茶タイム。
603 :
598 :2009/01/25(日) 16:38:06
>>599 の指摘について考えてみた。どちらかのCHについてreturn(-1);を返す条件が成立した時
にも、もう一方のCHについては処理すべきデータがあるかもしれないわけだ。そちらは次の
メインループで引っかかると考えているのだろうが、そこに遅れが入り込む余地があるね。
呼び出し側で(565のように)RecCountを判定するのも、呼ばれ側で判定するのも、僅かな
タイミングの違いだけで同じ、と考えたみたいだけど・・・違うのかもしれない。
604 :
598 :2009/01/25(日) 16:45:41
メイン側は、sio_rec( )の結果を(-1でない場合は)受信したバイトとして解析処理に渡すのだと おもう。この推測で合ってる? とりあえず、上で冗長と指摘した部分を刈り込んでみては? sio_rec( )を呼び出す前にRecCountを判定する。sio_rec( )はRecCountがある(=非0)場合のみ 呼び出されるのだから、必ず減算処理をしてよい。CH0と2でルーチンを別にすれば引数も それに対する判定も要らない。
1レスにまとめて書いてくれよ
606 :
598 :2009/01/25(日) 17:31:07
もう就寝時間・・・あとは明日未明にです。お休みなさいZZz.・・・
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 :2009/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が潤沢でないから、でいいのかな?
>1回につき両CHにそれぞれ240バイトほどの >データが送られてきます。
610 :
534 :2009/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 :2009/01/26(月) 15:30:44
>598さん たくさんのレス本当にありがとうございます。 >2CHというのは、CH0/CH1なの?CH0/CH2なの? CH0 → SIO0使用 CH1 → SIO2使用 となっています。 >関数の設計が冗長だな 指摘されて、すごく勉強になっています。 コードが冗長部分も見直していきたいと思います。 >割り込み処理は、物理的に別ルーチンにしてあるよね? はい。それぞれ別ルーチンで持っています。 >CH毎に、ライトポインタ・リードポインタ・RecCountを持っているよね? はい。持っています。 >メイン側は、sio_rec( )の結果を(-1でない場合は)受信したバイトとして解析処理に渡すのだとおもう。この推測で合ってる? はい。その通りです。 >受信エラー割り込みはベクタが別ですよね。 >そちらではエラーフラグをリセットしてますか? はい。しています。 ここらへんは別ソフトでの動作実績があることと、 各CHの独立した動作で問題ないことから大丈夫だと思うんですが。
612 :
598 :2009/01/26(月) 15:55:35
>1回につき両CHにそれぞれ240バイトほどの
>データが送られてきます。
いやこれは覚えていますが、その1回ごとの間のお休みがどの位、ってのはまだ未回答かと。
お休みが2mSぐらいだったりしたら、切れ目無しと変わらないし(w
1回240バイトほどで、「次が来るまでに解析処理が取り出し終わる程度に十分間隔が長ければ」
処理が間に合うんですよね。
>>611 の回答からすると、ドライバ層は(多少冗長でも)だいじょぶっぽいですね。
するとメインの切り出しのほうを疑うべきじゃないかな。ringバッファにデータがあればそこから
バイトを取り出したあと、状態遷移をするような造りを、CH毎に書いてると思うのですが、
その辺はここに出すのはヤバいの? なんならメールで貰って見てあげてもいいよ。
とりあえずポインタとカウンタ変数、計6つ?をregisterにしとき。 それとバッファサイズを256にしておけば、unsigned char宣言で >if (uiSCI2_RecPut >= MAX_REC_BUF) { >uiSCI2_RecPut = 0; >} こんな処理は必要なくなる。
614 :
598 :2009/01/26(月) 18:07:06
>>534 613は信じちゃダメだよ。 今日はもう寝ます。また明日未明Zzz・・・
615 :
613 :2009/01/26(月) 18:13:22
は?なんでだよ。255(0xff)をインクリメントしたらオーバーフローして0(0x00)になるだろうが。 そんなことも分からん人がアドバイスしてていいのか?
データ解析後の処理って、データ解析処理と平行して処理できるようになってる?
>>613 は後でバッファサイズを増やしたくなったとき、
もしくは減らしたくなったときどうするんだろうな
>>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 :2009/01/27(火) 04:00:48
リングのmaskのことじゃないよ。>レジスタにしとき。←その6つはメモリであるべきでしょ。 リングのmaskなら608の書き方で615と同じに最適化されますよ。 もうじき朝飯食って出勤だから、また534と話ができるのは午後になっちゃうんだよな。 とりあえず、612の最後の行のためにメアド入れとく。
>>618 その「常識」とやらはリングバッファを知ってるかどうかとは関係ない。
明示的にラップさせたほうがバッファサイズの調整が柔軟にできるだろ。
2の累乗サイズに固定することにたいした意味は無い。
たまたまバッファサイズが2の累乗になっていれば、明示的にラップさせる
コードをコンパイラが最適化の一部としてマスクなりオーバーフロー任せなりに
することもできる、かもしれない。そんなことはほとんどの場合ではどうでも
いいだろう。
本当に数命令の違いに意味があるなら、目立つコメントでバッファサイズの
制約を記載すべきだ。えらそうに「常識」なんて言わずにな。
621 :
デフォルトの名無しさん :2009/01/27(火) 04:18:27
Linuxerにとっては常識。 ドザは常識が無い。 バカに組み込みが無理な好例と言えよう。
nintendo ds と psp でlinux動かしたり出来るみたいですけどこれも組み込みなんでしょうか? どうもusbドライバをハックしたり、ファームフェアをアップするときに自作のカーネルを入れてようなんですけど。
>>620 >>618 はな、
>>608 が示した
> uiSCI1_RecPut = (uiSCI1_RecPut+1)&(sizeof ucSCI1_RecBuf-1); /* リングポインタ更新 */
これと同じ意味なんだよ。
たまたま、じゃねーの。
常識なんだよカス。
>>622 ゲーム機がARM使ってるからlinuxで動かせるねってだけ。
LINとかの1線インターフェース(GND線含めて2本) を試してみたいんですが、参考になるサイトが少ないです。 誰か知ってる人いませんか? 非同期のI2Cみたいな考え方でいいんでしょうか?
626 :
613 :2009/01/27(火) 11:02:13
>>534 データを取りこぼす原因としては
1)割り込みが間に合わずシリアルレジスタから読み込めなかった
2)データ処理が追いつかず受信バッファがフローした
のどちらかだと思うけど、今回は多分2)の方だよね
(本当は、そんなこと簡単に見極められるんだから
>>534 さんが調べて示さなきゃならんけど)
で、1回分の受信サイズを240として、2回分以上の512にバッファサイズを設定しても
取りこぼすってのは、根本的にデータ処理が間に合ってないということなので、
>>534 さんがするべきことはとにかく高速化の1点。
なので高速化の一手法として
>>613 を書いたわけなんで、まぁ参考にしてください。
仮にレジスタ変数として使うことが出来たら今回のケースじゃ割込禁止/許可もいらんのじゃないか。
一度、コンパイル結果のアセンブリソースを見てみるといいよ。どういう無駄な処理が入ってるとか
すぐ分かるよ。
uiSCI1_RecPut はどこで更新されるの?
このスレ人は居るみたいだけど 話にならんレベル
>>627 ringの書き込みポインタだから、受信割り込み処理の中。そこだけでいい。
mainで取り出すほうは読み出しポインタ(_RecGet)をring状に使って読み出す。
どれだけringに滞留しているかのカウンタが_RecCountで、この変数だけが割り込みと
メインループ両方から更新される。
>>628 もうちょっと遊びたかったのに、534も呆れて逃げちゃったみたい。
DTC、DMA使っても同じ結果になるじゃないの、今回の場合?
631 :
534 :2009/01/27(火) 16:38:10
>613,626さん 確信犯的にオーバーフローさせるとは。メモメモ。 状況に応じて使ってみたいです。 アセンブリコードも眺めながら、最適化やってみますね。 >616さん なっていますよ。 解析の進行具合をフラグで持つようにしています。 >598さん >その1回ごとの間のお休みがどの位か お休みは短くて60msくらい、長ければ100msくらいでしょうか。 >メインの切り出しのほうを疑うべきじゃないかな。 なるほど。 コードの記載はもう少し冗長な部分を省いて、 それで解決出来なかった時にさせてください。 実は今日から1週間ほど治具を貸し出すことになってしまい、 今は十分なテストが出来ないんです。 治具が戻ってきたら、また結果を書かせていただこうと思いますので、 どうぞよろしくお願いいたします。 >627さん >629さんのおっしゃっている内容で合っています。
632 :
598 :2009/01/27(火) 17:42:30
おお、よかった。まだ呆れられてはいなかったか。ではまた明朝Zzz・・・
633 :
534 :2009/01/27(火) 17:55:46
>630さん DMA、DTCの使用も試みているんですけど、 別の理由でまだうまく行きません。 DMA・・・受信は出来たけど、 解析処理ルーチンが未完成。 DTC・・・ベクタの設定とか書いてみたけど、 転送先に何も送られて来ず。 何か間違っているみたい。 >598さん 呆れてなんてないですよ。 一人で煮詰まった状態で作業しても捗らないですし、 とても参考になっています。
634 :
598 :2009/01/28(水) 04:45:00
DMAは、受信する長さがきっちり決まってないと使えないよね。その辺はだいじょうぶなの? 石がSH2で38400が2CHなら、割り込みに食われる比率なんて屁みたいなもんだから、 今回はringバッファでいいと思うけどなあ・・・ 受信の物理層を速くしても、そこじゃないって ことなら、アプリ層の改善は必須だし。 水晶は12.288とのことでしたが、RISC方式の説明の所には40MHz動作時・・・とかある。 SHで12M程度の動作のわけないなと感じてたが、実際の動作周波数はどの位?
635 :
598 :2009/01/29(木) 15:09:34
メインタスク側で受信フレームを再構成するときの常套手段: ・フレームにタイマ張る。「頭」バイトを検出して「中身待ち」に遷移するときに、bitrate*フレーム長 から想定される時間*(1.5〜2.5)ぐらいのタイマを張り、break時には「頭待ち」へ戻す。 フレームの途中でコネクタが抜けるなどしたときの回復手順。 受信エラーバイトを含むフレームを捨てるようにしてある? ・コードがASCIIとかの、8bitの中でも限定された文字セットなら、受信エラー時の文字を (FFとかの)使わない文字に変えてringに入れる。 ・通信がバイナリとかで、8bit全ての文字を使うなら上の手法は使えないので、割り込みから メインに伝えるイベントコードを16bitにして、0000〜00FFは受信バイト、80xxは受信エラー のバイト、とかやる。 メイン側では、フレーム再構成の際に上記の「受信エラー文字」を読みとったら「頭待ち」へ 遷移する。
636 :
598 :2009/01/29(木) 15:15:56
「尻尾」文字を検出したら、「頭」とは違う長さのタイマを張り、「回線切れ」 を監視する。 「お休み時間」の2〜2.5倍ぐらいにするのが一般的。break時には 「受信したデータ」を消し 「受信無し」状態に戻る。( 状態は「頭待ち」 だが、受信済みデータも無し(=起動時と一緒) ) 一般的な手法助言はこんなもんかと。あとは具体例が出されたら考える。
以上、2ch無料サポートセンターでした
638 :
598 :2009/01/30(金) 15:46:40
んま〜、なんとフォローのいいこと♪ 534さんが出てこないのは、そうとう悩んでるな
639 :
デフォルトの名無しさん :2009/02/01(日) 07:12:51
8bitMCUで、割り込みルーチン内で32bit変数をカウントし、 メイン側からその変数を読み出したいのですが、 割り込みを停止せずにアトミックに読み出す方法はあるでしょうか? 割り込み間隔(割り込み中時間ではなく)は、 メイン側の1回の変数参照完了時間よりも長いと仮定します。 割り込み中のカウントはで32bit変数を+1インクリメント する単純なものです。変数がオーバーフローしても特に処置なしです。
>>639 この場合は単純な二度読みして一致しているかどうかでいいんじゃないの?
(チャタリング除去の場合は無駄だ〜なんていうとまた誰か発狂する奴が出そうだがw)
リトルエンディアンとして、読み出しの最初と最後に1バイト目(8〜15bit)を読んで、
一致していればアトミックに読めたと判断する。
もちろん2回のリードの間に256以上インクリメントされる可能性がある場合は
この方法は使えない。
>>640 の手法に感動した。 でも、
>>639 の必然性は何なのだろうか?
読み出しの前に割込禁止して読み出し、すぐ割込許可、で素直な手法だと思うが。
ringバッファの滞留数だったりしたら、32bitは「やりすぎ」だとおもう。16bitで充分。
8bitMCUということを考えたら、ringは256までにして8bitでもできるぞ。
それなら割込禁止とか考えないでもアトミックにできる。
>>639 アトミックでない方法でカウンタを2回読み出して、
その値が一致するまで繰り返し読み出す。
一致したらその値が正解。
643 :
642 :2009/02/01(日) 14:41:47
ごめん、リロードせず書いたら既出だった。
>>641 起動後の時間をタイマ割り込みで例えば1msごとにカウントするなら、32bitくらい欲しい。
このタイマカウンタが1つあれば、個別用途のタイマはその差分で計れるしね。
起動後の時間が必要な場合もあるのか〜。俺の作ったのは 「時刻」 か、インターバルしか なかったから、その発送はなかったわ。
RTCと起動後の時間だけあればいい。 そこから派生して時刻やインターバルがとれるのだから。
まあ起動後の時間云々はちょっと例外的というかなんかシュールな例えのような 気もするけど、ラッチがついてないHWカウンタやタイマは(場合によってはADCあたりも) 非同期的な更新を止めてアトミックに読むというのは物理的に不可能だからねえ。
タイマーの割り込み許可を一時的に止めるとか?
648 :
デフォルトの名無しさん :2009/02/05(木) 12:05:26
組み込み系の募集広告で「エレキとソフトの間の作業をお任せします」と記載 「エレキとソフトの間の作業」ってどんなですか? やはりプログラム言語は使うのでよね?
エレキとソフト両方判る人募集ってとこか? 間ってさっぱりわからんが
650 :
デフォルトの名無しさん :2009/02/05(木) 13:11:03
因みに私はエレキの意味も分りません。 すいませんが、教えて頂けないでしょうか? m(__)m
エレキって、回路図とか読めますかってことでは?
エレキてつまりハード(回路)屋かな? チップから割り込みが入らないからオシロで調べるとか、 デバドラ書くとかそんなんじゃね。
>>648 応募する気なのかどうか分からないけど、意味が理解できないなら
無理だよ
概ね
>>653 の通りだよ
初心者以前の者です。質問させて下さい。 CodeWarriorの評価版でCソースをコンパイルしてARM9用の実行プログラムを 生成したいのですが、評価版のダウンロードページにある、どれを使えば いいのでしょうか。(CodeWarrior for XXで分かれ、バージョンも9.2まである) すみませんがお分かりの方、ご回答いただけると有り難いです。
>>655 ざっと見たとこ、ARM9用はない希ガス。
FreeScaleに聞くほうが手っ取り早いんじゃね?
ARMで安い環境ないですか 3千円ぐらいで
>>657 何の環境?
開発環境なら、gcc+Emacsだと只だぞ。
親戚のガキをぶん殴ってDSを取り上げれば0円だぞ?
>>656 ありがとうございます!!!!
大昔に業務アプリケーション方面のCプログラミング経験があるぐらいで
ICEにさわる必要ができてしまいました。数年前の資料ではCodeWarrior
を使用しているようでしたが、評価版がよくわからないのでIAR(30日)
を試しました。が無礼九ポイントで停止しません;;
660です。ICEは別製品を使っています。マニュアルに書いてあるとおりの 設定はした(つもり)なのですが。泣きたい。
情報を小出しにする奴は市ね
一人で存分に泣いた後、上司にしかられてまた泣けばいい。
ごめんな、H8系なら助言できることは多々あるのだが・・・
無礼九ポイントを通過してないのでは?
>>661 CodeWarriorでARMだとi.MX用だと思うが
あのIDEってCodeWarrior用のJTAG Pod以外対応してないんじゃないのか?
あの製品の仕様はアプライドマイクロシステムズ時代から
買収されるたびに迷走してるんで、今はfreescale製のCPU以外は
最新版でサポートされてるか怪しいぞ
667 :
デフォルトの名無しさん :2009/02/25(水) 22:44:34
電気系大学卒業で現在回路設計をやっているものですが、 組み込みプログラムの世界にいきたいのですが、 この世界は未経験でも雇ってくれるものなのでしょうか? 会社の規模や、給料にはこだわりませんが、スキルを身に付けたいのです・・
規模や給料にこだわり無いなら探せばあるだろ。
>>667 回路設計側は、ある意味良質な人材が激減してるよ
つか、プログラムもハードも目的を達成するための 1 手段
まぁ、がんがれ
>>667 組み込みでもソフトよりFPGAとか扱えるようになったほうが、仕事あるんじゃね?
オレはソフト系だけど、来月から仕事はいってないわ
弊社では経験の有無を問わず広く技術者を募集しています。 首都圏にお住まいでしたら社内広告に出ている適職フェアにも 参加していますので、ぜひ脚をお運びください。
673 :
デフォルトの名無しさん :2009/02/26(木) 23:16:44
組み込みソフトの勉強したいんですけど、何かいい教材ないでしょうか? 組み込みソフトっつても、WindowsCE、ITRON、Linuxなどの組み込みOSです。 書籍だけならいっぱいあるけど。できれば実機が付いてて、実際に動かせるものがいいです。 WindowsCEのeBox-2は販売終了になってるし、、 興味があるのは、OSならWindowsCE、CPUならARMかSHあたりかな。 はじめはITRONのが判りやすいとは言われてるけど。 予算は3〜4万程度は出してもいいかなと思ってます。
そんなもん勉強して何がしたんだよ 3〜4万程度しか出せないならやめとけ
WindowsCEもLinuxも環境が整いすぎているから、動かしただけで満足して終わる可能性は高い。
ドライバとか低い所に手を出さない限りPCとほとんど同じだからなあ…
まぁそんなこと聞いてくる時点で組込みへの適正 0 に近いって事を自覚しろ。
ARMならCQの付録基板待ちでいいじゃない、どんな出来かわからないけどw
今回は誰がやってるんだろう。 某氏が関わってるとは聞いてないけど
EZ-ARM7よりスペック上で価格がどんなことになるのか楽しみだわ
TRON関係者の被害妄想を加速させないでください。
リアルタイム性を出すのって難しいよね
>>685 リアルタイムという定義をもうすこし勉強するよろし
688 :
デフォルトの名無しさん :2009/02/28(土) 23:37:43
俺はOSなしの仕事ばかりなんで、ドライバ開発者の仕事が逆に見えないんだけど、ある程度OSレベルでインターフェースが決まってて、その中身をコーティングする感じなの?
>>688 通常 itron あたりだと, ハードを叩くタスクのコーディング規約的なもの
だけど, TCP/IP スタックとか, ファイルシステムとかの賢いライブラリが
既にあって, そのライブラリで使用可能な新規デバイスを動作させようと
思った場合は, そのライブラリのコーディング規約に従う必要がでてくる.
で, Unix とか Linux とか Windows とかのドライバ開発者は,
上記コーディング規約とか上位層用のインターフェースに従ったものを
作る必要が発生するため, 若干めんどうなことになる
だけど, 実質的にデバイスに対する制御は一緒だよ
>>690 そういうのを「コーディング規約」とは言わんと思うが。
>>691 API とも言いにくいよな. まぁ, それ的なものって事で許してくれ
コーリングコンベンションのことかな? 俺もOS無しばっかりなので、ドライバ層がタスクで だいじょぶなのかな? とかいつも心配になる。余計なタイムアウト処理がついてくるような。
>>692 ドライバインタフェースて言ってる。
これが一般的かどうかは知らんが。
>>694 それは違うと思うぞ。
697 :
デフォルトの名無しさん :2009/03/01(日) 11:47:20
>>689-690 688だがありがとー。
タスクにするのか。制御するデバイスが外付けのADCやDACだったりすると特に大変だな。
ドライバタスクに制御が渡るまでの遅延がそのままLFPになるし。
LPF、ローパスフィルタだ…すまん。
>>697 ならないでしょw
っていうか、遅延がLPFになっちゃうって根本的にHWの設計おかしいよ。
1バイトか4バイトか知らんけど、サンプリング毎に逐次的にPCのCPUが処理するHWなわけ?
工業高校の落ちこぼれでもそんな糞設計しないよ。
普通にバッファぐらい付けようよw
>>697 じゃないんだが
その昔 FIFO すら付かない素の DAC 渡すアホなハードを渡してくれた奴がいた
これじゃ音が歪むって言って突っ返したがwW
701 :
デフォルトの名無しさん :2009/03/01(日) 16:54:05
>>699 ああ。なんか俺が色々誤解していることが分かったwwwwwサンクス。
なお、俺はOSのドライバ開発をしたことないので質問したので、
ADCとDACの話は俺の想像であって、実際にある基板の話ではないよ。
PCの話は分からないけど、俺はSH+組込みOSのシステムを想像してた。
で、ワンチップマイコンで良くやるような、タイマ割り込みをトリガにした
周期的なデバイスへの直接制御を、tickに縛られる(しかも1tickはmsec単位?)
OSのタスクでどうやって実現するのだろうかと疑問に思ってた(^^;
だが、そもそもそういうことではなくて、OSを使うようなシステムものの仕事では
上のような処理はFIFOつきバッファを使ったりFPGAを使ったりして、
CPUのソフトウェアの影響を出来る限り排除するように設計されてるってことだな。
>>701 そんなにスピードを求められない(tick単位で処理できればいい)デバイスの場合、ソフトで制御することもあるよ。
割り込みハンドラなら最優先で処理されるし、RTOSならタスクに優先度を細かくつけれるし。
FIFOと言われると、FirstInが何のことなのか判らなくなる時がある LIFOを頭に浮かべて、ああ、FIFOは待ち行列だったか・・と思い出すわけだ これが非常にまわりくどい 最初からきゅーとか待ち行列と言って欲しい
705 :
デフォルトの名無しさん :2009/03/01(日) 23:45:34
俺的にはスタック、キューって言ってくれないとわかんない
>>704 変な人だな。
それはひょっとして頭の中に「ところてん押し出し器」的な図式が
イメージできてないからじゃないの?
>>704 うちら界隈だと、チップのマニュアルで FIFO 表記の方が多いから、
ハードで実現されてる奴はキューとはあんまり言わんな
[FL]I[FL]O のほうが抽象的な感じだな。 スタックとかキューというと実装が少し見える感じだ。
ここは古典的に FIFO=ところてん LIFO=積み○○ とか
FIFO=貫通式オナホール LIFO=巾着式オナホール
おまえ生きてて恥ずかしくないか?
ワラタw
713 :
710 :2009/03/02(月) 20:08:37
『奥が深い』とはまさにこのことよ。
全然たとえとして成立してないと思うけど。 頭悪すぎないか。
>>710 のチンコが着脱式であると仮定すれば無理な話でも無いな
716 :
デフォルトの名無しさん :2009/03/29(日) 13:26:03 BE:1249790786-2BP(1028)
41歳から 組み込みエンジニアって ありでつか? RTOSならやったことあるけど・・・ アセンブラも出来るけど・・・
ありかって聞いてる時点で駄目なんじゃね?それなりのキャリアがあればありかなしかなんて自分でわかると思うけど。
あぼーん
>>718 いまいくおー ε=ε=(っ・∀・)っ ゴーゴー♪
720 :
デフォルトの名無しさん :2009/03/29(日) 22:08:25 BE:1249791168-2BP(1028)
ここ10年鯖系やってたんだ 今、FPGAのカスタムCPU向けの派遣やってるんだけど なんか、この業界って システムの分析とか設計とかインタフェ〜スも決めないでなぁなぁで仕事してるし 業界慣行違うなと・・・ 社内試験もユ〜ザ〜向けドキュメントも 超いい加減で 楽で Indeed調査によると 給与もいいみたいだし・・・
人手が常に足りてないからぬるいんだよ。 良くも悪くも「動けばOK」な面も、てそれは鯖も同じか。
弊社では、年齢経験を問わず広くエンジニアを募集しております。適職フェアで、是非お会いしましょう。 # とは言え、年齢がそれなりの人はそれなりの報酬のためにはそれなりに上流工程もこなせないと厳しいけど。
リク板じゃないからちょっと板違いかもですが 外注募集してるとこないですかね? 当方、経験15年以上なんですが
725 :
723 :2009/03/31(火) 10:47:21
へうでH8S/2000シリーズ使っての質問です。 resetprgで、SP初期化・割禁の後、_INITSCT()でRAMにゼロまたはコードされた初期値を入れ、 それからHardwareSetup()を呼び出して内蔵レジスタ類の初期化という順序がお奨めらしい。 この順序である必然性みたいのはあるのでしょうか? 内蔵レジスタの設定に、入力クロックを2倍する設定とかもあるので、RAMの初期化は レジスタ類初期化の後のほうがいいように思えるのですが。
727 :
デフォルトの名無しさん :2009/04/06(月) 06:44:45
sageで書いてしまったorz・・・上げます
うぜえなこいつ
>>726 そこまでわかってるなら、必然性はない。
単にHardwareSetup()内でグローバル変数などが初期化済みになるようにしてるだけ。
730 :
726 :2009/04/06(月) 09:01:15
ああ、なるほど。そういう配慮もあり得ますね。なんかへうが出したとこ触るのって畏れ多くて(w 解ってやる分には後でもだいじょぶってことですね。 ありがとうございます。
>>730 畏れ多い?
すぐにそんな気持ちは無くなるよ。ヒヒヒ
>>730 オレも最初そうだった。
へうのやることは、「親切心でやってみた」程度に考えておいたらよいと思う。
付き合いが長くなると、気が利かなかったりする面も見えてくるが、片目をつぶって辛抱しなさい。
どおしても〜ダメだったら〜帰っておいで〜♪
妹よ〜
たまには三人で酒でも飲もうや
735 :
デフォルトの名無しさん :2009/04/07(火) 04:29:09
H8Sから上のシリーズって、入力クロックを増速するレジスタがありますよね。 これをデフォのまま=増速せずに使ったら、何か利点があるんですか? 例えば消費電力が小さいとか・・・
ハードウェアマニュアルをよく読みませう。
737 :
デフォルトの名無しさん :2009/04/07(火) 22:05:07
クロックが遅ければ消費電流が少ない 別に早い必要が無ければ早くする必要はない
738 :
735 :2009/04/08(水) 05:20:44
>>737 ありがとです。 実際クロック2倍で消費電流も2倍になるのでしょうか?
>>736 例えばH8S/2378の 23. クロック発振器 の章をよく読んでも、メリット・デメリット・電力等に
ついての言及が無いので聞いてみたのです。逆に低消費電力状態の説明の章にはクロック発振器
との関連は言及されていません。この記述がそうだよという箇所がありましたら示唆ください。
なぜメーカに聞かない
ユーザーじゃなくても答えてもらえますか?
二倍じゃないし、使用状況によるとしか書けないだろ
>>738 DC特性の下の方に消費電流(max)の計算の仕方が書いてあるでしょ。
744 :
デフォルトの名無しさん :2009/04/08(水) 18:16:53
インターフェース5月号をかって、組み込みについて勉強したいです。 でも、明確に何が作れるのかわかりません。 教えて得ろ胃人!
745 :
デフォルトの名無しさん :2009/04/08(水) 18:28:00
くみこさんキスしていい?
>>743 f=33MHz,Vcc=3.6Vで計算してみたら
748 :
デフォルトの名無しさん :2009/04/08(水) 21:47:59
データシート見ると Iccmax = 15 + 0.37 × Vcc × f 小学生でもできる計算じゃん
>>748 やっと見つけた。そこにたどりつく前に挫折してました(w
動作周波数依存で変わる部分は、消費電流の2.5%ぐらいと理解すればよさそうですね。
レジスタの設定なんかのとこは読むけど、電気的特性って標題見ただけでここは読まない
と決めてました。
ここまで馬鹿だといっそ清清しいな。 >746の条件を>748に入力したら約60mA、クロックを半分に落としたら約40mAで、 仮にクロックを1MHzにまで落としたら約16mAってことなんだけどねぇ。 それとも、15[mA]+0.37*Vcc[V]*f[MHz]って計算式の意味が判らないんだろうか。
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ってところは、スリープのいくつかのモードで小さくするんですね? 周辺モジュールまで止めるか、クロックまで止めるか、とか。
みんな優しいな
755 :
デフォルトの名無しさん :2009/04/12(日) 04:42:14
H8S/2378シリーズのアドレス空間は、内蔵RAM00FF4000〜00FFBFFFです。(RAM32K) RAM16Kの2368シリーズのRAMアドレスは、00FF8000〜00FFBFFFだろうと思い、 ルネサスのサイトで2368シリーズのpdfを見たら、3.4 各動作モードのアドレスマップ の章の アドレスが全て□OM:□□バイト □AM:□□バイト アドレスも□'□□□□□□ とかに なっていて、確認できませんでした。 どなたか実際の数値を確認した人いらっしゃいますか? 2行目で合ってますか?
もっと後の方に内蔵RAMの章があるだろう。 そこに書いてないか?
それフォントの問題だよな。Windowsのpdfリーダーは用意出来ないんか? まぁ確認しといてやったけど、2ちゃんなんか信用しないでpdfをちゃんと見られる環境を作った方がいいよ。 2360F/2363/2365 リザーブ領域: H'FF4000-FF7FFF 内蔵RAM: H'FF8000-FFC000
-FFBFFFの間違い。
つーか
>>756 の言うように13章を参照せれ
なんどもごめん、よく見たら18章だった。
760 :
755 :2009/04/12(日) 08:09:50
>>756-759 ありがとうございます。18章で確認できました。ホントここは2chとは思えない位
優しい人たちですね。 環境はXPhomeで、2378のpdfを落とした時は3章もふつうに見られた
んです。 vista向けにフォント更新しちゃったのかな? あ(*o*)adobe更新してないかも!
またまた質問です。このシリーズの石って、33MHzのと34MHzのとありますよね。
16.5888を2倍して33.1776で動かす場合は33MHz越えるから、34MHzのほう、ってことになりますか?
どうせなら、35MHzにしてみたら
762 :
デフォルトの名無しさん :2009/04/13(月) 02:35:23
まあ、ハイスペック側を使う分には制約が少ないのは分かりますが、この1MHzの違いが 幾らにつくのかな? と思いまして。ちなみに必要なのはメーカー要求のロットより2桁ぐらい 少ない数なので、最低ロットでまとめ買いな路線です。
クロックに影響されるSIOなどの部分や消費電力が無視できる環境ならどうだっていいよ
764 :
デフォルトの名無しさん :2009/04/13(月) 07:31:06
CPU一個の値段が\50ぐらい違うとかないですか?
サーバー運用管理者ですが、くみこみにいきたいと考えています。 現在もっともポピュラーな開発言語はCですか? また、電気工学の知識はどれくらい必要でしょうか?
本屋にでも行って最低限の知識を得てからにしてくれ
>>765 cとASMが半々ぐらいかな。俺は電気も電子も皆無。回路図渡されても、port表は別に
要求する。portxxは何の入力/出力って奴。それだけでも足りなくて、バスコントローラーの
設定なんかハード屋さんからいちいち聞く(w
>>767 ポート表やバスコントローラの設定は、普通ハード屋がだすもんじゃね?
俺は毎回資料作って渡してるよ
>>762 型番によっちゃ売れ筋でないのは廃盤になって
入手できなくなったりするから注意しろ。
量産するんじゃなくて職人の手による一品モノならシーケンサで充分
ACCESSとかSQLとかDBアプリはインとアウトがわかれば全て作れるレベルです。 さて、Cとかはほんと軽く触った程度でポインタにはアドレスが入るということは理解しています。 組み込みのCって、UNIXのCプログラム(システムPG)とくらべてどう違うのでしょうか? また、書籍で独学で、仕事もらえるレベルに到達することは可能でしょうか? また、超お勧めの書籍を教えてください
ガタガタ言ってないで本屋へ行って何冊か買ってこい その程度すらやれないんだからお前に才能は無い
学生さんなのでしょう。勉強は誰かが教えてくれると思ってるんでしょ。 もし社会人だったらクズですけど。
>>769-770 少ないけどいちおう量産品です。でも、石1個が高いか安いかより、無くならないか
の観点のほうで選ぶみたいですね。ハード屋さんがそう言ってました。
>>772 > 組み込みのCって、UNIXのCプログラム(システムPG)とくらべてどう違うのでしょうか?
・標準関数が使えなかったりする
・マルチタスクや割込みを意識したプログラミングが必須
・メモリリーク厳禁
・デバッガがわりと貧弱
> また、書籍で独学で、仕事もらえるレベルに到達することは可能でしょうか?
無理。ただし、Cの仕事の経験があれば、雇ってくれる会社はある。
あとは、組込み技術者養成してる派遣会社で研修受けて、派遣で働くとか。
柑橘類の一種じゃなかったのか・・・
それはシークヮーサーw
>>776 > ・メモリリーク厳禁
全部スタティックに置くからリークなんかしないお
でもたまにほかの変数を上書きしてしまったりするお
スタックのを上書きしたら変なところに飛ぶからすぐわかるお
>>779 わかってたけど野暮だからと思って書かないでおいたのに…
782 :
デフォルトの名無しさん :2009/04/16(木) 21:24:00
ヒープするときもあるべ
いやいや、生まれついたときから組み込みの仕事をやってた僕に言わせればそうじゃないんだなぁ。 つまりどういうことかと言うと、ヒープは使うときもある。だけど使わないときもある。
>>783 誰に言わせてもその答えにしかならんだろうが、アホめ。
>>783 君はバカだな
全然違うよ
ヒープは使うときもあるし、使わないときもある
ちょっと質問です。 SHとH8の開発環境をひとつのマシンにつくりたいのですが 現在は、SH用のHEW4が入っています。 H8用は、HEW(1.0)がお客様からとりあえず支給されました。 HEWのツールチェインに、H8のコンパイラをいれるとかできるんでしょうか? みなさんはどうしてます?
アキバへ行っちゃったほうが早いような・・・
790 :
786 :2009/04/17(金) 14:40:07
>>787 ありがとうございます。
新しいバージョンに自動的になるわけですね。
なんか怖いな
コンパイラだけのインスコとかできるといいのになあ。
共存させると嫌なことが起こったような... あれはR8Cだったかな?
793 :
デフォルトの名無しさん :2009/04/22(水) 07:03:23
FIFOとLIFOのちがいがわかるようになったぼくはすごいですか?
794 :
デフォルトの名無しさん :2009/04/22(水) 07:05:00
えらいねぇ〜よちよち
>>710 読んで解った気になってるんじゃないだろうな。
コーナリングの基本はSIFOだ
つまり前戯はネチネチやるってことですね?
798 :
デフォルトの名無しさん :2009/04/24(金) 21:49:54 BE:1275828277-2BP(1028)
799 :
デフォルトの名無しさん :2009/06/06(土) 04:28:45
1.5ヶ月ぶりにまともな質問です。H8/300H TinyシリーズにH8Sで書いたソフトを移植する仕事 の引き合いが来ました。 36064のpdfをダウンして読みながらへうで雛形を書いています。 こんな小さい石までルネサス共通のアーキテクチャに合わせてERnになってるんですね(*o*) 文字列を渡すサブルーチンを見たら、void func(*src) { の中で、 MOV.W R0,R2 引数の文字列アドレス L110: (doのラベル) MOV.B @ER2+,R0L (*引数++のアドレッシング) ・・・となっていました。 前置きが長くてすいません。では質問: あれ?ER2の上位は?と気になったので聞きにきました。 この石ではアドレス空間は0〜FFFFですから、ERnの上位が何であってもメモリアドレスは この空間にラップアラウンドしてアクセスされる、 と理解してよいですか? 初期化でEnを全部ゼロに、とかも考えたのですが、計算の一時記憶としてEnが使われたり したらずっとゼロの保証はありませんよね。
もう1個:H8系の石のパワーONリセット処理は、 MOV.W または MOV.L #stackの末尾,SP ORC.B #-128,CCR となっていますが、 リセットのときはIマスクは1であると書かれています。2行目の割禁命令はなぜ必要なのでしょう?
802 :
800 :2009/06/06(土) 16:39:13
ありがとうございます。 対照的にすごく簡潔な答
803 :
800 :2009/06/07(日) 03:52:00
TinyでEEPMOVができるかお試しコード書きました。 _builtin_eepmov(dst,"abcde",5) のコードが MOV.W #LWORD L76,R5 "abcde"のラベル MOV.B #5,R4L PUSH.W R6 MOV.W #LWORD _dst,R6 EEPMOV.B POP.W R6 で、いちおうできるみたいですが、EEPMOV前後のR6のpush/popは何のためなんでしょう? これと、string.hのmemcpy(dst,"abcde",5); 使って関数呼び出しでやるのとで、得失は ありますか?
>>803 単に、R6は破壊しないと言う呼び出し規約でもあるんじゃないの。
805 :
800 :2009/06/13(土) 04:27:58
関数中で破壊しないという規約はありませんでしたが、その目で読んでいったら解りました。 この関数の入り口=遙か彼方の上の方でR6にある変数のアドレスを入れていました。 関数中で何度かアクセスする変数なので、最適化でこのようにしているようです。 ということは、EEPMOV.B 命令自体にはR6の保存云々は関係ないと理解できそうですね。 EEPMOV.W 命令の場合は、その後ろでR4をテストして、BNZ EEPMOV.Wのラベル が必要 ですよね? あ、はしゃいでお試しコード書いている間に、Tinyの企画自体がポシャりましたorz
SH2の遅延スロット不当命令って型番によって仕様が変わってるようだけど、 GCCって対応しているの? 現状スロット不正例外頻発してんだけど。
ldc r0,sr?
それ。
cならinlineアセンブラとか使わない限りsrさわるコードは生成されないと思う。 気になるなら、sh.mdにパッチを当てるとか?
>スロット不正例外 あれ?じゃあ原因違うのかなぁ? もう少し調べてみます。 ありがとう。
811 :
810 :2009/06/13(土) 12:07:24
ディスパッチャに思いっきり、 jsr @r2 ldc r1,sr ってのがいました...お騒がせして申し訳ない。 疑ってごめん >GCC orz
ram8kbじゃ、地獄見るんじゃないの?
どれへのレスなんだろう?4800のuart4CHの合流なんてのを8085で書いたときには、 8KBでやりくりしたぞ。
スタックの切り替えとかないOSなしならね。
うん、俺素っ裸大好きだし。4CH分の取り出し処理を、「タスク」 もどきに書いてmainから 呼び出す形に作ってなんとかしたぞ。スタックなんか128バイトぐらいしか使わなかった。
Arduinoも組み込み系ですか?
レゴと同じ玩具。 対象年齢10才〜
ググレカスとしか
>>819 なるほど、本当にあるのか
(実はtypoだと思ってた)
プロトコルスタック実装してみたいんだけど なんかいい資料ないですか? interfaceとかに書いてあるかな?
>>822 ネットワーク関連ならなんでもいいっす
TCPとか好きです
やる気が無いならやめてしまえ
とりあえずLinuxとかの実装見てみろ。 多分コード量見て嫌になるから。
linuxのソースは当てにしない方がいい 見るならBSDの方で
>>826 BSDは糞だろLinux最高だバカヤロウ
Q. 自動保守#K9K?_D[L とは一体何なのか?
A. 外部サイトへの突撃大好きな真性厨房
韓国突撃でお馴染みの自動保守
最近は自動焼人 ★として2ちゃんねるのボランティアにも精を出す日々
だがそんな彼にも、人間らしい部分はあったのだ…
名言集
『アパッチ砲はワシが作った』
『お前が規制系キャップ取れるか審査してやるよ』
『いつもサボってばかりのキャップがウゼえ』
『俺、100人規模の集団サイバーテロの主犯だったこともあるんだぜ』
『俺の経歴カックイイだろ?』
最近のニュース
8月15日の韓国突撃の際に歴史的大敗を喫する。ラジオでの敗戦宣言のときに声が震えていた
本人は体調不良と言っているが…
----------------------------------------------
この自動焼人 ★メールマガジンの配信停止をご希望される方は
http://qb5.2ch.net/test/read.cgi/sec2chd/1250169591/ にて自動焼人 ★までご連絡ください
コピペ君って馬鹿だな、まで読んだ。
ボキュは馬鹿なコピペ君です、まで読んだ。
そのコピペにレスする馬鹿は? 組み込みの人ってやけにキチガイ度が高いよね 他のキチガイとは何か臭いが違うというか・・
>>827 学習用でプロトコルスタック廻りとデバイスドライバなら
絶対BSDの方がいい
Linuxのは汚くて”こうなってる筈”とあたりをつけられないと
ソースツリーの何処にあるか探しあてて中身をみただけで
気力が萎える可能性が高い
BSDは設計がガチガチな分、コードとソースツリーが読みやすい。
その分、新しいデバイスのドライバが書き辛いったらないが
ライセンスの問題もある 下手にlinuxのコードを参考にするとGPL厨がやってくる
Linuxは来年カルト認定される可能性があるので 利用してはいけない
0番地にリセット処理のベクタがあるとき、そのアドレスにジャンプするのは、cで どう書けばいいですか? ルネサスのcで石はH8/300H TINYです。 void cmdhoge(void) { /* hogeコマンド処理 */ register void (*funca)(void) = (void*)(0); set_imask_ccr((_UBYTE)1); (*funca)(); } これだと0番地へジャンプしちゃいますよね?
836 :
デフォルトの名無しさん :2009/09/08(火) 14:27:17
age忘れすいません
>>835 こうだろ ((void (*)(void))(*((uint32_t const*)0)))() 常識的に考えて。
uint32t無しで、const*でコンパイルは通りました。ありがとうございます。 他のエラーつぶしたらlst見てみます。
const *だけかよw せめてint const *にしてやれ。
void cmdhoge(void) { void (**funca)(void)=0; (**funca)(); }
あ〜そういうのもありか。ありがとです。*が2個以上になると頭がついてかない(w 話変わって、UWORD*UWORD→ULONGとULONG/UWORDの関数を↓のように書きました _ul_mul_wd: ; ulong ul_mul_wd(ushort E0,ushort R0) { mulxu.w e0,er0 ; return ulong(E0*R0) rts ; cでwd*wdをするとわざわざMSWをクリヤするので。 _ul_div_wd: ; ulong ul_div_wd(ulong ER0,ushort R1) { divxu.w r1,er0 sub.w e0,e0 ; return ER0 / R1 rts 短いから、関数にして呼ぶより、インライン展開したいのですが、マクロ定義をどのように したらいいでしょうか? machine.h読んでも、__builtin_何とかばかりで、 機械語出させる定義みたいじゃなかったし。
>>837-840 .lstではこうなっていました。@0:16だから、0番地にあるアドレスにJMPしてますね。
598: ((void (*)(void))(*((const*)0)))();
0A16 6B000000 MOV.W @0:16,R0
0A1A 5900 JMP @ER0
>>841 #define ul_mul_wd(e0,r0) ((ulong)(e0)*(ushort)(r0))
#define ul_div_wd(er0,r1) ((ulong)(ushort)((ulong)(er0)/(ushort)(r1)))
この程度、アセンブラで書く必要無し。
てか除算はE0を0にしていいのか?戻り値がulongなのだが。
844 :
841 :2009/09/09(水) 14:21:05
MULXUは出ますね。DIVXUが出ずにulongの割り算を呼ぶコードが出てます。 131: void ul_div_wd_test(_UWORD f, _UWORD x) {// long/ushort 呼び出しtest 0234 _ul_div_wd_test: ; function: ul_div_wd_test 0234 5E000000 JSR @$sp_rgsv3$3:16 0238 0D85 MOV.W E0,R5 133: void sub(_UDWORD); 134: _UDWORD l; 135: nx = ul_mul_wd(f,x); 023A 5250 MULXU.W R5,ER0 023C 0F86 MOV.L ER0,ER6 136: l = ul_div_wd(nx,x); 023E 0D51 MOV.W R5,R1 0240 1771 EXTU.L ER1 0242 5E000000 JSR @$DIVUL$3:16 0246 1770 EXTU.L ER0 0248 01006B860000 MOV.L ER6,@_nx:16 137: sub(l); 024E 5E000000 JSR @_sub:16 138: } 0252 5A000000 JMP @$sprgld23$3:16 >てか・・・ 結果は16bitだと判っているからいいのです。32bitのほうが使い回しが、とか 考えて32bitにしたのですが、深い意味はありません。
最適化オプションとかはつけてる?
846 :
841 :2009/09/09(水) 15:38:51
ビルド−standard tool chain−コンパイラ の最適化タグで、 サイズ優先(レジスタ退避・回復をpush/popで・switch文高速化・シフト演算の高速化・ 構造体代入式の高速化・四則演算、比較、代入式の高速化・ループ文での帰納変数削除・ ループ文での帰納変数削除、ループ展開)の全部にチェック付いてます。 たしかH8/300xで書いたときも、関数呼び出しならレジスタがはっきりしているから、という 理由で関数にしました。
何かの条件あるとコンパイラが割り算命令を使わないとかかも?
848 :
841 :2009/09/09(水) 16:09:28
う〜ん、それがはっきりしないから、やっぱり関数呼び出しのが確実ですよね。
$DIVUL$3ってのを調べてみたら
32bit÷16bitだから
851 :
841 :2009/09/10(木) 04:57:15
$DIVUL$3は、ulongER0÷ulongER1です。cの標準の仕様ではulong÷ushotは、両方
長いほうの精度に切り上げて演算する、とされていますので、間違ってはいないのですが、
32bit÷16bitだと判っている所で、せっかくDIVXU機械語があるのに使えないのがシャク
だなあ、と(w
>>843 の2行目の定義、私が実際に書いたのは↓です。確認のため:
#define ul_div_wd(er0,r1) ((_UDWORD)(_UWORD)((_UDWORD)(er0)/(_UWORD)(r1)))
852 :
841 :2009/09/10(木) 05:11:47
H8/300xのとき、メモリのbitのあちこちをportのあちこちに出力するコードを書くのに、 sfr wreg = 0xFFFFFF1F; // この辺の空間はレジスタとして扱える wreg = メモリの変数; P9DR.1 = wreg.0; P9DR.0 = wreg.1; P6DR.4 = wreg.4; ・・・ とかやってました。 ルネサスのcでTINYだとこれが使えないので、(続く)
853 :
841 :2009/09/10(木) 05:19:43
typedef struct { union { unsigned char BYTE; /* Byte Access */ struct { /* Bit Access */ unsigned char B7:1; /* Bit 7 */ unsigned char B6:1; /* Bit 6 */ unsigned char B5:1; /* Bit 5 */ unsigned char B4:1; /* Bit 4 */ unsigned char B3:1; /* Bit 3 */ unsigned char B2:1; /* Bit 2 */ unsigned char B1:1; /* Bit 1 */ unsigned char B0:1; /* Bit 0 */ } BIT; /* */ } BITS; /* */ } t_wreg; void portout(void) { t_wreg wreg; wreg.BITS.BYTE = メモリの変数; IO.PDR6.BIT.B0 = wreg.BITS.BIT.B0; /* リレーn番*/ IO.PDR6.BIT.B1 = wreg.BITS.BIT.B1; /* リレーm番*/ ・・・ のように書いたら、wregは適当なレジスタに割り振られて、bitロード、bitストア命令 を吐いてくれました。 もっとお奨めの手法ご存じでしたら示唆お願いします。 typedefの書き方が冗長な気もするのですが、typedef union { で書き始めていいものか 自信がなかったので、iodefineにあったtypedef struct をパクって書きました。
gccならunionのタグは省略できるよ ビットフィールドの位置は本来保障されないから使わない方がいいいよ 結果的に動けばいいってことみたいだからお好きにどうぞ
855 :
841 :2009/09/10(木) 08:35:47
gccじゃないんですけど、コンパイルオプションでビットフィールドが右から/左からを選択
できるようになっています。
>>854 の2行目 では、portのある1bitにI/Oするのに、どのような手法がお奨めですか?
iodefine.h のようなファイルがメーカー提供になってるのは、メーカーお奨めってことかと
理解しています。portの名称はiodefine.h に従うとして、変数のほうは、右シフトで右端に
持ってきて1bitのportに出す、とかは考えつきますけど、bitロードが右端からになるだけで
シフト演算が余分だと思います。
何がやりたいのか分からないけど、適当に IO.PDR6.BYTE=メモリの変数; DIVXUの使い方はソフトウェアマニュアルを確認してみれ
857 :
841 :2009/09/10(木) 16:59:46
>>856 それじゃ8bitパラレルの出力でしょ。メモリのbitのあちこちをportのbitのあちこちに
1bit単位で出したいんです。で、853のような手法を試してみました。
DIVXUの使い方はCPUマニュアルのインストラクションの章で見てます。ER/Rだと理解
しましたが違ってますか?cの構文でDIVXUを吐かせるやり方は無いので
>>841 を考えた
のですが、インライン展開できるマクロが書ければそうしたいです。
32bit÷16bitって商が必ず16bitに収まるの? ルネサスのコンパイラでasmのインライン展開やると扱いが面倒だから、お勧めしない。
メモリのbitのあちこちをportのbitのあちこちなら、ポートの割付見直したら? だめなら、論理演算とか駆使してportに書き込む回数を減らす。
>>858 >32bit÷16bitって商が必ず16bitに収まるの?
質問してるの?
疑問を投げかけたとか?
まぁ 1 で割る可能性があることを考えれば収まらないよね
863 :
860 :2009/09/10(木) 20:50:35
864 :
841 :2009/09/11(金) 02:49:15
私はハード作らないんで、port割付はハード屋さんが見直してます。8個並んだリレーは
8bitに固めたりはしてます。それでも収まらないbitが出るのでしょうがないかと。
>>862 みたいな場面では使わないように気をつけてます。3200000/周波数(16000が最低)
とか、6桁の数を表示用にeditするときに1000で割って上下に分ける時に使っています。
石がチビ助で、クロックも16Mとか貧弱なので、除算がたくさん入るsprintfなんかを避ける
のが目的です。
>>843 さんのやり方でMULXUのほうはたまたま出ましたが、
みなさんの意見を聞くと、どうやら関数呼び出しのほうが一般性があるようなので、実装は
>>841 のように関数にしようとおもいます。相談にのってくださってありがとうございます。
machine.h を読むと、__builtinがASMを吐かせる予約語じゃないか、って気がしてきました。
LSIC80で_asm_c("ASMの機械語") って書くみたいに。どなたかその辺のこと知りませんか?
#pragma asm #pragma endasm __asm{}
そろそろうぜえな gccに変えろ それで全て解決する
んでvolatileつけるの忘れて最適化に巻き込まれて無駄に悩むと。
868 :
841 :2009/09/12(土) 05:04:13
gccって、へうにタダでついてくる奴と替えられるんですか?
>>865 その機能は使ってみたことありますけど、たしかいろいろ制約が多かったのです。
アセンブリソース吐かせてからそれをアセンブルしなければならないとか、分岐幅を
後から自分で修正してやらなければならないとか。これじゃコンパイラのソース中に記述
するだけという使い勝手にはならないや、となって諦めました。
組み込み関数の章(10.2.3)を読むと、これこれの機能だけを提供するとあって、その中に
MULXUとDIVXUは列挙されてなかったから、やはりインライン展開は諦めるべきなようです。
QVGAかVGAのLCDを使いたいのですが フレームバッファかシリアルSPI形式でどっかで売ってませんかね なるべく安く
なるべく安くの基準となる金額をまず書け
1枚1000円くらいでお願いします
何枚買うかで違うんじゃないの?
873 :
869 :2009/09/14(月) 19:04:13
自己解決した ここは素人しかいねえなあ
875 :
デフォルトの名無しさん :2009/09/15(火) 08:24:28
LCDデバイスを変えたら表示しなくなりました。データブックによるとsetup/holdなんかの 時間がμSオーダーで長いようです。タイミングはsoftではなくハードで作っています。 softのコマンド体系なんかは同じです。 > ______ ________________ > Write |________| > ___________ > Chip Enable_____| |______________ > __________ > Data ____/ |________________ > > ↓↓↓↓ > ______ ________________ > Write |________| > ___________ > Chip Enable_____| |______________ > ______________ > Data ____/ |____________ みたいにタイミングをずらしたい、ってハード屋さんが言ってるんですけど、 これはハード改造しかないよ、と返事するしかないでしょうか? コマンドは、 *0xC0001 = 0xXX; で1文字ライトなんで、上の3本のラインを制御するような ソフトは書いてないです。
876 :
デフォルトの名無しさん :2009/09/15(火) 08:30:51
あ〜!おもいっきりずれてるorz Dataの線をChip Enableより少し後まで引っ張りたいんです。 > ______ ________________ > Write |________| > ___________ > Chip Enable_____| |______________ > __________ > Data ____/ |________________ > > ↓↓↓↓ > ______ ________________ > Write |________| > ___________ > Chip Enable_____| |______________ > ______________ > Data ____/ |____________ こんどはどうかな・・・
877 :
デフォルトの名無しさん :2009/09/15(火) 08:32:07
あ〜もう!イヤン
コマンド送るタイミングをずらすとかならともかく、 ソフトで面倒見てないものを、ソフト修正でどうにか 出来るわけねえだろう。
LCDコントローラ(?)の出力タイミングをいじるレジスタがあったりしてな。
880 :
875 :2009/09/15(火) 11:06:33
>>878 そうですよね。私もそう思うんですけど、ハード屋さんがなぜかsoftでとか言うもんで・・
それにしても、互換デバイスを作るときって若干早めにしとくなら分かるのに、何でまた遅く
>>880 「なぜか」って、聞けよ。
ソフトで幅いじる設定があるのを知ってるのかもしれないだろ。
ちょっと質問させていただけますでしょうか。 ARM7でOSを使わずにプログラムの動的ロード・アンロード(関数単位くらいでの入れ替え)を実現したいのですが、手法について参考になるURLか本があったら教えていただけないでしょうか。m(_ _)m
関数ポインタとかでできるんじゃないの?
gccで言う-fPIC あとはオーバレイセクションかな
>>880 WAITの設定できるマイコン使ってるとか?
>>885 WAITじゃHold timeはのばせないだろう。
887 :
875 :2009/09/16(水) 03:26:29
>>881 あ、もちろんハード屋さんには正直に話してますよ。
製造中止にされたデバイスがヒュンダイ、じゃなかったサムスンなんで、互換デバイスは
もっと怪しげなとこなんだろうなあ・・・ 安いの使えっていう縛りがあるのかと。
私にもメールで相談くれるぐらいで、呼ぶ金すら無さそうなんで、かわいそうに。
>>887 そのCPUにLCDドライブの機能があって、
そのLCDがCPUから直接つながっていて、それを利用してLCDを制御しているなら、
あるいはレジスタでタイミングの変更とかできるかもしれないね
もし、そうでなくてCPUからLCDドライバみたいなものやFPGAとかを介してLCDがつながっているなら
ソフトではどうしようもないでしょうね
システムの構成がそれだけの情報ではわからないので、なんとも言えないと思う
889 :
875 :2009/09/16(水) 16:34:05
あ、ごめんなさい。後者のほうです。メモリ空間C0000とC0001へのI/Oがチップセレクトを 介してLCDデバイスにつながるようになってます。アドレスのLSBがレジスタ選択になって いて、0がコマンド、1が表示データ(ASCII)。 私の 「だめでしょう」 という返事がまとも だったらしいのが確認できました。 ありがとうございます。
2年ぐらい経った製品で、char[48]の所に28文字以上入ってると、ずっと若いアドレスの エラーフラグが立たないというバグが出ました。H8/2378 RAMは32KBあって余ってる。 上記char[48]の変数がほぼ末尾(後には使わない__errnoだけ)。 そこから10K以上離れてスタック。 cソース上はおかしな所無いってお客さんも言ってる。 どこから調べたもんか・・・参った。
char[48]を参照してる所とエラーフラグの因果関係を調べりゃいいんじゃないの
28文字以上が条件なのかもしれんけど、バグはどっか別の場所だよ
893 :
890 :2009/10/11(日) 04:21:00
レスありがとです。
>>891 それは真っ先にgrepすることですが、因果関係は見つかりません。
>>892 それはそうですね。見つかったらまた書きにきます。
処理が間に合ってないとか?
895 :
890 :2009/10/12(月) 04:45:31
uart3本のうち2本は4.8K、1本が115Kだけど、uartのほうで支障が出たことはないの。 クロックは33MHz。メインループは15μSぐらいで回ってて、その中でエラーフラグを 立てたりしてる。お客さんはメインループ中で@ER6でアクセスしてるフラグのアドレスを 保持するER6が壊されるんじゃないか、って疑ってるんだけど、.lstファイルのgrep見ても メイン以外の関数の入り口出口ではER4-ER6を退避・復元してる。
ICEなりJTAGなりで、メモリウォッチはできないの?
>>895 それを疑うなら、ER6の値をチェックするコードをインラインアセンブラで書いて
確認すりゃいいんでないかい。
なんとなくrace conditionくさいので、コードに細工すると再現しなくなったり
するかもしれんが。
エラーフラグ(@ER6)を割り込みで書き換えてるとか
899 :
890 :2009/10/13(火) 06:13:19
>>898 それはありませんね。全部タスクレベルでやってます。
>>896-897 そのアイデアはいいですね。お客様にすすめてみます。
メモリはデバック用のコマンドでも見れるようにはしておいたのですが、変更される瞬間
は捕まえられないですものね。
じゃ、参照される前にエラーフラグをどっかでクリアしてるのでは?
901 :
890 :2009/10/13(火) 17:41:43
それがいちばん疑われるのですが、それをgrepで見つけられないのがグヤジイんですよね
>>901 > それをgrepで見つけられない
あのな、そうゆうのはおおむね grep では見つからない
バッファ御バーフローとか
スタック使いすぎとか
見つけること可能か、grep で?
エラーフラグは参照したけど、速攻でエラー状態が消えてるとか
904 :
890 :2009/10/14(水) 03:12:16
愚痴聞いてくれてありがと。見つかりました。マ板よりこっちのが親切な人多いですね。 char wk[64]に sprintfしてて、ちょっとだけ長くなったその後ろがER6のpush場所でした。 もっと長くなると復帰アドレス飛ばして暴走リセットまで行くところでした。 grepの経過にそれらを見てるログが残ってたのに、スタックのサイズを気にしただけで スタックの中身の並びまで思考が深入りせず流してました。 そこのchar[64]は、もともと%c,・・・みたいに固定だったのを、後から%sを含む編集を 付け足したデグレでした。皆さまお騒がせしました。
ちょっとバグ取り手伝ってもらおうと思って聞きに行ったときに ここでこの変数にこれが入って〜 で、そのあとこのif文にくるでしょ〜 ここがなんでか正になるんだけど〜 それは このif文の前に〜 この処理が入ってるのが原因じゃん! わかった!ありがと! みたいな感じで説明途中で自己解決して帰るパターンとか多いよな。
人に説明するとその種の問題は見つかりやすいね。 まあ、コードレビューってのは半ばそれが目的なのかもしれないが。
908 :
890 :2009/10/15(木) 03:50:01
まさにそれを念頭に置いてここに書きに来ました。 お客さんのほうが頭の回転が速くて先に見つけてくれちゃいましたが。
>>908 >お客さんのほうが頭の回転が速くて先に見つけてくれちゃいましたが。
あなたと話をすることで、レビューになったんだよ
役に立ってないようで、実はすごく役に立ったんだと思うよ
たぶん、お客さんは感謝してると思う。
>>904 オレは、「文字列」、「文字配列」、「文字値」、「文字」を違うものとして考えてるよ
シュリーマンが外国語を勉強していたときも、その辺の浮浪者を捕まえて ただひたすらベシャリを聞かせていたというし カーニハンもデバッグの一番の方法として、その辺のテディベアを捕まえて ただひたすらコードの説明を聞かせていたというし 昔からある確立された手法であることは間違いない
>>911 参考になった。今度サボテンに向かってしゃべってみるわ。
しかし、シュリーマンの相手してた浮浪者はいい迷惑だなww
アメリカのとある大学の計算機センターでは、センター職員に話をする前に、 まずこれに向かって説明をしなさい、というテディベアが置いてあったとか。
と、「プログラミング作法」に書いてあった
915 :
デフォルトの名無しさん :2009/10/16(金) 17:28:00
HEW って、 構造体のアラインメントっていうか、 構造体のパッキングオフにしたり できまつか?
ビルド−H8...Standard Toolchain−CPU タグの下に、メンバの境界調整数を1とする、ってのが あるから、それじゃないか? ビットフィールド割付けを上/下からの選択もここにあるし。
アドレスエラーにならないように気をつけた方がいい
d
>>916 >>917 その内容からすると、どうもHEWってアラインメントを弄らないのが、ふつーみたいですね。
ダミーメンバー入れて構造体のパッキングをいじればおkですか?
>>918 やってみて確認したら?
mapファイルもでるわけだし。
struct hoge { char int8; short int16; }; struct fuga { short int16; char int8; }; 構造体のint16のアドレスが奇数番地になってたら、h8/shだと実行時におかしくなるかも?
offsetofマクロでメンバの相対位置を確かめてみたら。
なんでここはH8の話ばっかりなの?
何か問題でも?
H8を使っている無能がよく質問に来るだけという話
日本はH8人口が一番多いから
926 :
918 :2009/10/20(火) 09:34:34
d & ゴメソ
>>919 >>920 >>921 ごめんなさい、社内の別のプロジェクトの人との会話中に出てきた話で、
自分SHの基板持ってないのでテストできません。。。
H8じゃなくてSH2でつ。
>>926 だから、ビルドして、mapファイルみたらわかるんじゃね?
コンパイラ パッケージ 9.01 のマニュアルによるとコンパイラ オプションと #pragma pack で1か4(デフォルト)を指定できるみたいね。 境界をまたぐアクセスをした場合、バス サイクルを分割しないだろうから BUSERR か、バイト順が入れ替わってしまうかのどちらかだろうね。 って、ハードウェア マニュアル嫁って話だな・・・ H8/SH で packed record は漢かも。
929 :
デフォルトの名無しさん :2009/10/23(金) 04:40:25
H8 H8S で、メモリのBSET/BCLRがありますね。あれってASMレベルで1命令でアクセス してますから、割込とタスク両方のレベルから触っても割禁不要と理解していいですか? ex):タスクレベルから、@ER4=flagのアドレスで、BCLR 6,@ER4 割込レベルから、@ER1=flagのアドレスで、BSET 6,@ER1 MOV マスク MOVのアーキテクチャだとBCLRの前後で割り込み禁止/解除が必要でした。 マイクロコードが実はMOV マスク MOVでやってたとかの心配はしなくていいですよね?
BCLR/BSETの命令実行中に割り込みが入ったら、どこに戻ってくるの?
931 :
929 :2009/10/23(金) 16:47:10
その命令の次、ですよね。 >命令実行中に 「割込要因が起きる」ことはあるでしょうが、 「割り込みが入る」というのが 「割り込みベクタのアドレスに飛ぶ」 ことなら、命令実行後 のはずですよね。1命令の実行中に割り込みを受け付けるのは EEPMOV のような くり返し系の命令だけ、と理解しています。
933 :
929 :2009/10/24(土) 05:10:00
H8にはなかった。H8Sは23xxシリーズ使ってますが、パイプライン機能は無かったような。 パイプライン機能があったとしたら、割り込みを受け付けるタイミングに制約があるのですか? 1命令の実行中というのはあり得ない、割り込みベクタのアドレスに飛ぶのは命令実行後、 パイプライン機能が先の番地の命令を先取りしていたとしても、分岐が起きた時点で その実行結果は破棄されると理解していましたが、どこか間違っていますか?
ちゃんとわかってるじゃん
935 :
デフォルトの名無しさん :2009/10/24(土) 16:19:21
シリアルポートはどういうところで使われているのでしょうか
USBが無かった時代はシリアルで繋いでたという程度のモノだよ 制御も比較的ラクだしね
937 :
デフォルトの名無しさん :2009/10/24(土) 17:44:19
>>936 ありがとうございます
シリアルポートを操作するようなプログラムをアセンブリとC言語にて組もうと考えているんですが、
まずは何から学べばよいでしょうか?
通信だけならCで20行ほどで組める
>>938 実はlinuxのカーネル内で組んであるシリアルポートへの通信プログラムでして、
これを勉強しようと思っているのですが、カーネルレベルということなので
何から学べばよいのかわからなくて
情報の小出しはイラっとくるな
なるほど 回り道をして、力尽きて、死にたいと申すか まずはlinuxから離れよ
シリアルの送信だけするところから始めたら
>>939 その書き方なら、それはカーネルレベルの話ではない。
>>939 マニュアルを読むのと、ネットで探すと参考になるプログラムがある
H8もSHもほとんど同じ
送信も受信も基本はレジスタを読み書きする。
回線アナライザがあると楽だけど、パソコンのターミナルソフトで見てもいい
オレは、tty.exeっていう簡単なターミナルソフトをよく使う。
なるほど、昨日書店に行きまして組み込み系の書籍をざっと見てきたので、近々わかりやすい書籍を二冊ほど買ってこようと思います。
とりあえずH8は色々試せるからこれがいいんじゃないかね。
http://akizukidenshi.com/catalog/g/gK-01271/ 完成品で5VのACアダプタとPCにRS232C(かUSBシリアル変換)
があるならすぐ使える。シリアル2ポートやethernetなどが付いてるし、
メモリ増設すれば格安でuCLinuxも動く。遅いけど。
メモリとか不要なら1チップのPICやAVRの方が単純でいい。
ただし書き込み環境が必要。
あくまでlinuxからシリアル使いたいだけならlinux板で聞いた方がいい。
948 :
デフォルトの名無しさん :2009/10/25(日) 22:15:32
termiosの特殊制御文字でわからない特殊文字が幾つかあるのですが、 VSWTC 7 VREPRINT 12 VDISCARD 13 VWERASE 14 VLNEXT 15 VEOL2 16 これらについて載っているサイト等ありましたら教えて頂けないでしょうか?
えーと、海外のサイト渡り歩いていたら見つけました。お手数かけました。
951 :
デフォルトの名無しさん :2009/10/26(月) 02:48:21
沖電気の80C85のデータシートは見ましたが、フラグの立ち方が明記されていません。 H8系はMOVでフラグが設定されますが、8085はADD/SUB、AND/OR/XOR など、 A-regに対する演算を実行した後だけ、ZやCやMなどのフラグが設定される。 MOVやpush/popでは、(POP PSWを除き) フラグは変化しない。 16bit演算(HL対象の)を実行しても、フラグは変化しない。 この理解で合っていますか?
もう一度質問を読み返せ さっぱりわからん
8085の資料がどっかにないの? CP/M関係の海外サイトとか。
"8085 instruction set" でぐぐってみるぐらいのことは
956 :
デフォルトの名無しさん :2009/10/27(火) 10:09:02
8085? 海外では、もっとも使われているマイクロコントローラーじゃんか? セカンドソースは数え切れないほど。 狭いが、組み込み業界では、ほぼ世界標準のMCUだろ? 資料の集め方から修行をやり直せ!
それは8051でないかい。
>>951 大体合っているよ。手元に8085のインストラクションセットがないなら、8080のインストラクションセットでもほぼ一緒。
ハードウェア周りと8085で追加されたインストラクション二つとクロック数程度しか違わない。
959 :
951 :2009/10/28(水) 14:35:51
>>958 ありがとうございます。
大昔(1988年頃)には、雑誌に載ったチップの説明の青焼きを頼りにやってたのですが、
さすがにそれらも残ってなくて、うろ覚えになってたので、助かりました。
>>955 英語ばっかり引っかかるのイヤん。先頭の奴ざっと見たら沖のとほぼ同じでした。
960 :
955 :2009/10/28(水) 14:41:44
>>959 え?最初のリンクで、ちゃんとフラグの変化まで表に出てるじゃん
フラグがどうなると変わるか知りたいとか?
962 :
デフォルトの名無しさん :2009/10/28(水) 18:06:32
1990年代にttyはどのような使われ方をしていたのでしょうか?
またお前か
テレタイプ(ライタ)は、90年代にはほとんど動く化石だろ。 テレックス網は先日まで生きてたけど。
>>962 いまでも使ってるよ
ただのキャラクタベースの端末
966 :
デフォルトの名無しさん :2009/10/30(金) 13:46:56
H8にLinuxは荷が重いな
3048 は止めといた方が良かったと思う 3069 で桶
uCLinuxは大変だよ。いろんな意味で。H8に限らず。 H8で動かしてみたいなら秋月のよりKane Bebeの方がいい。 標準で入ってるMESでも困ることはないと思うけどね。
しかしH8ってすげーな やっぱメモリがリニアに16M取れるのがでかかったな
前身の68000が時代の流れに結構耐えたのもそのせい。 386以降が主流になるまでPC98勢辺りでは使えなかったgccが X68000ではまっさきに動いたりUNIX系OSが移植されたり。 データレジスタ32bit、アドレスバス24bitだったから、 速度の問題を除けば今でも扱いやすい。
H8にはH16とH32という兄弟がいて、 68k色が濃かったのはH16なんじゃなかったっけ。 H32はGmicroで。
大型とはどの位のものを言うのですか?という質問に、だいたい10t以上、という時代の IBM S/360の10tクラスの奴と、H8Sシリーズがほぼどっこいの能力だもんね。 目方で1千万分の1になってる(w
前々スレ辺り?で、「リングバッファの滞留数を知るのに、リード・ライトポインタから計算する」 手法を教えてもらった者です。送信ringには適用できたのですが、受信ringでは 受信ありを受信済みカウンタで判定している所が解決できなくてカウンタが残っていました。 今回、受信カウンタを不要にできました。このカウンタが無ければ割り込みとtaskで同じ資源を 触らないので割禁命令も不要になりすっきりしたコードにできました。 受信割り込み処理:ring[ライトポインタ++]=受信バイト; 読み出しtask処理: return ring[リードポインタ++]; 「受信あり」の判定: if( ライトポインタ ^ リードポインタ ) サイクル数で2割位の改善になりました\(^o^)/3MHzの8bit石では嬉しいことです。
975 :
デフォルトの名無しさん :2009/11/09(月) 05:22:57
8251の動作について質問です。RXRDYによる割り込み処理で、受信データレジスタを 読み出したらRXRDYのステータスbitは消えますが、受信データレジスタの内容は 消えませんよね?=2度読みとっても同じ値が読めますよね?
駄目だったような
仮に消えるとしてどんな値になって欲しいんだ? アクセス禁止を期待してるのか?
うつ病がひどいです 会社休んでいい?先週もう4日休んでるけど おわたかな
よくないつっても休むけどね 俺を会社に組み込むのは どうやら無理だったようだな なんつって 寝る
ちなみに 読むことがトリガになるレジスタはあまり触らない方がいいね まあ他人のことはどうでもいいんだが
>>979 休むのならきちんと連絡すること。
また、きちんと診察を受けて必要なら診断書を書いてもらうこと。
それができないのなら、あんたは会社どころか社会にも不適合と言うことだ。
982 :
975 :2009/11/09(月) 15:11:27
>>976-977 2度目に読んだ値とxorして0を作ろうと思ったんですけど(w
ちゃんと読むのは1度にします。ごめんなさい。
>岩石採取は失敗したとみられているが、着陸時に舞い上がった >砂などが付着している可能性が期待されている。 ワロタ いつから付いたか判らんゴミも付着してるだろうし、 仮に付いたとして、どれがその砂か判るのかね こういう胡散臭いのは勘弁
悪魔の証明?
そろそろ次すれたてれ
2年で1スレだし いらないかと
了解
991 :
デフォルトの名無しさん :2009/11/10(火) 12:37:29
ume
ume
993 :
デフォルトの名無しさん :2009/11/10(火) 12:39:02
ume
ume
995 :
デフォルトの名無しさん :2009/11/10(火) 12:40:29
ume
ume
ume
ume
ume
ume
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。