月別アーカイブ: 2014年2月

PPC MacでRuby2.1

OSX 10.5以前でpthread_setname_np()がなくてbuildが失敗するのは、修正されました。
macpots でinstallできました。

ruby21 @2.1.0_0+doc+gmp+mactk 修正が必要だった
ruby21 @2.1.1_0+doc+gmp+mactk そのままでOK

トラ技ARMライタにSTM32F103VB



先日ターゲットが無いと書きましたが、DWM2008.5のSTM32F103VBが有りました。
JTAGコネクタが取り付けてあるのでそこから、ARMライタ用のコネクタに配線します。
JTAG——-ARMライタ
7:TMS——2:SWDIO
9:TCK——3:SWCLK
15:nRESET–6:nRESET
GND——-8:GND
MDK-ARMで無事IDCODEが表示されました。
MDK-ARMからではなくて単純にFlashROMに書き込めるツールがあるといいのですが。

LPCXpressoでLPC2388のプログラム作成

new projectでLPC2388のC projectを作成します。
main.cとcr_startup_lpc23.Sが生成されます。
buildして問題無い事を確かめます。

インターフェース2009.5の第5章のプログラムを動かしてみます。
main.cの変更
IOアドレスは、用意されているものを使います。
#include <NXP/LPC2xxx/LPC23xx.h>
を追加し名前が違うので合わせて変更します。
元のままでも良いですが、あとで別のレジスタを使うときにアドレス定義の追加が必要なくなるので変更しておきます。

割り込み処理は、gcc用に変更します。
__irq __arm IRQ_Handlerw()

void IRQ_Handlerw() __attribute__ ((interrupt(“IRQ”)));
void IRQ_Handlerw()
にします。

割り込み許可用の関数を追加し、使用する様にします。
void IrqEnable (void)
{
  __asm__(
    ”MRS R0, SPSR\n\t”
    ”BIC R0, R0, #0x80\n\t”
    ”MSR SPSR_c, R0\n\t”
  );
}

cr_startup_lpc23.Sの修正
元のプログラムがVICAddressを使っていないので
LDR pc,[pc, #-0x0120] // VICAddress (vectored interrupts 0-31)

LDR pc,_irq // IRQ
に変更します。
main.cで定義した関数を呼び出す様にします。
_irq: .word __irq // CRT_IRQ_Handler
__irq: B . // IRQ

    .extern IRQ_Handlerw
_irq:  .word IRQ_Handlerw
に変更します。

buidして書き込むと無事LEDが点滅します。

LPC2388には、VICVectAddr[0-31]があるのでそれを使い割り込みのオーバーヘッドを減らしたいと思います。
LDR pc,[pc, #-0x0120]
に戻して、VICVectAddr[0-31]にIRQ_Handlerwを設定してbuildします。
変更前と同じように動作しました。

トラ技ARMライタにFlashMagicで書き込み



ターゲットが2月号の付録しか持っていないので、
ライタでは使い道が限られるのでターゲットとして使用する事にします。

http://nemuisan.blog.bai.ne.jp/?eid=208383

LPC11U35_Simple_20140217.7z
をダウンロードして解凍しLPC810の時と同じバッチファイルでコンパイルします。
makefileに以下の変更をしてコンパイルできました。
PATH,NANOLIBをコメントアウト
echo.exeをechoに変更

FT2232の基板と接続します。
ARMライタ—-FT2232(LPC810書き込みコネクタ)
CN1-1:GND–4:GND
CN2-1:3.3V–1:3V
CN1-9:TxD —2:RxD
CN1-10:RxD–3:TxD
で接続して、ISPで起動してFlashMagicで書き込みます。
デバイスは、LPC11U35/501でOKでした。
書き込みが終了してリセットするとLEDが交互に点灯します。
シリアルは、FlashMagicのTerminalが115KまでなのでTeraTermで確認しました。
115Kでも文字化けしますが受信していることは判りました。

トラ技LPC810基板の拡張



付録基板に合う部品は、持っていないので手持ちのLCDと温度センサを接続してみました。
LCDは、MI2CLCD-01(B01602DGRNJB$)
温度センサは、LM73(エレキジャックの付録基板)です。
プログラムは、
http://www3.cnet.ne.jp/yokomizu/lpc810/index.htmlの
3.時計付き温度計を作ってみる
のソースコードをdownloadさせていただき、ハードの差を修正します。
LPC810のスオッチマトリックスがあるので、
swm.c を付録CDにあるLPC810_Demoの物に合わせます。
LCDは物がちがいますが、同じ仕様の様なのでそのままで表示ができました。
温度センサはI2Cアドレスの変更のみで大丈夫でした。
RTCが無いので時間は表示出来ませんが温度計にはなりました。

baconのShared Object

hug.bacをINCLUDEしているとコンパイルに時間がかかるのでhug.soを使ってみる事にしました。

[~/src/BASIC/HUG]bacon -f hug.bac
WARNING: 1 temporary files found! Do you want to delete them (y/n)? y
Temporary files were deleted.
Converting ‘hug.bac’… done.
Compiling ‘hug.bac’… done.
Program ‘hug.so’ ready.
[~/src/BASIC/HUG]file hug.so
hug.so: Mach-O ppc_7400 executable
となり、-fでCreate Shared Objectになりません。それならとコンパイルフラグを直接指定してみます。

[~/src/BASIC/HUG]bacon -f -o -dynamiclib hug.bac
Converting ‘hug.bac’… done.
Compiling ‘hug.bac’… done.
Program ‘hug.so’ ready.
[~/src/BASIC/HUG]file hug.so
hug.so: Mach-O ppc_7400 dynamically linked shared library
無事できました。

resize-window.bacを
‘INCLUDE “hug.bac”
INCLUDE “hug_imports.bac”
に変更することでコンパイル時間が短くなり無事動きました。
[~/src/BASIC/HUG]wc -l hug.bac hug_imports.bac
2830 hug.bac
105 hug_imports.bac
ですから行数の少なさがそのまま効いているようです。
動かなかったプログラムでも試してみました。
[~/src/BASIC/HUG]./static
Segmentation fault
[~/src/BASIC/HUG]gdb static
(gdb) run
Starting program: /Volumes/IEEE1394/Data/src/BASIC/HUG/static
Reading symbols for shared libraries ++. done

Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_INVALID_ADDRESS at address: 0x391da474
0x8fe13b18 in __dyld__ZN16ImageLoaderMachO16resolveUndefinedERKN11ImageLoader11LinkContextEPK11macho_nlistbPPKS0_ ()
(gdb) bt
#0 0x8fe13b18 in__dyld__ZN16ImageLoaderMachO16resolveUndefinedERKN11ImageLoader11LinkContextEPK11macho_nlistbPPKS0_ ()
#1 0x8fe143b0 in __dyld__ZN16ImageLoaderMachO28doBindIndirectSymbolPointersERKN11ImageLoader11LinkContextEbbb ()
#2 0x8fe0dae0 in __dyld__ZN11ImageLoader13recursiveBindERKNS_11LinkContextEb ()
#3 0x8fe11108 in __dyld__ZN11ImageLoader4linkERKNS_11LinkContextEbbRKNS_10RPathChainE ()
#4 0x8fe05254 in __dyld__ZN4dyld4linkEP11ImageLoaderbRKNS0_10RPathChainE ()
#5 0x8fe0c198 in __dyld_dlopen ()
#6 0x90489ca8 in dlopen ()
#7 0x0000993c in main ()
(gdb)
やっぱり動かないです。

トラ技2月付録基板

LPCXpressoは、Eclipseを元にしているようで動作が重いので単体のgccで開発したいと思い検索したところ
http://elm-chan.org/junk/32bit/nxpdip.html
をみつけました。”LPC1114FN28/102でLチカ(gcc)”をクリックするとlpc810_1st.zipが
downloadできます、解凍したフォルダに以下の内容のbatファイルを作成して
クリックすればFlashMagicで書き込めるhexファイルが生成できます。
set PATH=C:\nxp\LPCXpresso_6.1.4_194\lpcxpresso\tools\bin;C:\nxp\LPCXpresso_6.1.4_194\lpcxpresso\msys\bin
make
PAUSE

このソースはPIO0_2にLEDが接続してある設定なので付録基板に合わせてPIO0_1に変更します。
2カ所2->1に変更しました。
FlashMagicで書き込むにはシリアルでLPC800と接続する必要があります。

SH2AのICEで使用したFT2232を使ったOpenOCDアダプタのBchが未使用なので使う事にします、


接続
FT2232——-LPC800–トラ技ボード
VCCIO(3V)————-I2Cコネクタ1(3V3)
BASU1(RXD)—2pin—–I2Cコネクタ2(SCL)
BASU0(TXD)—8pin—– I2Cコネクタ3(SDA)
GND——————I2Cコネクタ4(GND)
ISPモードにする為にLPC810-5(PIO0_1)をLにす必要があるので、
R4(LPC800側)とdebugコネクタの8(GND)をICクリップで接続しています。
基板にはパスコンがないのでU4-8,7に0.1uFの積層セラミックコンデンサを付けています。
後はFlashMagicを起動して書き込むだけです。詳細は本を参照ください。
ICクリップを外してリセットすればプログラムが動きます。

トランジスタ技術2014.2,3



ARM関係の付録だっだので購入しました。
ライタの確認のために2月号の付録の基板に必要な部品を乗せてLED Blinkyが動かせました。
LEDの接続ポートが違うのでそこだけ書き換えています。
本に有る様にブレッドボードやユニバーサルボードで作るより簡単だと思います。

PPCMacでbacongui-2.4.0

昨日のエラーメッセージ(GLib-GObject-WARNING….略)を検索すると
http://mac-os-forge.2317878.n4.nabble.com/MacPorts-36041-gimp2-build-fails-on-10-5-8-PPC-td192502.html
が1件だけ見つかりました。
glib2をgcc-apple-4.2で作り直したところうまく行きました。
glib2がすでにinstallしてあるので、port installではinstallされないので
sudo port build glib2 configure.compiler=apple-gcc-4.2
cd /opt/local/var/macports/build/…glib2のフォルダ
sudo make install
cd
sudo port clean –all glib2
でinstallしました。
cのサンプルも同様に動きました。

結局以下の変更で動きました。gtk2からgtk3にすれば良かった訳です。
[~/src/BASIC/bacongui-2.4.0]diff ORIG/bacongui-gtk3.bac bacongui-gtk3.bac
160c160
< lib$ = "/opt/local/lib/libgtk-x11-2.0.0.dylib"

> lib$ = “/opt/local/lib/libgtk-3.0.dylib”
359c359
< lib$ = "/opt/local/lib/libgtksourceview-2.0.0.dylib"

> lib$ = “/opt/local/lib/libgtksourceview-3.0.1.dylib”
410c410
< lib$ = "/opt/local/lib/libgdk-x11-2.0.0.dylib"

> lib$ = “/opt/local/lib/libgdk-3.0.dylib”

hug.bac(Version 0.89)を使ったサンプルを動かしてみます。
[~/src/BASIC/HUG]bacon hello.bac
Converting ‘hello.bac’… done.
Compiling ‘hello.bac’… done.
Program ‘hello’ ready.
[~/src/BASIC/HUG]./hello
Gtk library not found!

上記と同じ修正をすると
[~/src/BASIC/HUG]./hello
Symbol not found in library dlsym(0x100330, gtk_combo_box_append_text): symbol not found
で何も表示されません。

hug.bacを調べるとgtk2,gdk2(cygwinで指定しているlib)を使うようです。変更してコンパイルして実行します。
[~/src/BASIC/HUG]./hello
Illegal instruction
windowとタイトルは表示されますが上記エラーでおちます。
gdbで確認すると
Program received signal EXC_BAD_INSTRUCTION, Illegal instruction/operand.
0x00054478 in g_slist_free ()
(gdb) bt
#0 0x00054478 in g_slist_free ()
#1 0x01e68a98 in basic_engine_shape ()
#2 0x002c283c in pango_shape_full ()
#3 0x002b4dec in shape_run ()
#4 0x002b683c in process_item ()
#5 0x002b80d4 in pango_layout_check_lines ()

#30 0x01059604 in gtk_container_idle_sizer ()
#31 0x00207654 in gdk_threads_dispatch ()
#32 0x01455aa8 in g_main_context_dispatch ()
#33 0x01458d10 in g_main_context_iterate ()
#34 0x01458f34 in g_main_loop_run ()
#35 0x010e0684 in gtk_main ()
#36 0x00044ba8 in DISPLAY ()
#37 0x0004519c in main ()
(gdb) q
サンプルを色々試した所resize-windowは動きました。

hug.bacの変更箇所は
[~/src/BASIC/HUG]grep /opt hug.bac
‘hug_lib$ = “/opt/local/lib/libgtk-x11-2.0.0.dylib”
‘hug_lib$ = “/opt/local/lib/libgtk-3.0.dylib”
hug_lib$ = “/opt/local/lib/libgtk-quartz-2.0.0.dylib”

‘hug_lib$ = “/opt/local/lib/libgdk-x11-2.0.0.dylib”
‘hug_lib$ = “/opt/local/lib/libgdk-3.0.dylib”
hug_lib$ = “/opt/local/lib/libgdk-quartz-2.0.0.dylib”

hug_lib$ = “/opt/local/lib/libgdk_pixbuf-2.0.dylib”
hug_lib$ = “/opt/local/lib/libglib-2.0.0.dylib”
hug_lib$ = “/opt/local/lib/libgobject-2.0.0.dylib”
hug_lib$ = “/opt/local/lib/libpango-1.0.0.dylib”
hug_lib$ = “/opt/local/lib/libgtkgl-2.0.dylib”

‘hug_lib$ = “/opt/local/lib/libgtkglext-x11-1.0.dylib”
hug_lib$ = “/opt/local/lib/libgtkglext-quartz-1.0.dylib”
最初が変更前で次がgtk3で有効にしているのがgtk2です。

追記
Version2.3で動くとの情報を見たので、試してみました。
以下2つのバージョンとも駄目でした。
BaCon version 2.3.0 – (c) Peter van Eerten – GPL v3.
BaCon version 2.5.1 beta – (c) Peter van Eerten – GPL v3.

bacongui-2.4.0

どこで落ちるか調べたところ、SUB Build_Guiの
‘ Create FILE submenu
fmenu = gtk_menu_new()
ftear = gtk_tearoff_menu_item_new()
file_menu = gtk_menu_item_new_with_mnemonic(“_Open…”)
で落ちるようでその部分をスキップさせると画面が出る様になりました。

menuやbar関係を飛ばしているのでwindowのみですが、
前日の追加で書いた修正で良いようです。

確認のためcのサンプルプログラムを探して、
7章:メニューバーとUIマネージャメニューバーからファイルを開いてみる
問題なくうごきます。
23章:メニューメニューバー、ポップアップメニュー、UIマネージャ(7章の復習)
だとコンパイルは出来ますが実行すると

[~/src/gtk3]./menu_bar
(menu_bar:82103): GLib-GObject-WARNING **: gvalue.c:183: cannot initialize GValue with type ‘gchararray’,
the value has already been initialized as ‘(null)’
Segmentation fault

[~/src/BASIC/bacongui-2.4.0]./bacongui-gtk3 -h
(:82156): GLib-GObject-WARNING **: gvalue.c:183: cannot initialize GValue with type ‘gchararray’,
the value has already been initialized as ‘-g-type-private–IFaceHolder’
Segmentation fault

同じ所で落ちてるみたいですね。macだと何か必要なのかな?
/opt/local/include/gtk-3.0/gtk/gtkmenuitem.h:
GtkWidget* gtk_menu_item_new_with_mnemonic (const gchar *label);
で”xxxx”で文字列を渡してるだけなのに。