2010-12-12
auの携帯間のアドレス帳コピー
今回、INFOBAR2からIS01にアドレス帳をコピーした。
microSDを使うのがよいと思う。
今回やった手順。
- INFOBAR2の「アドレス帳」→「メニュー」→「microSDバックアップ」、でアドレス帳データをmicroSDに保存。
- IS01にmicroSDを差す。
- IS01の「設定」→「システム」→「microSD&内蔵メモリ」→「SDバックアップ」→「読み込み」→ロックNo.を入力→「電話帳」を選択
- 1.で保存したファイルが出てくるはず。ファイルを選択して、右下の「追加登録開始」
ググって探しきれなかったので、メモ。
2010-10-24
12ステップで作る組み込みOS自作入門 3ステップ目
kzload.elfのSymbol tableをアドレス順に並べてみる
頭の中がごちゃごちゃしてきたので整理のために。
(わざわざVBScriptを覚えて、サクラエディタのマクロを書いて)*1アドレスとおぼしきValueが小さい順にソートしてみた。
Symbol table '.symtab' contains 76 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 00000000 0 NOTYPE LOCAL DEFAULT UND
1: 00000000 0 SECTION LOCAL DEFAULT 1
6: 00000000 0 FILE LOCAL DEFAULT ABS vector.c
8: 00000000 0 FILE LOCAL DEFAULT ABS main.c
13: 00000000 0 FILE LOCAL DEFAULT ABS lib.c
45: 00000000 0 FILE LOCAL DEFAULT ABS serial.c
50: 00000000 256 OBJECT GLOBAL DEFAULT 1 _vectors
2: 00000100 0 SECTION LOCAL DEFAULT 2
55: 00000100 0 NOTYPE GLOBAL DEFAULT 2 _text_start
60: 00000100 0 NOTYPE GLOBAL DEFAULT 2 _start
7: 0000010a 0 NOTYPE LOCAL DEFAULT 2 .L1^B1
10: 0000010c 148 NOTYPE LOCAL DEFAULT 2 _printval
74: 000001a0 130 NOTYPE GLOBAL DEFAULT 2 _main
12: 00000220 0 NOTYPE LOCAL DEFAULT 2 .L4
59: 00000222 26 NOTYPE GLOBAL DEFAULT 2 _memset
15: 0000022a 0 NOTYPE LOCAL DEFAULT 2 .L8
14: 00000236 0 NOTYPE LOCAL DEFAULT 2 .L7
58: 0000023c 40 NOTYPE GLOBAL DEFAULT 2 _memcpy
17: 0000024a 0 NOTYPE LOCAL DEFAULT 2 .L16
16: 00000258 0 NOTYPE LOCAL DEFAULT 2 .L15
66: 00000264 58 NOTYPE GLOBAL DEFAULT 2 _memcmp
22: 00000270 0 NOTYPE LOCAL DEFAULT 2 .L27
20: 00000284 0 NOTYPE LOCAL DEFAULT 2 .L22
19: 0000028a 0 NOTYPE LOCAL DEFAULT 2 .L21
18: 00000292 0 NOTYPE LOCAL DEFAULT 2 .L26
21: 00000294 0 NOTYPE LOCAL DEFAULT 2 .L17
71: 0000029e 26 NOTYPE GLOBAL DEFAULT 2 _strlen
24: 000002a6 0 NOTYPE LOCAL DEFAULT 2 .L35
23: 000002b0 0 NOTYPE LOCAL DEFAULT 2 .L34
64: 000002b8 30 NOTYPE GLOBAL DEFAULT 2 _strcpy
26: 000002c0 0 NOTYPE LOCAL DEFAULT 2 .L37
25: 000002ce 0 NOTYPE LOCAL DEFAULT 2 .L38
48: 000002d6 50 NOTYPE GLOBAL DEFAULT 2 _strcmp
32: 000002dc 0 NOTYPE LOCAL DEFAULT 2 .L55
27: 000002e4 0 NOTYPE LOCAL DEFAULT 2 .L53
30: 000002f4 0 NOTYPE LOCAL DEFAULT 2 .L46
29: 000002fa 0 NOTYPE LOCAL DEFAULT 2 .L45
28: 00000300 0 NOTYPE LOCAL DEFAULT 2 .L50
31: 00000302 0 NOTYPE LOCAL DEFAULT 2 .L41
67: 00000308 66 NOTYPE GLOBAL DEFAULT 2 _strncmp
39: 00000318 0 NOTYPE LOCAL DEFAULT 2 .L63
35: 00000326 0 NOTYPE LOCAL DEFAULT 2 .L61
34: 0000032c 0 NOTYPE LOCAL DEFAULT 2 .L60
33: 00000332 0 NOTYPE LOCAL DEFAULT 2 .L57
37: 0000033a 0 NOTYPE LOCAL DEFAULT 2 .L59
38: 0000033e 0 NOTYPE LOCAL DEFAULT 2 .L58
36: 00000340 0 NOTYPE LOCAL DEFAULT 2 .L56
51: 0000034a 46 NOTYPE GLOBAL DEFAULT 2 _putc
40: 00000364 0 NOTYPE LOCAL DEFAULT 2 .L65
53: 00000378 36 NOTYPE GLOBAL DEFAULT 2 _puts
42: 00000384 0 NOTYPE LOCAL DEFAULT 2 .L72
41: 00000390 0 NOTYPE LOCAL DEFAULT 2 .L71
63: 0000039c 100 NOTYPE GLOBAL DEFAULT 2 _putxval
43: 000003be 0 NOTYPE LOCAL DEFAULT 2 .L86
44: 000003e2 0 NOTYPE LOCAL DEFAULT 2 .L75
62: 00000400 54 NOTYPE GLOBAL DEFAULT 2 _serial_init
56: 00000436 36 NOTYPE GLOBAL DEFAULT 2 _serial_is_send_enable
72: 0000045a 86 NOTYPE GLOBAL DEFAULT 2 _serial_send_byte
47: 00000482 0 NOTYPE LOCAL DEFAULT 2 .L4
3: 000004b0 0 SECTION LOCAL DEFAULT 3
52: 000004b0 0 NOTYPE GLOBAL DEFAULT 2 _etext
68: 000004b0 0 NOTYPE GLOBAL DEFAULT 3 _rodata_start
75: 00000521 0 NOTYPE GLOBAL DEFAULT 3 _erodata
4: 00fffc20 0 SECTION LOCAL DEFAULT 4
61: 00fffc20 0 NOTYPE GLOBAL DEFAULT 4 _data_start
65: 00fffc20 2 OBJECT GLOBAL DEFAULT 4 _global_data
9: 00fffc22 2 OBJECT LOCAL DEFAULT 4 _static_data
46: 00fffc24 12 OBJECT LOCAL DEFAULT 4 _regs
5: 00fffc30 0 SECTION LOCAL DEFAULT 5
11: 00fffc30 2 OBJECT LOCAL DEFAULT 5 _static_bss
54: 00fffc30 0 NOTYPE GLOBAL DEFAULT 5 _bss_start
69: 00fffc30 0 NOTYPE GLOBAL DEFAULT 4 _edata
49: 00fffc32 2 OBJECT GLOBAL DEFAULT 5 _global_bss
57: 00fffc34 0 NOTYPE GLOBAL DEFAULT 5 _ebss
70: 00fffc34 0 NOTYPE GLOBAL DEFAULT ABS _end
73: 00ffff00 0 NOTYPE GLOBAL DEFAULT 5 _stack
No version information found in this file.
で、これをマニュアルの図3.1も見ながら、表にまとめてみる。
モード5のはず。そして、EMCビットがよくわからなかったから、EMCビット=1の前提でみている。
| アドレス値 | マニュアル記載の位置 | セクション |
|---|---|---|
| 0x00000100 | 内蔵ROM(開始) | .text |
| 0x000004b0 | 内蔵ROM(途中) | .rodata |
| 0x00ffffc20 | 内蔵RAM(途中) | .data |
| 0x00ffffc30 | 内蔵RAM(途中) | .bss |
確かに本の通りになってるっぽい。
メモ
- Tera Termが起動しっぱなしだと、フラッシュROMの書き換えに失敗する
- com1 open error!
- BSSは block started by symbol の略
- リンカとローダの関係がよくわからない
- セクション情報はリンカが使う
- 多分、リンカスクリプトによって書かれる
- セグメント情報はローダが使う
- 誰が書いてる?
- elfファイルフォーマットが詳細に分かれば、分かる気がする
- ロードとは、セグメント情報がメモリに展開されること、らしい。
- そして、ロード作業はbss領域には必要ないらしい。
- たぶん、main()実行前に、実行形式ファイルに記載されてる値を、data領域に入れるということ
- セクション情報はリンカが使う
- _stackのあるところはマニュアルには外部アドレス空間ってなってる
- スタックポインタの開始位置?
*1:readelfにそういうオプションがあったのかもしれないけど、久しぶりにコードを書きたくなったので。
2010-10-23
12ステップで作る組み込みOS自作入門 2ステップ目
講義パート入りましたー。
ストップビットの必要性
自分とおんなじ疑問を持ってる人がいた。
http://okwave.jp/qa/q2566382.html
うーん。
データ長が8ビット程度であれば間違えずにデータ取れるけど、
データ長さが長くなってくると怪しいということか?
例えば、0010_0011ってデータが左から順に送られる場合、
はじめの連続0は2連続であって、次の連続0は3連続というのは確実にわかる。
でも、1000連続とかになってくると間違えずに0をカウントする自信がない。
ってことでいいのかな。
メモ
- 「普通、メモリは数メガバイト単位にに分割されているから、CS信号が要るんだよ」と読める
- 分割されているのはどうしてなんだろう?
- H8/3069Fのおまけ付属品の水晶発振器は、25Mhzのもの。
- motファイルをテキストエディタで開くと、大概が0~Fの「文字列」になっている。
- ぱっと見バイナリっぽい。へんなの。
- BRRの設定計算式
- マニュアルの13.2.8 ビットレートレジスタ(BRR)
- 64で割ったり、8で割ったりする。その数字の根拠がよくわからない。
- いろんなcファイルあるけど、それらが機械語になるまでの過程がよくわからない
- externの意味もなんとなくしかわからない
2010-10-21
12ステップで作る組み込みOS自作入門 1.1ステップ目
h8write動かず
make: *** [write] Error 127
が出て、フラッシュに書き込めてない模様。
gcc3.4.6がインストールできてないことを疑う。
この方、gcc-4.5.1をすんなりインストールできているよう。
http://blog.livedoor.jp/furikku9310/archives/52054343.html
ということは、h8関係のものが怪しい…か?
とりあえず再インストール
gcc-3.4.6の解凍からやり直す。
このメッセージが気になる.
*** This configuration is not supported in the following subdirectories:
target-libffi target-boehm-gc target-zlib target-libjava target-libf2c
(Any other directories should still work fine.)
別フォルダでビルドするとか、解凍したてのまっさらな状態からやるとかやったけど、
結局これから逃れられず。
s-traent.ads:61:01: (style) blank lines not allowed at end of file a-exexda.adb:346:01: (style) multiple blank lines a-exextr.adb:216:01: (style) multiple blank lines make[1]: *** [ada/a-except.o] Error 1 make[1]: Leaving directory `/usr/local/gnu/gcc-3.4.6/BUILD/gcc' make: *** [all-gcc] Error 2
そもそも
昨日の段階で、./configure以下のオプションの綴りが2、3箇所間違ってたからそのせいかも。
12ステップで作る組み込みOS自作入門 1.2ステップ目
Hello World!出ました!
ポカミスが原因のはず。
フラッシュの書き込み失敗の原因
直接の原因は、h8writeの置いてあるディレクトリ。
正:C:\cygwin2\src\tools\h8write\
誤:C:\cygwin2\src\tools\
ということです。
Makefileの記述と合ってないので、エラーとなってた。
それと、Windowsでは、
「シリアルのデバイスファイル」がcomX(Xは1,2,3のどれか)になることを
見落としてた。
本で言うとP42〜。
具体的には、
User@User-PC /src/01/bootload
$ # h8write -3069 -f20 kzload.mot com1
User@User-PC /src/01/bootload
$ make write
としなければならなかったっということ。
COMポートについては、
デバイスマネージャに出てるものを入力すればよいということなのかな?
gccのインストール
gcc-3.4.6の再インストールは、結局、
/usr/local/gnu/gcc-3.4.6/BUILDで
../configure --target=h8300-elf --disable-nls --disable-threads --disable-shared --enable-languages=c
としたらうまくいった。
本に書いてある、--disable-werrorは必要なし。
昨日の段階では、
--enable-languadges=c
というタイプミスをしていた可能性あり。
してなかったかもしれないけど。
フラッシュに書き込めなかったエラーは、
ディレクトリ構成の間違いか、com1の指定忘れが原因だったので、
gcc-3.4.6がインストールできてなかったかは分からない。
gcc-4.5.1は、同じやり方ではうまくいかない。
今、--disable-werrorを付加してmake中。
タイプミスとか…
俺爆発しろ、って感じ。
ていうか、make時に教えてくれないんですね。その綴り違うよって。
このブログの編集フォームのほうが親切。
仕事で似たようなことやらかさないといいけど…
2010-10-20
12ステップで作る組み込みOS自作入門 1ステップ目
はじめに
組込みの分野に就職し、知識不足を痛感する日々…。
そんなとき、「12ステップで作る組み込みOS自作入門」に出会った。
自作OS…なんと厨二な響き。
俺「OSッスかwww自作しましたけどwww」
上司に言ってみてぇ…
気がついたら、本とマイコンボードを購入しておりました。
分からないことばかりだけど、左遷回避のためにがんばるよ!
Cygwinのインストール
開発環境の選択肢として、いくつか選択肢があったんだけど、
自分はCygwinを選んだよ。
開発環境の選択肢として、いくつか選択肢があったんだけど、
自分はCygwinを選んだよ。
今あるWindows環境を壊したくなかったからだよ。ヘタレだね。
UNIXライクな環境なんて、
学部のときにFreeBSDでのサーバ構築に失敗して以来だよ…。
基本的に何もわかりません。
インストールには、下記のサイトにお世話になったよ。
Releaseフォルダのダウンロードに3時間以上かかった…
何これ常識?
失敗しない Cygwin の インストール [ Windows 7 編 ]
http://windowss7.web.fc2.com/special/cygwin/
このページを参考にさせて頂きました。
Cygwinのバージョンは1.7.7。
binutilsのインストール
binutilsは、本に載ってるのは2.19.1だけど、
自分は2.20を選択。
本どおりで問題なし。
H8/3069F付属CDのCygwinだと、
binutils-2.20はインストールが出来なかった気がする。
だから3時間もかけて、上記のCygwinインストール法をとった気がする。
そういうのきちんと記録しないと。。。
gccのインストール
4.5.1はインストールできず
gccも新しいほうがいいとおもって4.5.1をインストールしようと思うも、うまくいかず。
同じ階層(つまりカレントディレクトリがgcc-4-5.1)だと
ビルドできないという報告があったので、
/gcc-4.5.1/build/を作成したりした。
結果をまとめる。
カレント:
/gcc-4.5.1/build/
コマンド:
../configure --target=h8300-elf --disable-nls --disable-threads --enable-languadge=c
結果:
configure: error: building out of tree but . . contains host-i686-pc-cygwin. Use a pristine source tree when building in a separate tree.
備考:
本に書いてあったように--disable-werrorを付加しても、特に出力に変化はないように見える。
カレント:
/gcc-4.5.1/
コマンド:
./configure --target=h8300-elf --disable-nls --disable-threads --enable-languadge=c
結果:
*** This configuration is not supported in the following subdirectories: target-libmudflap target-libgomp target-libffi target-zlib target-libjava target-libada gnattools target-libstdc++-v3 target-libgfortran target-libobjc target-boehm-gc (Any other directories should still work fine.)
備考:
そのままmakeすると
configure: error: in `/usr/local/gnu/gcc-4.5.1/h8300-elf/libgcc':
configure: error: changes in the environment can compromise the build
configure: error: run `make distclean' and/or `rm ./config.cache' and start over
make[1]: *** [configure-target-libgcc] Error 1
make[1]: Leaving directory `/usr/local/gnu/gcc-4.5.1'
make: *** [all] Error 2
もう面倒くさくなって、gccは3.4.6でいいや、ってなった。
Cygwin操作
全てが初めてなので学ぶことが多い。
Tabキーによる入力補完。
ユーザー環境変数でHOMEを作成、
パスをいれるとCygwin起動時のディレクトリを指定できる。
もうほんとね、「そこからかよ!」って感じ。いろいろ。
