投稿

ラベル(C言語)が付いた投稿を表示しています

ARM用クロスコンパイラのビルド(Windows8.1+Cygwin+GCC5.2)

イメージ
以前の記事 から2年余り経過したのでゼロベースで最新環境にしてみた。 ◆ Cygwin のインストール setup.exeをダウンロードしてきて実行。 Default状態から以下のパッケージを追加でInstallします。 今回は②〜③についてもCygwinのインストールパッケージを使用。 ①Devel ②任意精度計算ライブラリ(GMP) ③浮動小数点演算ライブラリ(MPFR) ④複素数演算ライブラリ(MPC) Cygwinのインストールが完了。バージョン確認結果。 ◆クロスコンパイラ関連ソースを入手 /usr/local/srcフォルダにソースをダウンロード&展開します。 因みに、今回のツリーは以下の様にしていますがお好みです。 /usr/local/gnu                      ...gccインストール先               /src/gcc***             ...ソース                     /binutils***                     /newlib***                     /build/gcc        ...ビルド用フォルダ                         ...

久しぶりのPICマイコン

イメージ
長く触っていないうちにPICマイコンのプログラミング環境MPLABがメジャーバージョンアップされていました。 VISTAに入っている 旧環境 を使うのも面倒なので、Win8にXバージョンをセットアップしました。 ◆MPLABX IDE マイクロチップ社のサイト から所望のOSのインストーラをダウンロードしてきます。無償です。 Windows用の現バージョンは1.80でした。 インストーラを実行して、Nextを押していればインストールは完了します。 最後に表示されるウィンドウのチェックを入れたままにしておけば、 コンパイラのダウンロードページ が開きます。 ◆MPLAB XC 対象とするPICマイコンのCコンパイラをダウンロードします。無償です。 勿論、お仕事用ならPROやStandardの有償ライセンスを購入しましょう。 ※C++はPIC32のみ対応のようですね。 今回はPIC18が対象なのでXC8をダウンロード。現バージョンは1.12でした。 インストーラを実行して進めていくと、ライセンスキーを要求されますが、空白のままNextとします。 すると、フリーモードとするか、PROの評価モード(60日間のみPROとして機能する)とするか聞かれます。 お仕事でライセンス購入を予定しているなら勿論PROの評価版ですが・・・ お遊びモードの方はお好きなほうを。 ◆USBやLANを使用する場合は、必要に応じて無償の アプリケーションライブラリ もインストールしておきましょう。 ダウンロードしてきてインストーラを実行するだけです。 え?XC8サポートしてないの?8bit系チップを見捨てたのか? Cソースコードだから何とかなるかもと、とにかくインストール完了してReadmeを開いてみると、PIC16F、PIC18Fも対象って書いてある。ってことはXC8でビルドでしょ? 「やってみなくちゃ判らない・・・」 by 細野晴臣 「先週のRaspberryPiのデバドラはどうなった?」 by 誰かさん

RaspberryPiのデバイスドライバ(第1歩)

イメージ
以前、 RaspberryPi のGPIOレジスタを直接叩いてLEDを点灯 させてみましたが、ルート権限で実行させる必要があります。 そこで、まずはデバイスドライバのロード&アンロードを確認するだけのプログラムを試してみました。 ◆ VM上のEclipse を起動します。 ◆Eclipseが自動生成するMakefileでのビルドにチャレンジしましたがエラーが解決できなかった為、手入力したMakefileでビルドするように構成します。 Cプロジェクトの新規作成にて、Makefileプロジェクトの空のプロジェクト、他のツールチェインを選択します。 インクルードパスに Raspbian(Linux)のソース ツリーにあるIncludeディレクトリを追加 ※ビルドには無関係ですが、ソースコードの定義チェックなどが機能してくれるので定義しておきましょう。 ◆正常にビルド完了しました。 このEclipse(Ver3.8)では、printk()やmodule_init()、module_exit()でソースコードの構文解析でエラーがでてしまいますが、ビルドには支障はないようです。 ◆RaspberryPi上で動作確認します。 SCPで、main.koをRaspberryPiに転送。 SSHで、RaspberryPiにリモート接続。 insmodでmain.koをロードします。(特権ユーザーで) lsmodで、mainが正常にロードされた事が確認できました。 rmmodで、アンロード。 最後にdmesgで、ロード、アンロード時にKERN_ALARTに出力した文字列が残っているかチェックし、無事に実行された事が確認できました。 ---------------------------------- main.c #include <linux/kernel.h> #include <linux/module.h> #include <linux/init.h> MODULE_DESCRIPTION("Hello driver"); MODULE_AUTHOR("777gunslinger"); MODUL...

ARM用クロスコンパイラのビルド(Windows8+Cygwin)

イメージ
更新版はコチラへ ARM用のGCCを Windows8 上でビルドしてみたので備忘録として。 ◆ Cygwin のインストール setup.exeをダウンロードしてきて実行。 ドライブ直下が吉ですのでディフォルトのままで。 適当なフォルダを指定 通常のブロードバンド環境ならディフォルトでOK わざわざ海外サーバを選ぶ必要はないでしょ。 Devel以下を一括でインストールしてしまいます。 GCCのビルドには不要なものもインストールされてしまいますが、何が必須なのか良く分からないもので・・・ あとは「次へ」だけで無事にインストール完了 ◆関連ソースを入手 ① GCCコンパイラ ② binutils(アセンブラやリンカーなど) ③ Newlib(組み込み向け標準ライブラリ) GCC4.5以降は以下の演算ライブラリが必要らしいので入手。 ④ 任意精度計算ライブラリ(GMP) ⑤ 浮動小数点演算ライブラリ(MPFR) ⑥ 複素数演算ライブラリ(MPC) 今回入手したファイル(バージョン)は以下の通りです。 ダウンロードしたソースを展開します。(何処へ展開するかはご自由に) $ mkdir -p /usr/local/src/gnu $ cd /usr/local/src/gnu $ tar zxvf ~/Download/gcc-4.7.3.tar.gz  : $ tar vxvf ~/Download/gmp-5.1.2.tar.bz2 ◆ビルド $export LANG=C この定義が無いとエラーが発生しました。 $export TARGET=arm-eabi $export PREFIX=/usr/local/gnu ①binutilsのビルド $ mkdir -p ~/tools/build-binutils-2.23.2 $ cd ~/tools/build-binutils-2.23.2 $ /usr/local/src/gnu/build-binutils-2.23.2/configure --target=$TARGET --prefix=$PREFIX --enable-interwork --enable-multilib ...

Raspberry Pi のsleep時間測定

イメージ
RaspberryPiのGPIO出力波形にてsleep処理時間を測定してみました。 ◆sleep() while(1){     *(gpio_regs + 0x7) = (0x1 << portnum);     sleep(n);     *(gpio_regs + 0x0A) = (0x1 << portnum);     sleep(n); } n = 1 1秒から程遠い結果でした。原因は?? ◆usleep() while(1){     *(gpio_regs + 0x7) = (0x1 << portnum);     usleep(n);     *(gpio_regs + 0x0A) = (0x1 << portnum);     usleep(n); } n = 1 n = 10 n = 100 n = 1000 凡そ80μsecのディレイが発生するようです。 ------------------------------------------------------------------ 追加測定 ◆nanosleep() nano.tv_nsec = n; nano.tv_sec = 0; while(1){     *(gpio_regs + 0x7) = (0x1 << portnum);     nanosleep(&nano,NULL);     *(gpio_regs + 0x0A) = (0x1 << portnum);     nanosleep(&nano,NULL); } n=1~1000 n=10000 n=100000 nano.tv_nsec = 0; nano.tv_sec = 1; usleepと同様に約80use...

Raspberry Pi のGPIO信号波形

イメージ
RaspberryPiのGPIOにキャラクタLCDモジュールを接続します。 そこで、Cプログラムでインターフェイスタイミング信号を生成する為に、出力信号波形を観測してみました。 以前作成した LED点滅プログラム を以下の様にsleep関数をコメントアウトして観測 ※お安いPCオシロですので精度はあまり良くないですm(--)m while(1){     *(gpio_regs + 0x7) = (0x1 << portnum); //    sleep(1);     *(gpio_regs + 0x0A) = (0x1 << portnum); //    sleep(1); } CH1:電源電圧(テスターでの測定値は3.30Vでした) CH2:GPIO25(P22)

EclipseによるRasiberryPiのクロス環境

イメージ
DebianにインストールしたEclipse-cdt でRaspberryPiのクロス環境を試してみます。 ◆クロスコンパイラをgithubから落としてきます。 $git clone git://github.com/rspberrypi/tools.git ※ RaspberryPiのカーネルをビルド した時と同じですので、既にゲット済であれば不要です。 ◆HelloWorld ファイルメニューから新規プロジェクトを選択します。 Cプロジェクトを選択します。 プロジェクト名は適当に Hello World のプロジェクトを選択 ツールチェインはCrossGCCを選択 githubから落としてきたクロスコンパイラを指定します。 接頭部 arm-bcm2708-linux-gnueabi- パス ???/tools/arm-bcm2708/arm-bcm2708-linux-gnueabi/bin ビルド成功 RaspberryPiに実行ファイルを転送 正常に実行されました。

Debian Wheezyにeclipse等をインストール

イメージ
Wheezyに諸々インストールの備忘録 ◆emacsのインストール $sudo aptitude install emacs ◆terminatorのインストール $sudo aptitude install terminator ◆eclipseのインストール $sudo aptitude install eclipse ◆eclipse-cdtのインストール $sudo aptitude install eclipse-cdt ◆eclipseの日本語化 $sudo aptitude install pleiades $sudo emacs /etc/eclipse.ini 最終行に以下の1行を追記して保存 -javaagent:/usr/lib/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar