●●●くみこの組み込み相談室1.0●●●at TECH
●●●くみこの組み込み相談室1.0●●● - 暇つぶし2ch583:デフォルトの名無しさん
09/01/24 03:09:01
>>547
uiCHってどうなってんの?
両chでenqueueされたら、もちろん両chでdequeueしてるんだよね?

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

概ね >>653 の通りだよ


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


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

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


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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

まぁ、がんがれ


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

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

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


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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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


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

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


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


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

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

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

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

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


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

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

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

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


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

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

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

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

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


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

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


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

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

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


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

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


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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Iccmax = 15 + 0.37 × Vcc × f

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

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

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

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


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

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

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

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

754:デフォルトの名無しさん
09/04/09 17:04:16
みんな優しいな

755:デフォルトの名無しさん
09/04/12 04:42:14
H8S/2378シリーズのアドレス空間は、内蔵RAM00FF4000~00FFBFFFです。(RAM32K)
RAM16Kの2368シリーズのRAMアドレスは、00FF8000~00FFBFFFだろうと思い、
ルネサスのサイトで2368シリーズのpdfを見たら、3.4 各動作モードのアドレスマップ の章の
アドレスが全て□OM:□□バイト □AM:□□バイト アドレスも□'□□□□□□ とかに
なっていて、確認できませんでした。 どなたか実際の数値を確認した人いらっしゃいますか?
2行目で合ってますか?

756:デフォルトの名無しさん
09/04/12 07:16:10
もっと後の方に内蔵RAMの章があるだろう。
そこに書いてないか?


757:デフォルトの名無しさん
09/04/12 07:52:41
それフォントの問題だよな。Windowsのpdfリーダーは用意出来ないんか?
まぁ確認しといてやったけど、2ちゃんなんか信用しないでpdfをちゃんと見られる環境を作った方がいいよ。

2360F/2363/2365
リザーブ領域: H'FF4000-FF7FFF
内蔵RAM: H'FF8000-FFC000

758:デフォルトの名無しさん
09/04/12 07:54:18
-FFBFFFの間違い。
つーか>>756の言うように13章を参照せれ

759:デフォルトの名無しさん
09/04/12 07:56:21
なんどもごめん、よく見たら18章だった。

760:755
09/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のほう、ってことになりますか?

761:デフォルトの名無しさん
09/04/12 18:37:49
どうせなら、35MHzにしてみたら

762:デフォルトの名無しさん
09/04/13 02:35:23
まあ、ハイスペック側を使う分には制約が少ないのは分かりますが、この1MHzの違いが
幾らにつくのかな? と思いまして。ちなみに必要なのはメーカー要求のロットより2桁ぐらい
少ない数なので、最低ロットでまとめ買いな路線です。

763:デフォルトの名無しさん
09/04/13 04:18:04
クロックに影響されるSIOなどの部分や消費電力が無視できる環境ならどうだっていいよ

764:デフォルトの名無しさん
09/04/13 07:31:06
CPU一個の値段が\50ぐらい違うとかないですか?

765:デフォルトの名無しさん
09/04/13 11:56:37
サーバー運用管理者ですが、くみこみにいきたいと考えています。

現在もっともポピュラーな開発言語はCですか?
また、電気工学の知識はどれくらい必要でしょうか?

766:デフォルトの名無しさん
09/04/13 13:55:09
本屋にでも行って最低限の知識を得てからにしてくれ

767:デフォルトの名無しさん
09/04/13 15:28:35
>>765 cとASMが半々ぐらいかな。俺は電気も電子も皆無。回路図渡されても、port表は別に
要求する。portxxは何の入力/出力って奴。それだけでも足りなくて、バスコントローラーの
設定なんかハード屋さんからいちいち聞く(w

768:デフォルトの名無しさん
09/04/13 17:53:46
>>767
ポート表やバスコントローラの設定は、普通ハード屋がだすもんじゃね?
俺は毎回資料作って渡してるよ

769:デフォルトの名無しさん
09/04/13 18:44:10
>>762
型番によっちゃ売れ筋でないのは廃盤になって
入手できなくなったりするから注意しろ。

770:デフォルトの名無しさん
09/04/13 22:14:41
量産するんじゃなくて職人の手による一品モノならシーケンサで充分

771:デフォルトの名無しさん
09/04/13 23:20:25
>>770

シーケンサって何?

772:デフォルトの名無しさん
09/04/13 23:25:18
ACCESSとかSQLとかDBアプリはインとアウトがわかれば全て作れるレベルです。
さて、Cとかはほんと軽く触った程度でポインタにはアドレスが入るということは理解しています。

組み込みのCって、UNIXのCプログラム(システムPG)とくらべてどう違うのでしょうか?
また、書籍で独学で、仕事もらえるレベルに到達することは可能でしょうか?

また、超お勧めの書籍を教えてください

773:デフォルトの名無しさん
09/04/13 23:30:18
ガタガタ言ってないで本屋へ行って何冊か買ってこい
その程度すらやれないんだからお前に才能は無い

774:デフォルトの名無しさん
09/04/13 23:36:15
学生さんなのでしょう。勉強は誰かが教えてくれると思ってるんでしょ。
もし社会人だったらクズですけど。

775:デフォルトの名無しさん
09/04/14 07:33:25
>>769-770 少ないけどいちおう量産品です。でも、石1個が高いか安いかより、無くならないか
の観点のほうで選ぶみたいですね。ハード屋さんがそう言ってました。

776:デフォルトの名無しさん
09/04/14 07:38:38
>>772

> 組み込みのCって、UNIXのCプログラム(システムPG)とくらべてどう違うのでしょうか?

・標準関数が使えなかったりする
・マルチタスクや割込みを意識したプログラミングが必須
・メモリリーク厳禁
・デバッガがわりと貧弱


> また、書籍で独学で、仕事もらえるレベルに到達することは可能でしょうか?


無理。ただし、Cの仕事の経験があれば、雇ってくれる会社はある。
あとは、組込み技術者養成してる派遣会社で研修受けて、派遣で働くとか。


777:デフォルトの名無しさん
09/04/14 23:54:55
>>771
URLリンク(nttxstore.jp)
こんなやつ

778:デフォルトの名無しさん
09/04/15 05:27:38
柑橘類の一種じゃなかったのか・・・

779:デフォルトの名無しさん
09/04/15 16:32:06
それはシークヮーサーw

780:デフォルトの名無しさん
09/04/15 20:06:42
>>779
よくわかったなw 感心したわ

781:デフォルトの名無しさん
09/04/16 13:15:44
>>776
> ・メモリリーク厳禁
全部スタティックに置くからリークなんかしないお
でもたまにほかの変数を上書きしてしまったりするお
スタックのを上書きしたら変なところに飛ぶからすぐわかるお

>>779
わかってたけど野暮だからと思って書かないでおいたのに…

782:デフォルトの名無しさん
09/04/16 21:24:00
ヒープするときもあるべ

783:デフォルトの名無しさん
09/04/17 00:04:14
いやいや、生まれついたときから組み込みの仕事をやってた僕に言わせればそうじゃないんだなぁ。
つまりどういうことかと言うと、ヒープは使うときもある。だけど使わないときもある。

784:デフォルトの名無しさん
09/04/17 04:04:29
>>783
誰に言わせてもその答えにしかならんだろうが、アホめ。

785:デフォルトの名無しさん
09/04/17 04:41:31
>>783
君はバカだな
全然違うよ
ヒープは使うときもあるし、使わないときもある

786:デフォルトの名無しさん
09/04/17 06:04:50
ちょっと質問です。

SHとH8の開発環境をひとつのマシンにつくりたいのですが
現在は、SH用のHEW4が入っています。
H8用は、HEW(1.0)がお客様からとりあえず支給されました。
HEWのツールチェインに、H8のコンパイラをいれるとかできるんでしょうか?
みなさんはどうしてます?

787:デフォルトの名無しさん
09/04/17 07:19:04
URLリンク(tool-support.renesas.com)

788:デフォルトの名無しさん
09/04/17 12:08:16
組込みで、音声ICチップをさがしています。
簡単に実装出来て、値段が安く実績のあるメーカーが良いです。

値段は、1個500~1500円の間で考えていますが、

エプソン・OKI等のLSIは1個~購入可能?
そう言う所知っていません?
例 S1V30300等 とか?
URLリンク(www.epson.jp)

出来れば個人購入で、個人でも相手にしている所ありません?
最新でなくても良いです。

用途は、販売機等の「いらっしゃいませ~」みたいなものです。
スレチ?

789:デフォルトの名無しさん
09/04/17 14:01:58
アキバへ行っちゃったほうが早いような・・・

790:786
09/04/17 14:40:07
>>787
ありがとうございます。
新しいバージョンに自動的になるわけですね。
なんか怖いな
コンパイラだけのインスコとかできるといいのになあ。



791:デフォルトの名無しさん
09/04/19 12:24:29
>>784
スネークマ・・・いやなんでもない

792:デフォルトの名無しさん
09/04/20 19:38:12
共存させると嫌なことが起こったような...
あれはR8Cだったかな?

793:デフォルトの名無しさん
09/04/22 07:03:23
FIFOとLIFOのちがいがわかるようになったぼくはすごいですか?

794:デフォルトの名無しさん
09/04/22 07:05:00
えらいねぇ~よちよち

795:デフォルトの名無しさん
09/04/22 07:43:06
>>710読んで解った気になってるんじゃないだろうな。

796:デフォルトの名無しさん
09/04/22 10:43:04
コーナリングの基本はSIFOだ

797:デフォルトの名無しさん
09/04/23 17:02:33
つまり前戯はネチネチやるってことですね?

798:デフォルトの名無しさん
09/04/24 21:49:54 BE:1275828277-2BP(1028)
>>793
厨房 その調子でがんばれよ

799:デフォルトの名無しさん
09/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が使われたり
したらずっとゼロの保証はありませんよね。

800:デフォルトの名無しさん
09/06/06 04:39:22
もう1個:H8系の石のパワーONリセット処理は、
  MOV.W または MOV.L  #stackの末尾,SP
  ORC.B            #-128,CCR    となっていますが、
リセットのときはIマスクは1であると書かれています。2行目の割禁命令はなぜ必要なのでしょう?

801:デフォルトの名無しさん
09/06/06 08:40:02
>>799
上は無視される。

>>800
なにかの間違いで飛んできた時のためにおまじない。


802:800
09/06/06 16:39:13
ありがとうございます。 対照的にすごく簡潔な答

803:800
09/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); 使って関数呼び出しでやるのとで、得失は
ありますか?

804:デフォルトの名無しさん
09/06/12 11:43:44
>>803
単に、R6は破壊しないと言う呼び出し規約でもあるんじゃないの。

805:800
09/06/13 04:27:58
関数中で破壊しないという規約はありませんでしたが、その目で読んでいったら解りました。
この関数の入り口=遙か彼方の上の方でR6にある変数のアドレスを入れていました。
関数中で何度かアクセスする変数なので、最適化でこのようにしているようです。
ということは、EEPMOV.B 命令自体にはR6の保存云々は関係ないと理解できそうですね。
EEPMOV.W 命令の場合は、その後ろでR4をテストして、BNZ EEPMOV.Wのラベル が必要
ですよね? あ、はしゃいでお試しコード書いている間に、Tinyの企画自体がポシャりましたorz

806:デフォルトの名無しさん
09/06/13 10:11:55
SH2の遅延スロット不当命令って型番によって仕様が変わってるようだけど、
GCCって対応しているの?
現状スロット不正例外頻発してんだけど。

807:デフォルトの名無しさん
09/06/13 10:34:56
ldc r0,sr?

808:デフォルトの名無しさん
09/06/13 10:39:14
それ。

809:デフォルトの名無しさん
09/06/13 10:46:39
cならinlineアセンブラとか使わない限りsrさわるコードは生成されないと思う。
気になるなら、sh.mdにパッチを当てるとか?

810:デフォルトの名無しさん
09/06/13 10:56:54
>スロット不正例外
あれ?じゃあ原因違うのかなぁ?

もう少し調べてみます。
ありがとう。

811:810
09/06/13 12:07:24
ディスパッチャに思いっきり、
jsr @r2
ldc r1,sr
ってのがいました...お騒がせして申し訳ない。

疑ってごめん >GCC


orz

812:デフォルトの名無しさん
09/06/13 12:26:41
ram8kbじゃ、地獄見るんじゃないの?

813:デフォルトの名無しさん
09/06/13 14:26:16
どれへのレスなんだろう?4800のuart4CHの合流なんてのを8085で書いたときには、
8KBでやりくりしたぞ。

814:デフォルトの名無しさん
09/06/13 15:58:05
スタックの切り替えとかないOSなしならね。

815:デフォルトの名無しさん
09/06/26 16:39:03
うん、俺素っ裸大好きだし。4CH分の取り出し処理を、「タスク」 もどきに書いてmainから
呼び出す形に作ってなんとかしたぞ。スタックなんか128バイトぐらいしか使わなかった。

816:デフォルトの名無しさん
09/07/14 09:54:13
Arduinoも組み込み系ですか?

817:デフォルトの名無しさん
09/07/16 13:56:01
レゴと同じ玩具。
対象年齢10才~

818:デフォルトの名無しさん
09/07/16 20:39:51
>>816-817
それ何?
Androidじゃないよな?


819:デフォルトの名無しさん
09/07/16 20:58:08
ググレカスとしか

820:デフォルトの名無しさん
09/07/16 21:22:48
>>819
なるほど、本当にあるのか
(実はtypoだと思ってた)

821:デフォルトの名無しさん
09/08/15 21:11:30
プロトコルスタック実装してみたいんだけど
なんかいい資料ないですか?

interfaceとかに書いてあるかな?

822:デフォルトの名無しさん
09/08/16 01:47:50
>>821
なんのプロトコルスタック?

823:デフォルトの名無しさん
09/08/16 10:35:29
>>822
ネットワーク関連ならなんでもいいっす
TCPとか好きです

824:デフォルトの名無しさん
09/08/16 12:02:59
やる気が無いならやめてしまえ

825:デフォルトの名無しさん
09/08/16 16:21:41
とりあえずLinuxとかの実装見てみろ。
多分コード量見て嫌になるから。


826:デフォルトの名無しさん
09/08/17 03:34:44
linuxのソースは当てにしない方がいい
見るならBSDの方で

827:デフォルトの名無しさん
09/08/17 07:25:31
>>826
BSDは糞だろLinux最高だバカヤロウ

828:222.248.109.70
09/08/17 17:45:39
Q. 自動保守#K9K?_D[L とは一体何なのか?
A. 外部サイトへの突撃大好きな真性厨房

韓国突撃でお馴染みの自動保守
最近は自動焼人 ★として2ちゃんねるのボランティアにも精を出す日々
だがそんな彼にも、人間らしい部分はあったのだ…

名言集
『アパッチ砲はワシが作った』
『お前が規制系キャップ取れるか審査してやるよ』
『いつもサボってばかりのキャップがウゼえ』
『俺、100人規模の集団サイバーテロの主犯だったこともあるんだぜ』
『俺の経歴カックイイだろ?』

最近のニュース
 8月15日の韓国突撃の際に歴史的大敗を喫する。ラジオでの敗戦宣言のときに声が震えていた
 本人は体調不良と言っているが…


----------------------------------------------
この自動焼人 ★メールマガジンの配信停止をご希望される方は
スレリンク(sec2chd板)
にて自動焼人 ★までご連絡ください

829:デフォルトの名無しさん
09/08/17 20:14:12
コピペ君って馬鹿だな、まで読んだ。

830:デフォルトの名無しさん
09/08/17 20:24:09
ボキュは馬鹿なコピペ君です、まで読んだ。

831:デフォルトの名無しさん
09/08/18 00:21:57
そのコピペにレスする馬鹿は?
組み込みの人ってやけにキチガイ度が高いよね
他のキチガイとは何か臭いが違うというか・・

832:デフォルトの名無しさん
09/08/19 21:57:37
>>827
学習用でプロトコルスタック廻りとデバイスドライバなら
絶対BSDの方がいい

Linuxのは汚くて”こうなってる筈”とあたりをつけられないと
ソースツリーの何処にあるか探しあてて中身をみただけで
気力が萎える可能性が高い

BSDは設計がガチガチな分、コードとソースツリーが読みやすい。
その分、新しいデバイスのドライバが書き辛いったらないが

833:デフォルトの名無しさん
09/08/19 22:05:06
ライセンスの問題もある
下手にlinuxのコードを参考にするとGPL厨がやってくる


834:デフォルトの名無しさん
09/08/20 00:39:34
Linuxは来年カルト認定される可能性があるので
利用してはいけない

835:デフォルトの名無しさん
09/09/08 14:24:59
0番地にリセット処理のベクタがあるとき、そのアドレスにジャンプするのは、cで
どう書けばいいですか? ルネサスのcで石はH8/300H TINYです。
void cmdhoge(void) {  /* hogeコマンド処理 */
 register void (*funca)(void) = (void*)(0);
 set_imask_ccr((_UBYTE)1);
 (*funca)();
} これだと0番地へジャンプしちゃいますよね?

836:デフォルトの名無しさん
09/09/08 14:27:17
age忘れすいません

837:デフォルトの名無しさん
09/09/08 14:41:51
>>835
こうだろ ((void (*)(void))(*((uint32_t const*)0)))() 常識的に考えて。

838:デフォルトの名無しさん
09/09/08 14:51:25
uint32t無しで、const*でコンパイルは通りました。ありがとうございます。
他のエラーつぶしたらlst見てみます。

839:デフォルトの名無しさん
09/09/08 20:09:35
const *だけかよw
せめてint const *にしてやれ。

840:デフォルトの名無しさん
09/09/08 20:21:24
void cmdhoge(void) {
void (**funca)(void)=0;
(**funca)();
}

841:デフォルトの名無しさん
09/09/09 03:34:21
あ~そういうのもありか。ありがとです。*が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_何とかばかりで、
機械語出させる定義みたいじゃなかったし。

842:デフォルトの名無しさん
09/09/09 04:19:44
>>837-840 .lstではこうなっていました。@0:16だから、0番地にあるアドレスにJMPしてますね。
598:    ((void (*)(void))(*((const*)0)))();
0A16  6B000000    MOV.W   @0:16,R0
0A1A  5900       JMP     @ER0

843:デフォルトの名無しさん
09/09/09 07:31:44
>>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
09/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にしたのですが、深い意味はありません。

845:デフォルトの名無しさん
09/09/09 15:08:26
最適化オプションとかはつけてる?

846:841
09/09/09 15:38:51
ビルド-standard tool chain-コンパイラ の最適化タグで、
サイズ優先(レジスタ退避・回復をpush/popで・switch文高速化・シフト演算の高速化・
構造体代入式の高速化・四則演算、比較、代入式の高速化・ループ文での帰納変数削除・
ループ文での帰納変数削除、ループ展開)の全部にチェック付いてます。

たしかH8/300xで書いたときも、関数呼び出しならレジスタがはっきりしているから、という
理由で関数にしました。

847:デフォルトの名無しさん
09/09/09 16:03:58
何かの条件あるとコンパイラが割り算命令を使わないとかかも?

848:841
09/09/09 16:09:28
う~ん、それがはっきりしないから、やっぱり関数呼び出しのが確実ですよね。

849:デフォルトの名無しさん
09/09/09 16:42:47
$DIVUL$3ってのを調べてみたら

850:デフォルトの名無しさん
09/09/09 19:49:23
32bit÷16bitだから

851:841
09/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
09/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
09/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 をパクって書きました。

854:デフォルトの名無しさん
09/09/10 06:20:05
gccならunionのタグは省略できるよ
ビットフィールドの位置は本来保障されないから使わない方がいいいよ
結果的に動けばいいってことみたいだからお好きにどうぞ

855:841
09/09/10 08:35:47
gccじゃないんですけど、コンパイルオプションでビットフィールドが右から/左からを選択
できるようになっています。

>>854の2行目 では、portのある1bitにI/Oするのに、どのような手法がお奨めですか?
iodefine.h のようなファイルがメーカー提供になってるのは、メーカーお奨めってことかと
理解しています。portの名称はiodefine.h に従うとして、変数のほうは、右シフトで右端に
持ってきて1bitのportに出す、とかは考えつきますけど、bitロードが右端からになるだけで
シフト演算が余分だと思います。

856:デフォルトの名無しさん
09/09/10 11:52:59
何がやりたいのか分からないけど、適当に
IO.PDR6.BYTE=メモリの変数;

DIVXUの使い方はソフトウェアマニュアルを確認してみれ

857:841
09/09/10 16:59:46
>>856 それじゃ8bitパラレルの出力でしょ。メモリのbitのあちこちをportのbitのあちこちに
1bit単位で出したいんです。で、853のような手法を試してみました。

DIVXUの使い方はCPUマニュアルのインストラクションの章で見てます。ER/Rだと理解
しましたが違ってますか?cの構文でDIVXUを吐かせるやり方は無いので>>841を考えた
のですが、インライン展開できるマクロが書ければそうしたいです。

858:デフォルトの名無しさん
09/09/10 17:39:19
32bit÷16bitって商が必ず16bitに収まるの?

ルネサスのコンパイラでasmのインライン展開やると扱いが面倒だから、お勧めしない。

859:デフォルトの名無しさん
09/09/10 17:45:35
メモリのbitのあちこちをportのbitのあちこちなら、ポートの割付見直したら?
だめなら、論理演算とか駆使してportに書き込む回数を減らす。

860:デフォルトの名無しさん
09/09/10 19:55:10
>>858
>32bit÷16bitって商が必ず16bitに収まるの?
質問してるの?

861:デフォルトの名無しさん
09/09/10 20:33:43
疑問を投げかけたとか?

862:デフォルトの名無しさん
09/09/10 20:36:16
まぁ 1 で割る可能性があることを考えれば収まらないよね

863:860
09/09/10 20:50:35
>>862
そうだよねJK

864:841
09/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の機械語") って書くみたいに。どなたかその辺のこと知りませんか?

865:デフォルトの名無しさん
09/09/11 04:52:00
#pragma asm
#pragma endasm

__asm{}

866:デフォルトの名無しさん
09/09/11 19:52:12
そろそろうぜえな
gccに変えろ
それで全て解決する

867:デフォルトの名無しさん
09/09/12 00:50:35
んでvolatileつけるの忘れて最適化に巻き込まれて無駄に悩むと。



868:841
09/09/12 05:04:13
gccって、へうにタダでついてくる奴と替えられるんですか?

>>865 その機能は使ってみたことありますけど、たしかいろいろ制約が多かったのです。
アセンブリソース吐かせてからそれをアセンブルしなければならないとか、分岐幅を
後から自分で修正してやらなければならないとか。これじゃコンパイラのソース中に記述
するだけという使い勝手にはならないや、となって諦めました。

組み込み関数の章(10.2.3)を読むと、これこれの機能だけを提供するとあって、その中に
MULXUとDIVXUは列挙されてなかったから、やはりインライン展開は諦めるべきなようです。

869:デフォルトの名無しさん
09/09/13 11:17:23
QVGAかVGAのLCDを使いたいのですが
フレームバッファかシリアルSPI形式でどっかで売ってませんかね
なるべく安く



870:デフォルトの名無しさん
09/09/13 20:08:39
なるべく安くの基準となる金額をまず書け

871:デフォルトの名無しさん
09/09/13 20:30:05
1枚1000円くらいでお願いします

872:デフォルトの名無しさん
09/09/14 04:34:55
何枚買うかで違うんじゃないの?

873:869
09/09/14 19:04:13
自己解決した
ここは素人しかいねえなあ

874:デフォルトの名無しさん
09/09/14 19:05:20
>>873
自己紹介おつ

875:デフォルトの名無しさん
09/09/15 08:24:28
LCDデバイスを変えたら表示しなくなりました。データブックによるとsetup/holdなんかの
時間がμSオーダーで長いようです。タイミングはsoftではなくハードで作っています。
softのコマンド体系なんかは同じです。
>        ______ ________________
>   Write   |________|
>           ___________
> Chip Enable_____| |______________
>            __________
>    Data  ____/ |________________
>
> ↓↓↓↓
>        ______ ________________
>   Write   |________|
>           ___________
> Chip Enable_____| |______________
>           ______________
>    Data ____/ |____________

みたいにタイミングをずらしたい、ってハード屋さんが言ってるんですけど、
これはハード改造しかないよ、と返事するしかないでしょうか?
コマンドは、 *0xC0001 = 0xXX; で1文字ライトなんで、上の3本のラインを制御するような
ソフトは書いてないです。

876:デフォルトの名無しさん
09/09/15 08:30:51
あ~!おもいっきりずれてるorz Dataの線をChip Enableより少し後まで引っ張りたいんです。
>         ______     ________________
>   Write     |________|
>           ___________
> Chip Enable_____|     |______________
>            __________
>    Data  ____/     |________________
>
> ↓↓↓↓
>         ______     ________________
>   Write |________|
>           ___________
> Chip Enable_____|      |______________
>           ______________
>    Data ____/       |____________
こんどはどうかな・・・

877:デフォルトの名無しさん
09/09/15 08:32:07
あ~もう!イヤン

878:デフォルトの名無しさん
09/09/15 08:47:46
コマンド送るタイミングをずらすとかならともかく、
ソフトで面倒見てないものを、ソフト修正でどうにか
出来るわけねえだろう。



879:デフォルトの名無しさん
09/09/15 08:54:03
LCDコントローラ(?)の出力タイミングをいじるレジスタがあったりしてな。

880:875
09/09/15 11:06:33
>>878 そうですよね。私もそう思うんですけど、ハード屋さんがなぜかsoftでとか言うもんで・・
それにしても、互換デバイスを作るときって若干早めにしとくなら分かるのに、何でまた遅く

881:デフォルトの名無しさん
09/09/15 11:19:55
>>880
「なぜか」って、聞けよ。
ソフトで幅いじる設定があるのを知ってるのかもしれないだろ。

882:デフォルトの名無しさん
09/09/15 11:43:30
ちょっと質問させていただけますでしょうか。
ARM7でOSを使わずにプログラムの動的ロード・アンロード(関数単位くらいでの入れ替え)を実現したいのですが、手法について参考になるURLか本があったら教えていただけないでしょうか。m(_ _)m


883:デフォルトの名無しさん
09/09/15 11:51:47
関数ポインタとかでできるんじゃないの?

884:デフォルトの名無しさん
09/09/15 12:37:11
gccで言う-fPIC
あとはオーバレイセクションかな

885:デフォルトの名無しさん
09/09/15 14:37:00
>>880
WAITの設定できるマイコン使ってるとか?

886:デフォルトの名無しさん
09/09/16 01:25:04
>>885
WAITじゃHold timeはのばせないだろう。


887:875
09/09/16 03:26:29
>>881 あ、もちろんハード屋さんには正直に話してますよ。
製造中止にされたデバイスがヒュンダイ、じゃなかったサムスンなんで、互換デバイスは
もっと怪しげなとこなんだろうなあ・・・ 安いの使えっていう縛りがあるのかと。
私にもメールで相談くれるぐらいで、呼ぶ金すら無さそうなんで、かわいそうに。

888:デフォルトの名無しさん
09/09/16 06:01:47
>>887
そのCPUにLCDドライブの機能があって、
そのLCDがCPUから直接つながっていて、それを利用してLCDを制御しているなら、
あるいはレジスタでタイミングの変更とかできるかもしれないね

もし、そうでなくてCPUからLCDドライバみたいなものやFPGAとかを介してLCDがつながっているなら
ソフトではどうしようもないでしょうね

システムの構成がそれだけの情報ではわからないので、なんとも言えないと思う


889:875
09/09/16 16:34:05
あ、ごめんなさい。後者のほうです。メモリ空間C0000とC0001へのI/Oがチップセレクトを
介してLCDデバイスにつながるようになってます。アドレスのLSBがレジスタ選択になって
いて、0がコマンド、1が表示データ(ASCII)。 私の 「だめでしょう」 という返事がまとも
だったらしいのが確認できました。 ありがとうございます。

890:デフォルトの名無しさん
09/10/10 16:24:00
2年ぐらい経った製品で、char[48]の所に28文字以上入ってると、ずっと若いアドレスの
エラーフラグが立たないというバグが出ました。H8/2378 RAMは32KBあって余ってる。
上記char[48]の変数がほぼ末尾(後には使わない__errnoだけ)。
そこから10K以上離れてスタック。 cソース上はおかしな所無いってお客さんも言ってる。
どこから調べたもんか・・・参った。

891:デフォルトの名無しさん
09/10/10 16:37:18
char[48]を参照してる所とエラーフラグの因果関係を調べりゃいいんじゃないの

892:デフォルトの名無しさん
09/10/11 03:15:10
28文字以上が条件なのかもしれんけど、バグはどっか別の場所だよ


893:890
09/10/11 04:21:00
レスありがとです。 >>891 それは真っ先にgrepすることですが、因果関係は見つかりません。
>>892 それはそうですね。見つかったらまた書きにきます。

894:デフォルトの名無しさん
09/10/11 04:26:23
処理が間に合ってないとか?

895:890
09/10/12 04:45:31
uart3本のうち2本は4.8K、1本が115Kだけど、uartのほうで支障が出たことはないの。
クロックは33MHz。メインループは15μSぐらいで回ってて、その中でエラーフラグを
立てたりしてる。お客さんはメインループ中で@ER6でアクセスしてるフラグのアドレスを
保持するER6が壊されるんじゃないか、って疑ってるんだけど、.lstファイルのgrep見ても
メイン以外の関数の入り口出口ではER4-ER6を退避・復元してる。

896:デフォルトの名無しさん
09/10/12 06:46:58
ICEなりJTAGなりで、メモリウォッチはできないの?


897:デフォルトの名無しさん
09/10/12 11:01:01
>>895
それを疑うなら、ER6の値をチェックするコードをインラインアセンブラで書いて
確認すりゃいいんでないかい。

なんとなくrace conditionくさいので、コードに細工すると再現しなくなったり
するかもしれんが。


898:デフォルトの名無しさん
09/10/12 11:57:13
エラーフラグ(@ER6)を割り込みで書き換えてるとか

899:890
09/10/13 06:13:19
>>898 それはありませんね。全部タスクレベルでやってます。

>>896-897 そのアイデアはいいですね。お客様にすすめてみます。
メモリはデバック用のコマンドでも見れるようにはしておいたのですが、変更される瞬間
は捕まえられないですものね。

900:デフォルトの名無しさん
09/10/13 13:39:00
じゃ、参照される前にエラーフラグをどっかでクリアしてるのでは?

901:890
09/10/13 17:41:43
それがいちばん疑われるのですが、それをgrepで見つけられないのがグヤジイんですよね

902:デフォルトの名無しさん
09/10/13 21:44:33
>>901
> それをgrepで見つけられない
あのな、そうゆうのはおおむね grep では見つからない
バッファ御バーフローとか
スタック使いすぎとか
見つけること可能か、grep で?


903:デフォルトの名無しさん
09/10/14 01:11:56
エラーフラグは参照したけど、速攻でエラー状態が消えてるとか

904:890
09/10/14 03:12:16
愚痴聞いてくれてありがと。見つかりました。マ板よりこっちのが親切な人多いですね。
char wk[64]に sprintfしてて、ちょっとだけ長くなったその後ろがER6のpush場所でした。
もっと長くなると復帰アドレス飛ばして暴走リセットまで行くところでした。
grepの経過にそれらを見てるログが残ってたのに、スタックのサイズを気にしただけで
スタックの中身の並びまで思考が深入りせず流してました。

そこのchar[64]は、もともと%c,・・・みたいに固定だったのを、後から%sを含む編集を
付け足したデグレでした。皆さまお騒がせしました。

905:デフォルトの名無しさん
09/10/15 00:46:02
ちょっとバグ取り手伝ってもらおうと思って聞きに行ったときに

ここでこの変数にこれが入って~ で、そのあとこのif文にくるでしょ~
ここがなんでか正になるんだけど~ それは このif文の前に~
この処理が入ってるのが原因じゃん! わかった!ありがと!

みたいな感じで説明途中で自己解決して帰るパターンとか多いよな。

906:デフォルトの名無しさん
09/10/15 01:30:25
人に説明するとその種の問題は見つかりやすいね。
まあ、コードレビューってのは半ばそれが目的なのかもしれないが。

907:デフォルトの名無しさん
09/10/15 02:28:15
>>905
あるあるw

908:890
09/10/15 03:50:01
まさにそれを念頭に置いてここに書きに来ました。
お客さんのほうが頭の回転が速くて先に見つけてくれちゃいましたが。

909:デフォルトの名無しさん
09/10/15 04:15:38
>>908
>お客さんのほうが頭の回転が速くて先に見つけてくれちゃいましたが。
あなたと話をすることで、レビューになったんだよ
役に立ってないようで、実はすごく役に立ったんだと思うよ
たぶん、お客さんは感謝してると思う。

910:デフォルトの名無しさん
09/10/15 04:21:06
>>904
オレは、「文字列」、「文字配列」、「文字値」、「文字」を違うものとして考えてるよ

911:デフォルトの名無しさん
09/10/15 22:35:46
シュリーマンが外国語を勉強していたときも、その辺の浮浪者を捕まえて
ただひたすらベシャリを聞かせていたというし
カーニハンもデバッグの一番の方法として、その辺のテディベアを捕まえて
ただひたすらコードの説明を聞かせていたというし
昔からある確立された手法であることは間違いない

912:デフォルトの名無しさん
09/10/15 23:31:13
>>911

参考になった。今度サボテンに向かってしゃべってみるわ。
しかし、シュリーマンの相手してた浮浪者はいい迷惑だなww


913:デフォルトの名無しさん
09/10/16 10:00:20
アメリカのとある大学の計算機センターでは、センター職員に話をする前に、
まずこれに向かって説明をしなさい、というテディベアが置いてあったとか。

914:デフォルトの名無しさん
09/10/16 10:04:43
と、「プログラミング作法」に書いてあった

915:デフォルトの名無しさん
09/10/16 17:28:00
HEW
って、

構造体のアラインメントっていうか、
構造体のパッキングオフにしたり
できまつか?

916:デフォルトの名無しさん
09/10/16 17:46:07
ビルド-H8...Standard Toolchain-CPU タグの下に、メンバの境界調整数を1とする、ってのが
あるから、それじゃないか? ビットフィールド割付けを上/下からの選択もここにあるし。

917:デフォルトの名無しさん
09/10/16 18:33:14
アドレスエラーにならないように気をつけた方がいい

918:デフォルトの名無しさん
09/10/19 10:11:02
>>916 >>917

その内容からすると、どうもHEWってアラインメントを弄らないのが、ふつーみたいですね。

ダミーメンバー入れて構造体のパッキングをいじればおkですか?

919:デフォルトの名無しさん
09/10/19 10:59:23
>>918
やってみて確認したら?
mapファイルもでるわけだし。


920:デフォルトの名無しさん
09/10/19 12:20:00
struct hoge
{
char int8;
short int16;
};
struct fuga
{
short int16;
char int8;
};
構造体のint16のアドレスが奇数番地になってたら、h8/shだと実行時におかしくなるかも?

921:デフォルトの名無しさん
09/10/19 19:57:34
offsetofマクロでメンバの相対位置を確かめてみたら。

922:デフォルトの名無しさん
09/10/19 20:59:59
なんでここはH8の話ばっかりなの?

923:デフォルトの名無しさん
09/10/19 21:03:35
何か問題でも?

924:デフォルトの名無しさん
09/10/19 21:59:52
H8を使っている無能がよく質問に来るだけという話

925:デフォルトの名無しさん
09/10/19 22:23:52
日本はH8人口が一番多いから

926:918
09/10/20 09:34:34
㌧ & ゴメソ >>919 >>920 >>921

ごめんなさい、社内の別のプロジェクトの人との会話中に出てきた話で、
自分SHの基板持ってないのでテストできません。。。

H8じゃなくてSH2でつ。

927:デフォルトの名無しさん
09/10/20 12:19:48
>>926
だから、ビルドして、mapファイルみたらわかるんじゃね?

928:デフォルトの名無しさん
09/10/22 00:52:37
コンパイラ パッケージ 9.01 のマニュアルによるとコンパイラ オプションと
#pragma pack で1か4(デフォルト)を指定できるみたいね。

境界をまたぐアクセスをした場合、バス サイクルを分割しないだろうから
BUSERR か、バイト順が入れ替わってしまうかのどちらかだろうね。
って、ハードウェア マニュアル嫁って話だな・・・

H8/SH で packed record は漢かも。

929:デフォルトの名無しさん
09/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でやってたとかの心配はしなくていいですよね?

930:デフォルトの名無しさん
09/10/23 09:40:56
BCLR/BSETの命令実行中に割り込みが入ったら、どこに戻ってくるの?

931:929
09/10/23 16:47:10
その命令の次、ですよね。 >命令実行中に 「割込要因が起きる」ことはあるでしょうが、
「割り込みが入る」というのが 「割り込みベクタのアドレスに飛ぶ」 ことなら、命令実行後
のはずですよね。1命令の実行中に割り込みを受け付けるのは EEPMOV のような
くり返し系の命令だけ、と理解しています。

932:デフォルトの名無しさん
09/10/23 18:00:37
>>931
パイプライン

933:929
09/10/24 05:10:00
H8にはなかった。H8Sは23xxシリーズ使ってますが、パイプライン機能は無かったような。
パイプライン機能があったとしたら、割り込みを受け付けるタイミングに制約があるのですか?
1命令の実行中というのはあり得ない、割り込みベクタのアドレスに飛ぶのは命令実行後、
パイプライン機能が先の番地の命令を先取りしていたとしても、分岐が起きた時点で
その実行結果は破棄されると理解していましたが、どこか間違っていますか?

934:デフォルトの名無しさん
09/10/24 08:00:30
ちゃんとわかってるじゃん

935:デフォルトの名無しさん
09/10/24 16:19:21
シリアルポートはどういうところで使われているのでしょうか

936:デフォルトの名無しさん
09/10/24 16:50:28
USBが無かった時代はシリアルで繋いでたという程度のモノだよ
制御も比較的ラクだしね

937:デフォルトの名無しさん
09/10/24 17:44:19
>>936
ありがとうございます

シリアルポートを操作するようなプログラムをアセンブリとC言語にて組もうと考えているんですが、
まずは何から学べばよいでしょうか?

938:デフォルトの名無しさん
09/10/24 17:45:08
通信だけならCで20行ほどで組める

939:デフォルトの名無しさん
09/10/24 18:00:15
>>938
実はlinuxのカーネル内で組んであるシリアルポートへの通信プログラムでして、
これを勉強しようと思っているのですが、カーネルレベルということなので
何から学べばよいのかわからなくて

940:デフォルトの名無しさん
09/10/24 18:27:42
情報の小出しはイラっとくるな

941:デフォルトの名無しさん
09/10/24 18:33:34
>>940
linux0.01です。

942:デフォルトの名無しさん
09/10/24 20:45:28
なるほど
回り道をして、力尽きて、死にたいと申すか
まずはlinuxから離れよ

943:デフォルトの名無しさん
09/10/25 02:15:54
シリアルの送信だけするところから始めたら

944:デフォルトの名無しさん
09/10/25 14:33:50
>>939
その書き方なら、それはカーネルレベルの話ではない。

945:デフォルトの名無しさん
09/10/25 15:10:27
>>939
マニュアルを読むのと、ネットで探すと参考になるプログラムがある
H8もSHもほとんど同じ
送信も受信も基本はレジスタを読み書きする。

回線アナライザがあると楽だけど、パソコンのターミナルソフトで見てもいい
オレは、tty.exeっていう簡単なターミナルソフトをよく使う。


946:デフォルトの名無しさん
09/10/25 17:36:15
なるほど、昨日書店に行きまして組み込み系の書籍をざっと見てきたので、近々わかりやすい書籍を二冊ほど買ってこようと思います。


947:デフォルトの名無しさん
09/10/25 19:11:50
とりあえずH8は色々試せるからこれがいいんじゃないかね。
URLリンク(akizukidenshi.com)
完成品で5VのACアダプタとPCにRS232C(かUSBシリアル変換)
があるならすぐ使える。シリアル2ポートやethernetなどが付いてるし、
メモリ増設すれば格安でuCLinuxも動く。遅いけど。

メモリとか不要なら1チップのPICやAVRの方が単純でいい。
ただし書き込み環境が必要。

あくまでlinuxからシリアル使いたいだけならlinux板で聞いた方がいい。

948:デフォルトの名無しさん
09/10/25 22:15:32
termiosの特殊制御文字でわからない特殊文字が幾つかあるのですが、
VSWTC 7
VREPRINT 12
VDISCARD 13
VWERASE 14
VLNEXT 15
VEOL2 16
これらについて載っているサイト等ありましたら教えて頂けないでしょうか?

949:デフォルトの名無しさん
09/10/25 22:32:35
URLリンク(www.google.co.jp)

950:デフォルトの名無しさん
09/10/25 22:33:18
えーと、海外のサイト渡り歩いていたら見つけました。お手数かけました。

951:デフォルトの名無しさん
09/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対象の)を実行しても、フラグは変化しない。 この理解で合っていますか?

952:デフォルトの名無しさん
09/10/26 03:16:21
もう一度質問を読み返せ
さっぱりわからん

953:デフォルトの名無しさん
09/10/26 08:26:09
z80だけど、参考にしてみたら
URLリンク(www.systemax.jp)

954:デフォルトの名無しさん
09/10/26 09:34:12
8085の資料がどっかにないの?
CP/M関係の海外サイトとか。

955:デフォルトの名無しさん
09/10/26 10:34:10
"8085 instruction set" でぐぐってみるぐらいのことは

956:デフォルトの名無しさん
09/10/27 10:09:02
8085? 海外では、もっとも使われているマイクロコントローラーじゃんか?
セカンドソースは数え切れないほど。
狭いが、組み込み業界では、ほぼ世界標準のMCUだろ?

資料の集め方から修行をやり直せ!

957:デフォルトの名無しさん
09/10/27 12:00:27
それは8051でないかい。



958:デフォルトの名無しさん
09/10/27 12:20:32
>>951
大体合っているよ。手元に8085のインストラクションセットがないなら、8080のインストラクションセットでもほぼ一緒。
ハードウェア周りと8085で追加されたインストラクション二つとクロック数程度しか違わない。

959:951
09/10/28 14:35:51
>>958 ありがとうございます。
大昔(1988年頃)には、雑誌に載ったチップの説明の青焼きを頼りにやってたのですが、
さすがにそれらも残ってなくて、うろ覚えになってたので、助かりました。

>>955 英語ばっかり引っかかるのイヤん。先頭の奴ざっと見たら沖のとほぼ同じでした。

960:955
09/10/28 14:41:44
>>959
え?最初のリンクで、ちゃんとフラグの変化まで表に出てるじゃん

961:デフォルトの名無しさん
09/10/28 16:00:21
フラグがどうなると変わるか知りたいとか?

962:デフォルトの名無しさん
09/10/28 18:06:32
1990年代にttyはどのような使われ方をしていたのでしょうか?

963:デフォルトの名無しさん
09/10/28 18:26:19
またお前か

964:デフォルトの名無しさん
09/10/28 18:26:46
テレタイプ(ライタ)は、90年代にはほとんど動く化石だろ。
テレックス網は先日まで生きてたけど。

965:デフォルトの名無しさん
09/10/28 18:28:36
>>962
いまでも使ってるよ
ただのキャラクタベースの端末

966:デフォルトの名無しさん
09/10/30 13:46:56
マイコンの勉強するなら、どっちのボードが良い?

AKI-H8/3069FフラッシュマイコンLANボード
URLリンク(akizukidenshi.com)
AKI-H8/3052LAN開発キット
URLリンク(akizukidenshi.com)

ネットワーク使ったプログラム動かしたり、
Linux動かしたりしてみたい。

3069はuClinuxを走らせてみた、というようなページが
いくつか見つかったが、3052は見当たらなかった。

入門本では3052と似た?3048がよく使われてるそうなので、
初心者はこっちの方が良い?


967:デフォルトの名無しさん
09/10/30 17:04:55
H8にLinuxは荷が重いな

968:デフォルトの名無しさん
09/10/31 01:28:22
3048 は止めといた方が良かったと思う
3069 で桶


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