H8/SH gcc vs 純正コンパイラ

このエントリーをはてなブックマークに追加
156774ワット発電中さん:2010/02/21(日) 10:01:57 ID:cLMuCJtY
シリアル通信のSCI3_OUT_DATA命令が動いてない気がする。
3664.hのファイル見つけたけど、最新版に使えないよ〜
見比べて書き換えるしかないか・・・
157774ワット発電中さん:2010/02/21(日) 13:21:33 ID:vnzxrwlk
SCI3_OUT_DATAって、defineされてるだけでしょ
158774ワット発電中さん:2010/02/23(火) 21:58:13 ID:7thLBGCn
よくわからないから、サンプルをコピペして、3694.hにして
通信速度だけ直接レジスタに書き込んで3664用のボーレイトに変えたんだけど、
サンプルが作動してない。
ほかにも違う所があるのかも。

最新版用の3664.hは、どこかにないかな?
159774ワット発電中さん:2010/02/24(水) 10:26:13 ID:ruCe2FPu
うちが持ってる3664.hは、 タイムスタンプが2003/08/05 06:11:16で、
51,505バイト。  これより新しいのがあるかな?
160774ワット発電中さん:2010/02/24(水) 10:28:26 ID:Evm9cyYK
自前で書いたら、それが最新
161774ワット発電中さん:2010/02/24(水) 18:16:46 ID:0N688A9Y
158だけど、自分の手持ちも159と同じ。最新版には使えない様な・・・
インストール方法があるのかもしれないが。
自前で書くには何ヶ月かかるかわからない。

162774ワット発電中さん:2010/02/24(水) 18:45:33 ID:0N688A9Y
もう一度、3694.hで、ボーレイト設定を3664用にしたら、サンプルのSCI3_OUT_DATAが機能してた。
前回はなにか間違えてたみたい。

自前にトライしてみようかな。

163774ワット発電中さん:2010/02/24(水) 21:30:44 ID:Evm9cyYK
構造体と共用体がわかってるなら
ハードウェアマニュアルとにらめっこしながらで
1週間もあれば、出きるでしょ。
3694.hを参考にしながら、SCI部分だけでもやってみたら
164774ワット発電中さん:2010/02/24(水) 23:08:35 ID:m2KDRDw5
ふと…
マイコン毎の定義ファイルの存在を知らず、ハードウェアマニュアル片手にポート定義やビットテーブルを
イチから組んできた俺はマイノリティというか愚かなのだろうかという気がしてきた
165774ワット発電中さん:2010/02/24(水) 23:29:54 ID:Evm9cyYK
道具に使われてるよりはましなんじゃないの
166774ワット発電中さん:2010/02/25(木) 04:52:50 ID:nitvR3p6
>>162 は、GCCの3694fフォルダにあるsci3.cとかを使おうとしているのかな。

俺も>>164と同じく、sci3.cに相当するコードを全部自前で書いてる。
何十回も使い回したからインターフェースも暗記してるし、sci3.cより効率もいい。

でも162のアプローチも間違いではないとおもう。SCI3のポートアドレスと、
SMRのクロックセレクトを3664の石ではどうなるか確認すれば動くと思うよ。
167774ワット発電中さん:2010/02/25(木) 04:59:31 ID:nitvR3p6
166を書いた後でsci3.cを読んでみた。割と素直に書かれているじゃない。
俺の自前はバッファをドライバ側に抱え込むこととバッファサイズを2のn乗に
限ることで、ring読み書きの際割り算が起きないようにしたり工夫してるけど、
思想的には殆ど一緒だった。
168774ワット発電中さん:2010/02/25(木) 13:45:23 ID:q/hNXnwx
シリアル程度なら、「まともなヤツ」が「普通に作れば」そんなに変わらない
169774ワット発電中さん:2010/02/25(木) 15:42:44 ID:gYe38HYb
162だけど、
3694.hの下記の部分の右側だけ書き換えたら動くと思ってる

/*--------------------------------------------------------------*/
/* シリアル通信関数(FIFOバッファ付) */
/*--------------------------------------------------------------*/
typedef enum { // ボーレート設定リスト
br4800 = 129,
br9600 = 64,
br19200 = 32,
br31250 = 19,
br38400 = 15,
br57600 = 10

IIC接続も違いがあるらしいが、今は使わないから後回し。
他も違いがあるのかどうか知らない。ハードウェアマニュアルのページが多くて。

タイマー周期は3664のサンプルプログラムなら大丈夫だろうし。

Cは入門書のポインターで止まってて、その後ろに構造体とかあったような・・・。
sci3.cなんて無視してた。3694.hだけ見てた。

ジャンク工業用ミシン買って、振動の少ない回転数で使おうと、
DCモーターの親戚のようなACモーターの回転数制御のためとマイコン買った。
裁縫はお休み状態。
170774ワット発電中さん:2010/03/10(水) 23:14:38 ID:4DMLTJAR
kpitの中の人のgccに入れようとしてるパッチって今ひとつなんだよね
追加パッチじゃなくて、bugfixのパッチあげりゃあいいのに
171774ワット発電中さん:2010/03/10(水) 23:41:51 ID:aI2THs+v
三三三三三三三三三三三三三三三三三三三三三三三三三三三三三
三三三三三l =====(((()=== l´.l三三三三三三三三三三三三三三
三三三三三||.l三三三|| \ 三 l |三三三三三三三三三三三三三
三三三三三||.l三三三||三 \ l |三三三三三三三三三三三三
 ̄ ̄ ̄ ̄ ̄||,l.-‐=テ||= ‐ - l | ̄ ̄ ̄ ̄
          l ‐- 、- ==-v‐‐. l
          |            彡|               (?
          | ああああああああ彡|         
          |    井戸     彡|    Λ Λ
       "´ ‐- 、-    - ‐‐."`  (    )<
172774ワット発電中さん:2010/03/11(木) 11:14:34 ID:t2UARMSr
>>164
鳩山には遠く及びませんが、立派な情弱です。胸を張って生きてください。
173774ワット発電中さん:2010/03/13(土) 16:18:27 ID:TxN4+1ID
kpitの中の人のパッチ、また、お断りされちゃったね
174774ワット発電中さん:2010/04/05(月) 00:58:46 ID:rWEGdsVU
kwsk
kpit版のコンパイラ本体の改良点が知りたい。
ソースたぐりよせてdiffれカスはナシの方向で。
175774ワット発電中さん:2010/04/10(土) 07:15:09 ID:AqFTKsHl
何をkwskかわからんけど
shの割り込みの終了処理のコードの問題は直ってたような
176774ワット発電中さん:2010/04/10(土) 22:35:32 ID:AqFTKsHl
longが64bitな環境で、
h8300をターゲットにする時はbinutilsにパッチあてないと
関連ライブラリをコンパイルする時にwarningがでる
177774ワット発電中さん:2010/04/12(月) 18:51:42 ID:BndBY9Cp
shの割り込みの終了処理のコードの問題解決に変なpatch採用しちゃったね。
ttp://gcc.gnu.org/ml/gcc-patches/2001-06/msg01351.html

! (ior
! (ne (symbol_ref "TARGET_SH3") (const_int 0))
! (eq_attr "hit_stack" "no"))))) (nil) (nil)])
ここの論理演算がおかしいだけなのに
178774ワット発電中さん:2010/04/13(火) 10:14:51 ID:VOQBSuwF
あのパッチじゃ、このコードもダメになるじゃないかな
rts
mov.l @r15+,r14
179774ワット発電中さん:2010/04/21(水) 04:39:31 ID:LROe2Kgj
H8S用にコンパイルしています。main()冒頭のER4,5,6をpushする命令を
出させない方法ありませんか?
180774ワット発電中さん:2010/04/21(水) 04:44:20 ID:LROe2Kgj
age忘れました。すいません
181774ワット発電中さん:2010/04/21(水) 07:26:03 ID:bzU6UcbT
naked
182774ワット発電中さん:2010/04/21(水) 07:45:31 ID:5zOACwqi
void main () __attribute__ ((noreturn));
183179:2010/04/21(水) 13:34:33 ID:LROe2Kgj
ありがとうございます! >>182の方法でできました。
void main(void) {      // 電源ONでここに来る
  extern char stack[];  // startupで隠している情報
  asm (" mov.l #_stack,sp"); // LINK制御文により00FFC000になる。
  DI; // 割り込み禁止
  HardwareSetup();   // Hardware Setup(含ROM,RAM init)
こうすると、h8crt0.sというASMのstartupコードを追放できます=Hewのentryと同様に。
ROM→RAMcopyと、RAMクリヤはHardwareSetup()中で任意のタイミングでできます。
184774ワット発電中さん:2010/04/21(水) 18:39:31 ID:5zOACwqi
__attribute__ ((noreturn))
void
main()
{
extern char stack[];
asm (" mov.l %0,sp"::"i"(&stack));
for(;;);
}
185179:2010/04/22(木) 04:48:39 ID:8aqrlx2Z
そのほうがスマートな書き方ですね。%0と後ろのどれが対応するとか、"i"の意味とか
その辺はどこの章を読めばいいですか?
186774ワット発電中さん:2010/04/22(木) 05:21:37 ID:yfcjYXaq
187774ワット発電中さん:2010/04/22(木) 07:40:07 ID:JskXH1yP
>>139
ar 使えば?
188179:2010/04/22(木) 08:02:05 ID:8aqrlx2Z
>>187 それはIARのコンパイラのことですか? それなら小さいlibでのビルドは
成功しています。
189179:2010/04/22(木) 09:00:09 ID:8aqrlx2Z
>>186 ありがとうございます。なんか抽象的でよく解りませんが、
使用例をちょっとずついじりながら使ってみようとおもいます。
190179:2010/04/22(木) 09:05:05 ID:8aqrlx2Z
今 -O1 レベルの最適化でコンパイルしていますが、関数の順序が入れ替わる
ファイルとそうでないのがあるのですね。これはどういう基準で起きるのでしょう?
191774ワット発電中さん:2010/04/22(木) 16:36:01 ID:yfcjYXaq
>関数の順序が入れ替わる これはどういう基準で起きるのでしょう?
とりあえず、gccのバージョンによって違うとしか

h8300.mdを読むとインラインアセンブラの使い方がわかるかも
mdファイルを読むのは大変だけどね
192179:2010/04/23(金) 11:54:57 ID:eI+fjbR8
ありがとうございます。
193774ワット発電中さん:2010/04/23(金) 23:26:45 ID:q+cJdqtn
binutils2.20向けのrx-elfのパッチが出てるね
194774ワット発電中さん:2010/04/23(金) 23:41:55 ID:kPoB+GhE
んなもんsnapshot使えばいいやん。
とか思わなくもない。


195774ワット発電中さん:2010/04/24(土) 18:08:30 ID:ha+iS0Lk
>>164
>>172
この前、Hewのアップデートをかけて新しいCPUのI/O定義ファイルを
手に入れたんだが、以前使っていたCPUと定義ルールが違っていて、
プログラムソースを修正するハメになった。
自分で書いてれば、こんな目には遭わないだろうね。
196774ワット発電中さん:2010/04/24(土) 19:10:43 ID:oL9PSDlt
ttp://gcc.gnu.org/bugzilla/show_bug.cgi?id=42102
mdに書いてある+Qの+ってのが悪いみたいだね
197774ワット発電中さん:2010/04/24(土) 19:30:00 ID:oL9PSDlt
しまった、オリジナルは+mだった
198774ワット発電中さん:2010/05/17(月) 22:18:05 ID:1I6SgvHC
>>178
試してみたけど、案の定、改悪しちゃったね。
199774ワット発電中さん:2010/06/02(水) 20:01:07 ID:8fr7nwnQ
kpitの中の人はsh2aのmovuを使えるようにするパッチとかはつくらないんだろうか?
200774ワット発電中さん:2010/06/20(日) 16:50:13 ID:Ty6wWZ1S
>>196
bsetは修正されたけど、bnotとbclrは忘れてるっぽい
201774ワット発電中さん:2010/08/18(水) 22:55:41 ID:6+x1zmxx
sh2aのmovmlとmovmuを使うようにgccを改造してみた。
すっきりした汗のソースを吐くようになったよ。
202774ワット発電中さん:2010/08/20(金) 01:27:08 ID:PIzyVJYh
shのgccだとdt使うpeepholeが悪さして、変なコードを吐くことがある。
peephole2で回避できるみたいだけど...
203774ワット発電中さん:2010/08/20(金) 19:12:03 ID:2+mShBdB
kpitの中の人はsh2aのmovmlの追加で迷走してるみたいだね。
あのmdの追加じゃ、変な汗のソースを吐くことがあるような。
204774ワット発電中さん:2010/08/23(月) 03:07:41 ID:Ez97xeaW
添削ついでに、新しいpatchが出たけど、
r7固定にしたんじゃ、sh2aのmovmlの効果があんまりないような。
205774ワット発電中さん
kpitの中の人はあきらめたのかな?
sh2aのmovmlを使うようにするとこんな汗吐くようになるんだけどね。

mov.l r7,@-r15
mov.l .L3,r7
mov.l @r7,r7
mov.l r15,@-r7
mov r7,r15
movml.l r6,@-r15
movmu.l r14,@-r15
sts.l mach,@-r15
mov.l .L4,r0
sts.l macl,@-r15
jsr @r0
mov r15,r14