Ubuntu15.10にQt5.5.1をインストールする

VirturalBox 5.0.10上のUbuntu 15.10にQt5.5.1をソースからビルドしてインストールした
何度か失敗してやっと上手くいったので手順をメモ。

※VirtualBox の設定  > ディスプレイ > アクセラレーションの3Dアクセラレーションの有効化はチェックを外してGuest Additionをインストールしておくこと

参考にしたサイトはこちら
https://wiki.qt.io/Building_Qt_5_from_Git

ほぼサイトのLinux(Ubuntu/Debian)に関する項目をそのままトレースした

qt5の構築に必要なモジュール群のインストール

$ sudo apt-get build-dep qt5-default
$ sudo apt-get install build-essential perl python git
$ sudo apt-get install "^libxcb.*" libx11-xcb-dev libglu1-mesa-dev libxrender-dev libxi-dev
$ sudo apt-get install flex bison gperf libicu-dev libxslt-dev ruby
$ sudo apt-get install libssl-dev libxcursor-dev libxcomposite-dev libxdamage-dev libxrandr-dev libfontconfig1-dev
$ sudo apt-get install libcap-dev libbz2-dev libgcrypt11-dev libpci-dev libnss3-dev build-essential libxcursor-dev libxcomposite-dev libxdamage-dev libxrandr-dev libdrm-dev libfontconfig1-dev libxtst-dev libasound2-dev gperf libcups2-dev libpulse-dev libudev-dev

Gitでソースコードを取得

$ git clone git://code.qt.io/qt/qt5.git
$ cd qt5
$ git checkout 5.5

webkitは大きいし、たぶんBeaglebone blackのアプリでは使わないので除外してダウンロード
以前のバージョンのインストール等については上の参考サイトを参照

$ perl init-repository -no-webkit

構築

やり直す時に簡単にクリーンアップできるように構築用のディレクトリを作ってそこでコンパイル

$ mkdir build
$ cd build
$ ../configure -developer-build -opensource -nomake examples -nomake tests -prefix /opt/Qt-5.5

 

$ make -j4
$ sudo make install

QtCreatorをインストール

ホームディレクトリにインストーラをダウンロード

$ cd
$ wget http://download.qt.io/official_releases/qtcreator/3.5/3.5.1/qt-creator-opensource-linux-x86-3.5.1.run

ダウンロードしたファイルに実行権限をを与える

$ chmod 755 qt-creator-opensource-linux-x86-3.5.1.run

インストーラを起動

$ ./qt-creator-opensource-linux-x86-3.5.1.run

後は起動したインストーラの指示通りに進めてインストール完了

VirtualBoxの設定で3Dアクセラレーションが有効になっているとQtCreatorが Could not initialize GLX というエラーで起動できなくなってしまう
これでしばらく悩んだ。

STM32CubeMX 4.7.1でちょっと嵌る

stm32cubemx471

アップデートチェックでプログラム本体STM32CubeMX4.7.1とstm32f0x用ライブラリSTM32Cube_FW_F0_V1.2.0が使用可能となっていたのでいつもの癖で「とりあえずアップデート」をして少し嵌ってしまった。

STM32CubeMX 4.7.1

TrueSTUDIO用のプロジェクトを生成するとハングアップしてしまった。
JDEはMDK-ARMのプロジェクトもインポート出来るようにしていたのでそちらでチェックすると取りあえずはOKの模様。
これまで使っていたプロジェクトを読み込ませたところプログラムが動作しなくなったので深刻なバグがあるのかと疑ったがコンフィグレーションのマイグレーションで一部エラーが生じていただけでADCとSPIを再設定したら動作は正常になった。

STM32Cube_FW_F0_V1.2.0

製作中のプログラムにUARTの受信が止まるというバグがあるのでライブラリアップデートで治るかと期待したがV1.1.0と認識できる範囲で違いはなかった。

STM32Cubeのライブラリは簡単に使えるようになっている一方「痒い所に手が届かない」面もある。
受信用DMAをCircularモードにしてDMAの書き込み先をリングバッファにした受信関数を作りたかったのだが標準のAPIだけではうまくいかなかった。
結局ちょっとした工夫でDMAの受信完了コールバック関数を無効にして割り込みを使わないDMAだけの受信関数を作ることが出来た。

====================================================================================

CirculerモードでDMAは連続で動作するが
HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
の中で転送数Sizeの後でDMAを停止する関数をセットしているのでそれをリセットする。
(例)
r = HAL_UART_Receive_DMA(&huart2, (uint8_t *)rx2.buf, UART_RXSIZE);
huart2.hdmarx->XferCpltCallback = NULL;
return r;
& 受信完了コールバック関数は無効にする

stm32Cubeに感動

昨年末(2014/12)にstm32Cubeを使い始めてから何度かこれでプロジェクトを構築してみた。
stm32Cubeの最大のメリットはGUIを使って端子の割り当てとハードウェアの初期化を定義出来ることだ。

プロジェクト毎に新しいボードを作ることが多い私としては、これがとても有難い。
おまけにCPUも新しいシリーズが出るたびに使ってみたくなるのだが、シリーズが変わっても過去の資産を最大限活かすことが出来る。

新しいボードを作った時に手間がかかるのはリソースの割り付けと初期化部分のちょっとした間違いによるトラブルを潰すためのデバッグだが
その部分を大幅に効率化出来ているような気がする。

このようなツールを提供できないルネサスは、以前に較べると大口顧客オンリーの姿勢が変わってきているように見えるが長い目で見ればますます差が開いていくに違いない。
国産のメーカだから頑張ってほしいものだ。