目次: C言語とlibc
switch文を使ってはいけないを読んで。
PHPはさておいて。私もswitchよりStateパターンを選びますが、C言語の関数ポインタでStateパターンを実現するのは、今も迷います。言語仕様上、悪い方に倒れるのを阻止できないためです。
ハッカーが明確で読みやすいコードを書いてくれるうちは良いですが、頭のおかしい人がdoという関数ポインタに全関数を入れるクソコードを書き始めたらもう全部パアです。
いやまさかそんなこと、と思うかもしれませんが、どこの会社とは言いませんがそんなクソコードが実在してるんですよ、世の中って怖いですよね…。
この記事(コードのネストを深くするな)を読んでいたら、会社のクソコード山脈を思い出しました。
7段ifなんて序の口。世の中の悪手とされる書き方は、大概やってるワルい奴です。バグも多い…。
メモ: 技術系?の話はFacebookから転記(※)しておくことにした。
(※)本来8月14日のエントリです。8月14日辺りでエミュレータが動いたのが嬉しくて、浮かれてFacebookに書きまくったら、このサイトに転記しきれなくなったため、未来のエントリに移動させています。
【レビュー】超小型PC「Raspberry Pi」で夏休み自由課題・第1回 - Raspberry Piとは? 入手とセットアップ (1) Raspberry Piでコンピューターを学ぼう を読んで。
"Raspberry Piは少々とっつきにくい。買ってくると基板が入っているだけで、電源をつないでも動かないのだ。"(引用)
え!そうなの?
SDカードにtarball一個解凍するだけで使えるようになるので、一番とっつきやすい部類だと思ってました。
いつの間にか一般的な理解と乖離していたみたいです。うーん、認識を改めなければいかんなー…。
メモ: 技術系?の話はFacebookから転記(※)しておくことにした。
(※)本来8月13日のエントリです。8月14日辺りでエミュレータが動いたのが嬉しくて、浮かれてFacebookに書きまくったら、このサイトに転記しきれなくなったため、未来のエントリに移動させています。
基本的には、コードを読むときに、覚えておかなければならないことを減らし、覚える時間を短く済ませた方がわかりやすい、と感じます。
覚えきれない量の条件や変数が出てくるコード、長時間覚えておかなければ理解できないコードは、どこかが病気だと思って、直すようにしています。
目次: Linux
自作ARMエミュレータでLinux 3.12.26をブートし、Busyboxのashのプロンプト表示まで到達しました。
現時点での動作イメージです。実際は最初の方にエミュレータのデバッグメッセージが大量に出ますが、意味ないので叩き切ってます。
Connected to the target VM, address: '127.0.0.1:49281', transport: 'socket' Exception: Reset by 'Init.'. [ 0.000000] Booting Linux on physical CPU 0x0 [ 0.000000] Linux version 3.12.26+ (katsuhiro@falcon) (gcc version 4.9.1 20140710 (prerelease) (crosstool-NG linaro-1.13.1-4.9-2014.07 - Linaro GCC 4.9-2014.07) ) #1 Thu Aug 14 02:42:16 JST 2014 [ 0.000000] CPU: ARM926EJ-S [41069260] revision 0 (ARMv5TEJ), cr=00003137 [ 0.000000] CPU: VIVT data cache, VIVT instruction cache [ 0.000000] Machine: ARM-Versatile PB [ 0.000000] Ignoring unrecognised tag 0x00000000 [ 0.000000] Memory policy: ECC disabled, Data cache writeback [ 0.000000] On node 0 totalpages: 16384 [ 0.000000] free_area_init_node: node 0, pgdat c03ac754, node_mem_map c03c9000 [ 0.000000] Normal zone: 128 pages used for memmap [ 0.000000] Normal zone: 0 pages reserved [ 0.000000] Normal zone: 16384 pages, LIFO batch:3 [ 0.000000] sched_clock: 32 bits at 24MHz, resolution 41ns, wraps every 178956ms [ 0.000000] pcpu-alloc: s0 r0 d32768 u32768 alloc=1*32768 [ 0.000000] pcpu-alloc: [0] 0 [ 0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 16256 [ 0.000000] Kernel command line: console=ttyAMA0 mem=64M lpj=0 root=/dev/ram init=/bin/sh debug printk.time=1 [ 0.000000] PID hash table entries: 256 (order: -2, 1024 bytes) [ 0.000000] Dentry cache hash table entries: 8192 (order: 3, 32768 bytes) [ 0.000000] Inode-cache hash table entries: 4096 (order: 2, 16384 bytes) [ 0.000000] Memory: 59960K/65536K available (2742K kernel code, 155K rwdata, 712K rodata, 114K init, 111K bss, 5576K reserved) [ 0.000000] Virtual kernel memory layout: [ 0.000000] vector : 0xffff0000 - 0xffff1000 ( 4 kB) [ 0.000000] fixmap : 0xfff00000 - 0xfffe0000 ( 896 kB) [ 0.000000] vmalloc : 0xc4800000 - 0xff000000 ( 936 MB) [ 0.000000] lowmem : 0xc0000000 - 0xc4000000 ( 64 MB) [ 0.000000] modules : 0xbf000000 - 0xc0000000 ( 16 MB) [ 0.000000] .text : 0xc0008000 - 0xc0367c14 (3456 kB) [ 0.000000] .init : 0xc0368000 - 0xc03849fc ( 115 kB) [ 0.000000] .data : 0xc0386000 - 0xc03ace80 ( 156 kB) [ 0.000000] .bss : 0xc03ace80 - 0xc03c8d64 ( 112 kB) [ 0.000000] NR_IRQS:224 [ 0.000000] VIC @f1140000: id 0x00041190, vendor 0x41 [ 0.000000] FPGA IRQ chip 0 "SIC" @ f1003000, 13 irqs [ 0.000000] Console: colour dummy device 80x30 [ 1.823423] Calibrating delay loop... 0.51 BogoMIPS (lpj=2559) [ 2.008160] pid_max: default: 32768 minimum: 301 [ 2.051389] Mount-cache hash table entries: 512 [ 2.282632] CPU: Testing write buffer coherency: ok [ 2.336914] Setting up static identity map for 0xc029c520 - 0xc029c578 [ 3.015733] VFP support v0.3: no double precision support [ 3.115064] NET: Registered protocol family 16 [ 3.402544] DMA: preallocated 256 KiB pool for atomic coherent allocations [ 4.241363] Serial: AMBA PL011 UART driver [ 4.264723] dev:f1: ttyAMA0 at MMIO 0x101f1000 (irq = 44, base_baud = 0) is a PL011 rev1 [ 4.657293] console [ttyAMA0] enabled [ 4.748693] dev:f2: ttyAMA1 at MMIO 0x101f2000 (irq = 45, base_baud = 0) is a PL011 rev1 [ 4.827661] dev:f3: ttyAMA2 at MMIO 0x101f3000 (irq = 46, base_baud = 0) is a PL011 rev1 [ 4.958784] fpga:09: ttyAMA3 at MMIO 0x10009000 (irq = 70, base_baud = 0) is a PL011 rev1 [ 6.984675] bio: create slab <bio-0> at 0 [ 7.563484] Switched to clocksource timer3 [ 10.489897] NET: Registered protocol family 2 [ 10.731930] TCP established hash table entries: 512 (order: 0, 4096 bytes) [ 10.761376] TCP bind hash table entries: 512 (order: -1, 2048 bytes) [ 10.781356] TCP: Hash tables configured (established 512 bind 512) [ 10.810155] TCP: reno registered [ 10.817472] UDP hash table entries: 256 (order: 0, 4096 bytes) [ 10.833676] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes) [ 10.936594] NET: Registered protocol family 1 [ 11.031626] RPC: Registered named UNIX socket transport module. [ 11.039086] RPC: Registered udp transport module. [ 11.045485] RPC: Registered tcp transport module. [ 11.050589] RPC: Registered tcp NFSv4.1 backchannel transport module. [ 11.116524] Trying to unpack rootfs image as initramfs... [ 107.483588] Freeing initrd memory: 1084K (c0800000 - c090f000) [ 107.546930] NetWinder Floating Point Emulator V0.97 (double precision) [ 107.961293] Installing knfsd (copyright (C) 1996 okir@monad.swb.de). [ 108.022282] jffs2: version 2.2. (NAND) © 2001-2006 Red Hat, Inc. [ 108.128699] ROMFS MTD (C) 2007 Red Hat, Inc. [ 108.143263] msgmni has been set to 119 [ 108.269578] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 254) [ 108.280765] io scheduler noop registered [ 108.289606] io scheduler deadline registered [ 108.308715] io scheduler cfq registered (default) [ 108.386028] clcd-pl11x dev:20: PL110 rev0 at 0x10120000 SYS_CLCD: read 0x00001f00 LCDControl: 0x00000000 [ 109.004790] clcd-pl11x dev:20: Versatile hardware, VGA display SYS_CLCD: read 0x00001f00 SYS_CLCD: 0x00001f00 LCDIMSC: read 0x00000000 LCDTiming0: 0x27175f9c LCDTiming1: 0x200b05df LCDTiming2: 0x067f3800 LCDTiming3: 0x00000000 LCDUPBASE: 0x83000000 LCDLPBASE: 0x8304b000 SYS_OSC4: read 0x00000000 SYS_LOCK: 0x0000a05f SYS_OSC4: 0x0001c863 SYS_LOCK: 0x00000000 LCDIMSC: 0x00001029 LCDIMSC: 0x00001829 SYS_CLCD: read 0x00001f00 SYS_CLCD: 0x00001f03 SYS_CLCD: 0x00001f17 [ 113.628628] Console: switching to colour frame buffer device 80x60 [ 122.764467] brd: module loaded [ 122.953158] physmap platform flash device: 04000000 at 34000000 [ 123.244156] physmap-flash physmap-flash.0: map_probe failed [ 123.531512] smc91x: not found (-19). [ 123.686616] mousedev: PS/2 mouse device common for all mice [ 124.249155] TCP: cubic registered [ 124.257574] NET: Registered protocol family 17 UARTIFLS: 0x00000012 UARTFBRD: 0x00000000 UARTIBRD: 0x00000001 UARTLCR_H: 0x00000000 UARTFBRD: 0x00000004 UARTIBRD: 0x00000027 UARTLCR_H: 0x00000070 [ 124.810528] Freeing unused kernel memory: 112K (c0368000 - c0384000) ----- ls -la total 4 drwxr-xr-x 11 1000 1003 0 Aug 14 2014[1;34m.[0m drwxr-xr-x 11 1000 1003 0 Aug 14 2014[1;34m..[0m drwxr-xr-x 2 1000 1003 0 Aug 13 2014[1;34mbin[0m drwxr-xr-x 2 1000 1003 0 Aug 13 2014[1;34mdev[0m drwxr-xr-x 2 1000 1003 0 Aug 8 2014[1;34metc[0m -rwxr-xr-x 1 1000 1003 129 Aug 14 2014[1;32minit[0m drwxr-xr-x 2 1000 1003 0 Aug 8 2014[1;34mlib[0m drwxr-xr-x 2 1000 1003 0 Aug 8 2014[1;34mproc[0m drwx------ 2 0 0 0 Aug 13 2014[1;34mroot[0m drwxr-xr-x 2 1000 1003 0 Aug 8 2014[1;34mrun[0m drwxr-xr-x 2 1000 1003 0 Aug 8 2014[1;34msbin[0m drwxr-xr-x 2 1000 1003 0 Aug 8 2014[1;34msys[0m /bin/sh: can't access tty; job control turned off UARTFBRD: 0x00000004 UARTIBRD: 0x00000027 UARTLCR_H: 0x00000070 / # Disconnected from the target VM, address: '127.0.0.1:49281', transport: 'socket' Process finished with exit code -1 (メモ: コマンドラインから実行) $ java -cp out/production/semu net.katsuster.semu.Main ~/share/arm_cross/linux-3.12.26/arch/arm/boot/Image ~/share/arm_cross/work/initramfs.gz
エミュレータの出しているデバッグメッセージがなかったら、普通の起動ログとあまり変わりませんね。って、そりゃ当たり前か。
珍しいものは使っていません。ぶっちゃけPC本体さえあれば、他は全部タダで行けます。
エミュレータのコードはこのサイトに置いています(リンク)。マニュアルなどはないので、使い方が意味不明だと思いますし、見ても面白くないと思いますが…。
最初のコミットが6/4なので、開発期間は約2か月半です。日曜大工というか日曜プログラミングなので、割と長期間の取り組みになっています。とはいえ、フルタイムでやったとしても、実装方式などを悩む時間は変わらないので、開発期間はそんなに変わらないように思います。
前に書いたもの以外のハマりポイントをご紹介。
改良の余地はいくらでもあります。
しばらくは楽しいオモチャになりそうです。
Linux 3.12は起動するのに、Linux 3.14だとなぜか途中でハングします、なんでだろ?未だに良くわかりません。
目次: Linux
ARMのldm命令には変わった機能が付いています。レジスタリストの後ろに付ける ^ なのですが、実は ^ には意味が2通りあります。そのためアセンブラで記述するときすこぶるわかりづらくなっています。
具体例を挙げると、下記の2つのldm命令は、同じようなレジスタリストを指定していて、同じような ^ が付いていますが、命令の意味は全く違います。
ldmdb sp, {r0, r1, r2, pc}^
ldmdb sp, {r0, r1, r2, lr}^
1つ目のldm命令は、sp - 16の指すアドレスからr0, r1, r2, pcにデータをロードして、cpsrレジスタに現在の動作モードのspsrレジスタをコピーせよ、という意味になります。
2つ目ldm命令は、sp - 16の指すアドレスから「ユーザモードの」r0, r1, r2, lrにデータをロードせよ、という意味になります。
何?意味がわからない?恐らく誰でもそうでしょう。私も最初に見たとき意味がわからなくて、目が点になりました。
なぜこんなことになるかというと、ARMのldm命令の ^ の意味が、レジスタリストに依存して変わるからです。具体的に言えば、
レジスタリストにpcレジスタが入っていたら、
「pcをロードするldm命令で、カレントモードのspsrをcpsrにコピーすることを示す」
レジスタリストにpcレジスタが入っていなかったら、
「pcをロードしないldm命令で、ユーザモードレジスタをロードすることを示す」
のようにARMの仕様で定義されているからです。
なんだその仕様は!と思われるでしょうが、この機能は、一般的なプログラムでは全く使われません。使われるのは、割り込みハンドラからの復帰、もしくは特権モードが絡む部分くらいで、いずれもOSの内部です。
そのためARMの初学者が使う可能性はほぼありません。いわゆる「わかってる」人しか使わない通の機能です。
少数のわかっている人しか使わないので、多少可読性が低くてもあまり問題が出ないのでしょう。たぶん。
と、擁護した直後に言うのは憚られますが、正直なところそこまで ^ を酷使せず、せめてどちらかを ^ じゃない別の記号にすれば良かったのにと思わんでもないです。いきなり変えたら大混乱が起きるので、今さらどうしようもありませんけど。
仕様を切るとき、特に将来も下位互換性が求められそうな仕様、オープンな仕様では、記号の一文字取っても、細心の注意が必要だよなーと、強く感じた一件でした。
目次: Linux
自作ARMエミュレータ、Linux起動してinitramfs上の /initをexecveするところで必ず失敗するので調べてたら、
do_execve_common() → load_elf_binary() → padzero() → clear_user() → access_ok() → __range_ok()
ときて失敗し、結果的にEFAULTが返っていました。
range_okは常に失敗するわけでもないのが不思議で、さらに調べたらsbc, rsc命令のキャリーフラグ(Cフラグ)のエミュレーションが間違っていて、本来は成功なのに失敗を返す場合があることがわかりました。
うーん、パッと見ではわからん…。けど、これで2日間も悩んでいた俺って一体…。
メモ: 技術系?の話はFacebookから転記しておくことにした。
IntelliJ IDEAのConsoleウインドウのコピー処理でハマりました。
Null文字をprintすると(例えばSystem.out.printf("%c", (char)0); など)、Ctrl+A, Ctrl+Cとキーを押して Consoleの出力結果を全コピーしようとしても、Null文字以降がコピーされません。何これ…困るわ。
バグ?仕様??
メモ: 技術系?の話はFacebookから転記しておくことにした。
目次: GCC
組み込み系CPU向けクロスコンパイラの定番といえばCodeSourceryですが、ダウンロードのページに行くためにはユーザー登録が必要で、面倒くさいよー、という方も居ると思います。
ARM向けに限りますが、別の選択肢としてLinaroが公開しているクロスコンパイラという手があります。CodeSourcery同様にお手軽に使えるPrebuild版も用意してくれていますので、使い方には困らないと思います。
# 取得する wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.14.15.tar.xz wget http://releases.linaro.org/14.07/components/toolchain/binaries/gcc-linaro-arm-linux-gnueabihf-4.9-2014.07_linux.tar.xz # 展開する tar xJvf linux-3.14.15.tar.xz tar xJvf gcc-linaro-arm-linux-gnueabihf-4.9-2014.07_linux.tar.xz # ビルドする export ARCH=arm export CROSS_COMPILE=/home/katsuhiro/share/arm_cross/gcc-linaro-arm-linux-gnueabihf-4.9-2014.07_linux/bin/arm-linux-gnueabihf- cd linux-3.14.15 make KBUILD_DEFCONFIG=versatile_defconfig defconfig make -j4
ビルド成功したようなので、自作ARMv5エミュレータに放り込んでみました。
Connected to the target VM, address: '127.0.0.1:49748', transport: 'socket' Exception: Reset by 'Init.'. [ 0.000000] Booting Linux on physical CPU 0x0 [ 0.000000] Linux version 3.14.15 (katsuhiro@falcon) (gcc version 4.9.1 20140710 (prerelease) (crosstool-NG linaro-1.13.1-4.9-2014.07 - Linaro GCC 4.9-2014.07) ) #1 Fri Aug 8 15:38:54 JST 2014 [ 0.000000] CPU: ARM926EJ-S [41069260] revision 0 (ARMv5TEJ), cr=00003137 [ 0.000000] CPU: VIVT data cache, VIVT instruction cache [ 0.000000] Machine: ARM-Versatile PB [ 0.000000] Ignoring unrecognised tag 0x00000000 [ 0.000000] Memory policy: Data cache writeback [ 0.000000] On node 0 totalpages: 16384 [ 0.000000] free_area_init_node: node 0, pgdat c03c4ce8, node_mem_map c3f7a000 [ 0.000000] Normal zone: 128 pages used for memmap [ 0.000000] Normal zone: 0 pages reserved [ 0.000000] Normal zone: 16384 pages, LIFO batch:3 [ 0.003317] sched_clock: 32 bits at 24MHz, resolution 41ns, wraps every 178956969942ns [ 0.029105] pcpu-alloc: s0 r0 d32768 u32768 alloc=1*32768 [ 0.031450] pcpu-alloc: [0] 0 [ 0.042642] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 16256 [ 0.045733] Kernel command line: console=ttyAMA0 mem=64M lpj=0 root=/dev/nfs debug printk.time=1 [ 0.093627] PID hash table entries: 256 (order: -2, 1024 bytes) [ 0.109772] Dentry cache hash table entries: 8192 (order: 3, 32768 bytes) [ 0.173519] Inode-cache hash table entries: 4096 (order: 2, 16384 bytes) [ 0.734098] Memory: 60952K/65536K available (2817K kernel code, 157K rwdata, 732K rodata, 115K init, 116K bss, 4584K reserved) [ 0.754145] Virtual kernel memory layout: [ 0.754145] vector : 0xffff0000 - 0xffff1000 ( 4 kB) [ 0.754145] fixmap : 0xfff00000 - 0xfffe0000 ( 896 kB) [ 0.754145] vmalloc : 0xc4800000 - 0xff000000 ( 936 MB) [ 0.754145] lowmem : 0xc0000000 - 0xc4000000 ( 64 MB) [ 0.754145] modules : 0xbf000000 - 0xc0000000 ( 16 MB) [ 0.754145] .text : 0xc0008000 - 0xc037f900 (3551 kB) [ 0.754145] .init : 0xc0380000 - 0xc039ccd4 ( 116 kB) [ 0.754145] .data : 0xc039e000 - 0xc03c5420 ( 158 kB) [ 0.754145] .bss : 0xc03c5420 - 0xc03e2774 ( 117 kB) [ 0.835624] NR_IRQS:224 [ 1.433660] VIC @f1140000: id 0x00041190, vendor 0x41 [ 1.480147] FPGA IRQ chip 0 "SIC" @ f1003000, 13 irqs, parent IRQ: 63 [ 1.600891] Console: colour dummy device 80x30 [ 1.608749] Calibrating delay loop... 6.52 BogoMIPS (lpj=32640) [ 2.220671] pid_max: default: 32768 minimum: 301 [ 2.257974] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes) [ 2.263175] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes) [ 2.424212] CPU: Testing write buffer coherency: ok [ 2.471352] Setting up static identity map for 0x802ae5b8 - 0x802ae610 [ 3.001781] VFP support v0.3: no double precision support [ 3.085927] NET: Registered protocol family 16 [ 3.237579] DMA: preallocated 256 KiB pool for atomic coherent allocations [ 3.885257] Serial: AMBA PL011 UART driver [ 3.909160] dev:f1: ttyAMA0 at MMIO 0x101f1000 (irq = 44, base_baud = 0) is a PL011 rev1 [ 4.214325] console [ttyAMA0] enabled UARTIMSC: 0x00000000 UARTICR: 0x0000ffff [ 4.292449] dev:f2: ttyAMA1 at MMIO 0x101f2000 (irq = 45, base_baud = 0) is a PL011 rev1 UARTIMSC: 0x00000000 UARTICR: 0x0000ffff [ 4.371940] dev:f3: ttyAMA2 at MMIO 0x101f3000 (irq = 46, base_baud = 0) is a PL011 rev1 UARTIMSC: 0x00000000 UARTICR: 0x0000ffff [ 4.454404] fpga:09: ttyAMA3 at MMIO 0x10009000 (irq = 70, base_baud = 0) is a PL011 rev1 [ 5.788310] bio: create slab <bio-0> at 0 SYS_LED: 0x000000ff SYS_LED: read 0x00000000 SYS_LED: read 0x00000000 SYS_LED: read 0x00000000 SYS_LED: read 0x00000000 SYS_LED: read 0x00000000 SYS_LED: read 0x00000000 SYS_LED: read 0x00000000 SYS_LED: read 0x00000000 [ 6.329351] Switched to clocksource timer3 [ 8.419343] NET: Registered protocol family 2 [ 8.592061] TCP established hash table entries: 1024 (order: 0, 4096 bytes) [ 8.613714] TCP bind hash table entries: 1024 (order: 0, 4096 bytes) [ 8.632315] TCP: Hash tables configured (established 1024 bind 1024) [ 8.652642] TCP: reno registered [ 8.659583] UDP hash table entries: 256 (order: 0, 4096 bytes) [ 8.675257] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes) [ 8.750198] NET: Registered protocol family 1 [ 8.820467] RPC: Registered named UNIX socket transport module. [ 8.827386] RPC: Registered udp transport module. [ 8.833482] RPC: Registered tcp transport module. [ 8.839809] RPC: Registered tcp NFSv4.1 backchannel transport module. [ 8.932090] NetWinder Floating Point Emulator V0.97 (double precision) [ 9.113116] futex hash table entries: 256 (order: -1, 3072 bytes) Exception: Data abort by 'MMU trans sec, paL1:0x80004000, entryL1:0x00000000, va:0x00000000, dom:0, inst:dat, priv:user, read:rd.'. [ 9.275864] Installing knfsd (copyright (C) 1996 okir@monad.swb.de). [ 9.309731] jffs2: version 2.2. (NAND) Ac 2001-2006 Red Hat, Inc. [ 9.368658] ROMFS MTD (C) 2007 Red Hat, Inc. [ 9.378358] msgmni has been set to 119 [ 9.461972] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 254) [ 9.469946] io scheduler noop registered [ 9.475694] io scheduler deadline registered [ 9.485652] io scheduler cfq registered (default) Exception in thread "main" java.lang.IllegalArgumentException: Illegal address 0x00000410. at net.katsuster.semu.Controller64Reg32.isValidReg(Controller64Reg32.java:57) at net.katsuster.semu.GPIO.tryAccess(GPIO.java:79) at net.katsuster.semu.GPIO.tryWrite(GPIO.java:69) at net.katsuster.semu.Bus64.tryWrite(Bus64.java:168) at net.katsuster.semu.MasterCore64.tryWrite(MasterCore64.java:96) at net.katsuster.semu.ARMv5.executeStrb(ARMv5.java:3303) at net.katsuster.semu.ARMv5.executeSubLdrStr(ARMv5.java:4492) at net.katsuster.semu.ARMv5.executeInst(ARMv5.java:4074) at net.katsuster.semu.ARMv5.execute(ARMv5.java:4055) at net.katsuster.semu.ARMv5.step(ARMv5.java:5201) at net.katsuster.semu.CPU.run(CPU.java:158) at net.katsuster.semu.Main.main(Main.java:252) java.lang.IllegalArgumentException: Illegal address 0x00000410. pc:c0179db4 Disconnected from the target VM, address: '127.0.0.1:49748', transport: 'socket' Process finished with exit code 1
GPIOデバイスにアクセスに行くらしく途中で怒られました。GPIOなんて何に使っているんでしょう?他にもボードのLEDを光らせるみたいですが、何したいんだろう…これ。
< | 2014 | > | ||||
<< | < | 08 | > | >> | ||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
- | - | - | - | - | 1 | 2 |
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 | - | - | - | - | - | - |
合計:
本日: