USB接続の外付けハードディスクの1領域が、
マイコンピューター上において「ドライブ」(だっけ!?)として表示(認識)される。
アクセスすると「インページ操作の実行エラー」のメッセージ。
dos窓からchkdsk g: /f実行でアクセスできるようになった。
2009年9月27日日曜日
外付けハードディスクにアクセスできない
2009年9月24日木曜日
itune CDを認識しない
iTune9にバージョンアップしたらCDを認識しない(自動インポートの問い合わせ無し)。
レジストリ書き換え対処があるようだが見送り。
どうしようか考えて、なにげにiTune(タスクバー上)をクリックしたら、
自動インポートの問い合わせがきた。
しばらく様子見。
CDデバイスの認識に時間が掛かっているのか?
セキュリティーソフトとの問題か?
うまくいったと思ったら、
繰り返しインポート問い合わせ。インポートできず。。。再起動でtry。
再起動したらインポートできるようになった。
2009年9月16日水曜日
gdb(gdbserver)を使ったリモートCPUの共有ライブラリをデバッグする方法
【ビルドマシン】
デバッグ用ビルド(-O0 -gオプション付きでコンパイル。)
□libMyLibrary
□chkcmd(ライブラリデバッグ用コマンド)
【ターゲットCPU】
□ファイアウォール停止(繋がらなかったら、ビルド、ターゲットCPU両方で。)
/etc/rc.d/init.d/iptables stop
□デバッグ用ライブラリに差し替え。
ファイルrelapce、またはlibMyLibrary.so→リンク先を変更。
※パーミッション注意 chmod a+rx libMyLibrary.so.1
□GDBサーバー起動
$ gdbserver ビルドマシン名:30000 chkcmd (ビルドマシン名はなくても良い!?)
【ビルドマシン】
GDB起動 (emacs上で動かした方が便利。)
$ gdb ./chkcmd
(gdb) br main
(gdb) target remote ターゲットCPU名(IPアドレス!?):30000
(gdb) c
(ブレークしたら、)
(gdb) set solib-search-path /home/user/src/libMyLibrary
(↑ライブラリビルドしたディレクトリへのパスを指定)
※↓表示される(他のエラーメッセージ無視)
Reading symbols from /home/user/src/libMyLibrary/libMyLibrary.1...done.
Loaded symbols for /home/user/src/libMyLibrary/libMyLibrary.1
(gdb) br MyLibraryStartAPI ※取り敢えず適当なライブラリ関数にブレークポイント設定
(gdb) c 後は自由に。
2009年9月15日火曜日
gdb
【バックトレース機能】
(gdb) bt
(gdb) thread apply all bt
【スタックフレーム操作】
(gdb) frame(現在のフレーム)
(gdb) frame 1(フレーム選択)
(gdb) up(フレーム移動:上へ)
(gdb) down(フレーム移動:下へ)
(gdb) i frame 1(詳細なスタックフレーム情報。infoコマンド)
(gdb) x/i $pc(プログラムの現在位置プログラムカウンタ)
(gdb) p $sp(現在のスタックポインタの位置(アドレス))
(gdb) i proc mapping(gdbがアタッチしているプロセスのメモリマップ)
コアダンプ解析の場合、
(gdb) info files
または
(gdb) info target
ulimit -s スタックサイズの表示
ulimit -Ss 81920 スタックサイズの変更
または、limit (a)
【よく使うもの】
backtrace コールトレース実行
br ブレークポイント設定
c コンティニュー
d 「ブレークポイント番号」 ブレークポイント解除
finish 関数終了まで実行
info b ブレークポイント表示
n 次の行まで実行
p 式(構造体、変数)を表示
run プログラム実行。引数も渡せる
s 次の行まで実行、関数呼び出しの場合その中へ
x メモリ内容表示???
until 指定行まで実行
【使うもの】
awatch 変数 指定した変数がRead(rwatch)/Write(watch)された場合に停止。
構造体表示を見やすく。set print pretty on
$fp フレームポインタレジスタ
$pc プログラムカウンタレジスタ
$ps プロセッサステータスレジスタ
$sp スタックポインタレジスタ
2009年9月5日土曜日
vxWorks 時間測定計測 vxTimeBaseGet vxTimeBaseSet
vxTimeBaseGetを使って時間測定計測する際に
vxTimeBaseSet(0,0)で上位下位32bitレジスタを初期化しないと
レジスタオーバーフローしてヘンテコな時間になる?
ラウンドするまで時間長いはずなので実質問題ない?
初期化やっとく分には問題ない。
vxTimeBaseSet(0,0); /* set the TBH and TBL registers to 0 */
taskDelay(rate*3600); /* suspend for 1 hour */
vxTimeBaseGet(&tbu,&tbl); /* read the TBH and TBL again */
#include <vxLib.h>
void testSysClockAccuracy(int rate)
{
UINT32 tbu, tbl, i;
printf("SysClkRate=%d\n", rate);
sysClkRateSet(rate);
taskDelay(2);
vxTimeBaseSet(0,0); /* set the TBH and TBL registers to 0 */
taskDelay(rate*3600); /* suspend for 1 hour */
vxTimeBaseGet(&tbu,&tbl); /* read the TBH and TBL again */
for(i=0; i < 3600;i++) /* Count down 3600 second from TBL and TBH (16500000 units for for 1 second) */
{ /* <TBL TBH> -= 3600*16500000; */
if (tbl < 16500000)
{
tbu--; /* borrow */
}
tbl -= 16500000;
}
printf("tbu diff =%x (%d) , tbl diff =%x (%d)", tbu, tbu,tbl, tbl);
/* print out the difference in TBL and TBH units */
}