2017年2月18日土曜日

Dynamic Parallelism を使うコンパイルとリンク

NVIDIA CUDA 8.0, Visual Studio 2015 環境での CUDA Dynamic Parallelism を使用する cu プログラムのコンパイルとリンクで cdp プログラミングを使ったコードをコンパイルする場合、Solution のプロパティにて

CUDA C/C++ > Common の Generate Relocatable Device Code : Yes (-rcd=true)

Linker > Input の Additional Dependencies のライブラリリストに、
cudadevrt.lib
が必要だ。

2015年11月18日水曜日

Mac OS X El Capitan で gdb を使う Setting up gdb on Mac OS X El Capitan

OS のアップデート後に動作しなくなった GNU gdb (mac ports) を再び使えるようにする.
コード署名,/System ディレクトリの plist ファイルの書き換えなど,個別の作業はていねいに解説されたウェブページがあるので,キーワードで検索し参考にする. Stack Overflow に taskgated.plist の編集のため SIP 機能を解除する手順について言及する投稿がでた.

症状:
Yosemite で使っていたバイナリーのままで ggdb コマンドを実行すると,起動するが,run コマンドは taskgated, codesign についてのエラーを出して機能しない.
Unable to find Mach task port for process-id 673: (os/kern) failure (0x5).
(please check gdb is codesigned - see taskgated(8))

環境,目標:
Mac OS X 10.11.1
X code 7.1.1, Command Line Tools (Mac OS X 10.11) for Xcode 7.1
Apple LLVM (/usr/bin/gcc) 7.0.0
GNU gdb (/opt/local/bin/ggdb) 7.7.1

1. (念のため)mac ports のバイナリを,10.11 (El Capitan) 対応のものにアップグレードする.
Update gdb binary for Mac OS X 10.11.

(0) (OS のアップグレードでなくなった) x-code のコマンドラインツールをインストールする.先に Xcode は 7.1.x にアップデートしておく.
(1) https://www.macports.org/install.php からダウンロードして mac ports をインストール.
(2) port selfupdate, port upgrade outdated を実行(sudo).

2. gdb のコマンドバイナリにコード署名する.
Code sign gdb binary.

GNAT User's Guide, gcc.gnu.org
(1) 証明書を作成する.open -a "Keychain Access.app"
(2) コード署名する.sudo codesign -f -s gdb-cert /opt/local/bin/gdb
(3) taskgated の起動オプションが変更済みの場合,taskgated を再起動する.OS を再起動するか,launchctl load /System/Library/LaunchDaemons/com.apple.taskgated.plist を実行.

3. OS の taskgated の起動オプションに -p オプションを追加する.
Temporarily disable SCR function on file systems and add -p command line option to the taskgated start-up script.

/System/Library/LaunchDaemons/com.apple.taskgated.plist ファイルの起動オプション -s が書かれた行 (array タグ) を探し, -sp に変更する.
ただし 10.11 では /System が書き換え不可となっている(System Integrity Protection (rootless) 機能)ため,一時的にファイルシステムを書き換え可能にし,編集したのち,元に戻す.
(1) リカバリーモードで起動する.再起動し,アップルマークが表示されるまで command+R を入力する.
(2) ユーティリティーメニューでターミナル Terminal をを選び,csrutil disable コマンドを実行,通常モードで再起動.
(3) 起動パラメータファイルを編集する./usr/bin/emacs, /usr/bin/nano 等をが使える.
(4) リカバリーモードで起動する.csrutil enable コマンドを実行して元にもどし,通常モードで再起動する.

4. ggdb の root 実行権限をもつグループ(mac ports では procmod)に使用するユーザーを追加する.
Add the user to "procmod" group.

(1) 確認する.dscl . read /Groups/procmod
の GroupMembership の値を確認.
(2) ない場合,グループにユーザー ID を追加する.
sudo dscl . append /Groups/procmod GroupMembership %username%

2013年10月21日月曜日

SPI 液晶ディスプレイ

秋月電子通商で扱われるようになった SPI 接続のグラフィクスディスプレイ.コントローラチップ ST7565 の Arduino 用ドライバは,Adafruit が公開しているものがある.
初期化シーケンスが違うためかコントラスト設定がうまくいっていないようだが,なにか表示されるようにはなる.商品説明書のとおりに変更すると,コントラストもきれいになる.ディスプレイの上下やピクセル数をあわせる必要もありそうだ.

しかし,RAM の小さいマイコン,たとえば Arduino の ATMega328P の 2KB 程度,では実用にならないことに気がついた.ディスプレイコントローラ ST7565 へはデータまたはコマンドの書き込みのみなので,表示されているピクセルの状態を読み出せない.グラフィックディスプレイとしてピクセル単位でアクセスするには,描画する側にスクリーンバッファが必要になる.128x64 ビットで 1KBytes を消費してしまう.

SPI インターフェースで高速なので残念だが,RAM の多いチップ向き.
Strawberry Linux の 102x64 グラフィクス LCD も SPI バスで,商品ページにリンクされているデータシート?を見る限り,スレーブデータアウトの端子がないので,これもビットマップアイコン/キャラクタディスプレイということのようだ.

2013年6月9日日曜日

Strawberry Linux の lpclcd 用コードを Keil mdk で開発できるのか

lpclcd はM0でフラッシュのサイズは32kB、LPCXpresso や評価版でコンパイルできるが、C++ が使えない。デバッガも使えるほうがいいので、mdk で使いたい。

まず、JTAGピンをつけてULINK/MEやST-Link2をつないでみたが、プログラミングアルゴリズムとして NXP LPC11xx 32kb を選んだだけでは、アップロード後の verify で失敗する。
とりあえずあきらめ、USB ストレージとしての flash 書き込みを試みる。

まず、.axf (elf) から.bin に変換する。
Keil に fromelf というコマンドがついていて変換に使えるらしいが、パスが変わっていた。
ビルド時に変換もするよう、Project オプションの User コマンドに追加する。
C:\Keil\ARM\ARMCC\bin\fromelf.exe --bin "#L" -o "$Poutput.bin"
#L と $P は、パス変数のようだ。

これでできたファイルを USB ストレージにコピーしても書き込みまれておらず、動かない。実行可能にするには、チェックサムを付加する必要があるらしい。LPCXpresso のプロジェクトの makefile に書いてあるものを参考にすればいいと思うが、ARM が配布している CHECK8.EXE コマンドは 64bit Windows 7 では動かない。ので、PCXpresso に用意されている checksum コマンドを使う。

解説ページ

C:\nxp\LPCXpresso_5.2.4\lpcxpresso\bin\checksum -p LPC11U24_401 -d "$Poutput.bin"

とりあえず、LPCXpresso プロジェクトのコードを(コードプロテクション CRP のマクロはコメントアウトして)ビルドして、書き込んで動いたのでよしとしよう。

2013年4月28日日曜日

avr-gcc/g++ の link で flash イメージがやたら大きくなる

自分でコンパイルしてビルドする場合,イメージがやたら大きくてアップロードでエラーが出ていた.
リンカがフラッシュ書き込みイメージに不必要な部分をふくめないようコンパイラには
--ffunction-sections --fdata-sections
オブションを,リンカ avr-gcc/g++ には
--gc-sections
を-Wl,-Map,avrfreertos.map,--gc-sections のように入れる必要があるようだ.
Eclipse の auto makefile でビルドするときは Properties/C/C++ Build/Tool Settings の AVR C++ Linker/General で Map filename の最後に , をつけてムリヤリ入れる.

Arduino IDE でコンパイル/リンクメッセージの表示をさせて,同じにすればいいようだ.

2012年11月1日木曜日

M41T62 RTC w/ Arduino example

ストロベリーリナックスで発売されている ST Micro の I2C リアルタイムクロック RTC M41T62 モジュールの Arduino ライブラリとシリアル端末出力スケッチのとりあえずのサンプルコード.https://github.com/una1veritas/Arduino/blob/master/libraries/RTC_M41T62.zip

めずらしくどこにもなかったので作ったが,まだ DS1307 のライブラリに少うし手を入れただけ.

2012年9月20日木曜日

Eclipse/Mac OS X で ARM Cortex-M4 のコードをコンパイル

STM32F4 Discovery で C/C++ 開発環境をためす.

コンパイラ,リンカ,デバッガ等は
http://cu.rious.org/make/compiling-the-arm-cortex-m4-toolchain-yourself/
のオプションそのままでより新しい binutils-2.22, gcc-4.7.1, newlib-1.20.0, gdb-7.5 でビルド.

ボード組み込みの ST-Link/V2 を使うためのコマンド st-link/flash by jnosky を
http://cu.rious.org/make/stm32f4-discovery-board-examples-on-linux-and-mac-os-x/
にしたがってインストール.libusb-1.0 ほか pkgconfig, automake, autoconf 等が必要なので mac port で入れる.使うのが libusb だけなら Xcode の llvm gcc でも stutil はビルドできた.

make コマンドでのコンパイル,バイナリイメージの作成はできるようになったが,Eclipse の GNU Cross ツールでのマネージドビルドがなかなかうまくいかず苦労する.
理由は
1)ライブラリのディレクトリ構造が単純でなく,USB のコードなどは HOST か Device かでソースコードを選ぶ(同じ構造体でもメンバが入れ替わる)必要があったり,ユーザーコードのヘッダをライブラリのヘッダファイル側からインクルードしたりするので,Makefile を参考にちまちま選ばねばならず,IDE で便利になっていない気が.
2)スタートアップ(ブートストラップ?)用のアセンブラコード stm32f4xx_start.s がアセンブルされず正しいイメージファイルができない.理由は,拡張子が大文字 .S でないと GNU assembler のコードとして認識されないからだった.手動で *.S を登録しようとしても拒否される.しかたないのでファイル名の .s を .S か .asm に変更すると,アセンブルされ動作した.ファイル名の大文字小文字を区別しない OS の関係なのか,バグのようだ.

Makefile を使うのであれば,Eclipse はプログラミング用テキストエディタでしかない...なにも考えずデバッガまで動く IAR の試用版でしばらくやったほうがいい気が...
デバッガを使わないレベルが対象とはいえ Arduino/Arduino IDE の優れている点がよく理解できる.

一方 LPCxpresso ボードと IDE 無償版は,Linux, Mac OS X 対応.
デバッガもそのまま動き,作れるコードサイズもそこそこ大きくいいのだが,C++ はサポートしないしプラグイン等使えないので Eclipse ベースである魅力が半減.
がんばって C++ を使えるようにしたり Arduino 互換を目差したライブラリが作られていたりするようだが,これも Eclipse の設定で結構疲れそう.すでに少なくない自家製 Arduino ライブラリコードを使い回すのがむつかしそう.LPCxpresso は秋月で購入できリーズナブルで Ethernet もトランスコネクタだけでつけられて(LPCxpresso 1769)よかったのだが..

Cortex-M3 だが STBee/STBee-mini は DFU 書き込み(dfu-util).その他 DIP 版 LPC1114 (Cortex-M0)等でおすすめされる USART 書き込みなどは,普通にターミナルの shell 上で make するのとかわらないので,使う必要があるときに使うことにする.

LeafLab Maple はライブラリ,IDE のアップデートが Arduino 0023 相当でとまっている.自家製ライブラリは Arduino 1.0 系で書きなおしているので,今後のアップデートを期待する.