●●●くみこの組み込み相談室1.0●●●at TECH
●●●くみこの組み込み相談室1.0●●● - 暇つぶし2ch803: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