「PC環境」カテゴリーアーカイブ

R8C、RX開発環境のアップデート

R8C の開発環境が作れないとのツイートをもらう・・

先日、Twitter で 過誤出来ないツイートをもらった。

ツイートは短く、詳細は不明なので、実際にどんな事が起きているのか判らなかった。

何度かやりとりをする中で、どうやら、これは Linux 環境で発生している事が判った。

その要因は、最新の gcc 環境(Version 11)などで、gcc-4.9.4 の C++ ビルドで失敗する事が判った。

そういえば、Windows の MSYS2 環境もしばらくアップデートしていない、そこで、まずは、MSYS2 をアップデートする事から始めた。
※Linux 環境は、ノートPC にあり、古いので、新しい環境に入れ直す必要があり、確認するのも時間がかかる。

pacman -Sy pacman
pacman -Syu

この段階で、データベースの更新に失敗して、先に進まない・・

MSYS2 は、かなり更新しているようで、根本的にシステムが大幅に変わったようだ、そこで、インストールからやり直す事にした。

念の為、MSYS2 のコア部分、「C:\msys64」をリネームして、残しておいた。

最新版をインストールして、必要なツールをインストール。
※複数パッケージのインストールが、マルチスレッドで同時進行するようになっているw

MSYS2 はアイコンが少し新しくなり、大きな変更があったようだ。

また、新たな環境が二つ追加された:

  • MSYS
  • mingw32
  • mingw64
  • ucrt64(追加)
  • clang64(追加)

※追加された環境が、どのような特徴があるのか調べていない。(clang64 は何となく判る)

MSYS のカレント gcc は11系になっている。

gcc (GCC) 11.3.0
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

次に、R8C 用 gcc のビルドにとりかかる。
gcc のビルドは、MSYS で行う。(この環境がもっとも Linux などに近い)

手順を進めていって、やはり、gcc C++ の構築でエラーが発生して止まる・・・

うーーん、これは、どうしたものか・・・

そもそも、gcc-4.9.4 は古すぎると以前から思っていた。
しかし、開発環境を変更する事で、発生する別の問題を恐れて「まぁ動いているから枯れた方がいいかな」とも思っていた。

この機会に、手始めに R8C の開発環境をアップデートして、gcc-11 でエラー無くコンパイル出来るようにした方が建設的ではと思った。
この段階で、エラーを報告してくれた人は、ネットの情報を精査して、configure で生成された Makefile に、C++11 のオプションを付ける事で回避したようだ。
※なるほど、その回避もあるよなぁーと思ったが、やはり、gcc のビルドで特別な事を行うのは少し抵抗がある。


RX マイコンの開発環境では、最近は GNU-RX(魔改造されている)を使っている為、素の gcc を使う事が無くなっている。

RX のツールチェインは、以下の組み合わせとなっている。

binutils-2.34
gcc-7.5.0
newlib-2.4.0

組み合わせは重要で、リリースが同じくらいのパッケージを組み合わせないと、ビルドが通っても、コンパイル中にインターナルエラーで止まったり、
出来たコンパイラで作ったバイナリーをマイコンに焼いても動作しないなど、色々なトラブルが起こったりする。

そこで、R8C(m32c-elf)のビルドを上記組み合わせで作ってみた。

ビルド途中で、エラーで、失敗する・・・

うーーーん・・・

この組み合わせは、m32c-elf では相性が悪い・・・

そこで、少し古いバージョンの組み合わせで、色々試してみた。
m32c-elf は多分、メンテナンスされていないので、欲張らずにそこそこ新しい物で我慢する方が安全と考えた。
SSD(1TB) と、大きな主記憶(32GB)で武装された、最新の PC(Rizen7) でも、gcc のビルドは、そこそこの時間を要する。

色々、試して:

  • binutils-2.28.1.tar.gz
  • gcc-6.4.0.tar.gz
  • newlib-2.4.0.tar.gz

この組み合わせで、ビルドが通った。


boost 問題・・・

r8cprog など、一部のコードは、boost を使っている。

本来なら、MSYS 環境に boost を入れるのが良いと思うが、mingw64 などには対応しているが、MSYS 環境には無い。
そこで、mingw64 環境に入れた boost を間借りする形で使っていた。
しかし、新しい MSYS2 ではそのやり方では問題が発生する事が判った。

そこで、boost_1_74_0 のアーカイブを取ってきて、C ドライブのルートに展開し、そのパスを食わせる事で解決した。

この変則的なやり方は、あまりスマートとは言えないが、手順は難しく無いので、まぁ及第点だろうか・・


R8C のプロジェクトを全ビルド

新しく出来たツールチェインを使って、R8C のプロジェクトを全てビルドしてみた。

エラー無くビルドが通った。

とりあえず、「UART_sample」を動かしてみて、ちゃんと動作するバイナリーが出来る事も確認した。


RX 関係も確認

RX 関係も、一応確認した。

RX の gcc ビルドは問題無く通ったので、「良し」としたが、boost のパスは、R8C と同じく変更した。


RL78 環境

RL78 も、R8C と同じ環境にして、gcc をビルドしてみた。
これも、順調に通り、構築出来た。

しかし、プロジェクトをビルドすると、gcc がインターナルエラーで停止する・・・

rl78-elf-g++ -c  -std=c++17 -Wall -Werror -Wno-unused-variable -Wno-exceptions -Wno-unused-function -Os -mmul=g13 -DSIG_G13 -DF_CLK=32000000  -I. -I../ -I../G13  -o release/main.o main.cpp
In file included from main.cpp:15:0:
../common/format.hpp: In member function 'void utils::basic_format<CHAOUT>::out_fixed_point_(VAL, uint8_t, bool) [with VAL = long long unsigned int; CHAOUT = utils::stdout_chaout]':
../common/format.hpp:589:3: internal compiler error: in push_reload, at reload.c:1348
   }
   ^
unrecognized DWARF version in .debug_info at 6
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://gcc.gnu.org/bugs.html> for instructions.
make: *** [Makefile:112: release/main.o] Error 1

うーーーん、これは痛い・・・

そーいえば、ルネサスさん、RL78 用に LLVM ベースのコンパイラをリリースしているんだよなぁー、アレ試してみたいんだよなぁー

今ここ。


まとめ

とりあえず、R8C、RX 関係は、何とかなったので、RL78 も何とかしたいけど、時間切れ。
Linux 環境も試しておく必要があるし、まだ、時間がかかる。

R8C の教材も中途だし、中々先に進まない。

しかし、Windows の最新環境にマッチするように改修したのは、大きな進歩と思える。

DELL U2718Q の修理(その2)

電源が豪華

このモニターの電源はかなり豪華な創りでコストをかけているように思う。


モニターの要は、液晶よりも電源なんだと実感する。

こんなに豪華な創りの電源は久々に見たー
※AppleのACアダプターを分解した時にも、使っている部品や構成など、凄く感心したが、それと同等くらいの感動がある。

AppleのACアダプターの場合は、コンパクト化で、ありとあらゆる空間を有効に活用する為、3次元的に部品を配置して、全く隙間が無かった。
この電源はスペースには余裕があるので、一見、部品の配置はスカスカだが、裏面には、かなり表面実装の部品を配置してある。

使っている部品もグレードが基本的に高いように思う。

消費電流はそんなに多く無いけど、ちゃんとPFC対策電源になっている。

制御ICの型番は、削ってあり、消されている。

最終段は 18V で、そんなに電流は流れないけど、FETによる同期整流回路を採用しているようだ。

この電源なら、簡単に故障しないだろうと思われる。
※どこぞの中華電源とは、全く別次元のグレードw


コンデンサが到着

コンデンサが到着したので、部品をハンダ付けするものの、パターンが広く、熱が拡散して、思ったようにハンダ付け出来ない。
※秋月の送料は、1万円くらいじゃないと無料にならないが、500円くらいなので、他に欲しかった部品を少し加えて、通販した。
それでも、秋葉原に行って帰ってくるだけで、2500円くらいかかり、往復6時間は電車に乗る事を考えると、2、3日かかってもかなりマシだ・・・

鉛フリーのハンダも、このような場合にはハンデとなると思うが、それにしてもかなりヘタクソ・・・
でも、一応、ちゃんと付いている事を確認した。

うっかり外した電源コネクタ近くの電解コンデンサは、頑張っても、ハンダを吸引出来なかったので、ストックしてあった物を無理やり付けた。
※220uF、25V

一部のコネクタを壊していた

最初に分解する時、この部分のフレキコネクタを壊してしまった、よく見えなかったのが原因だが、かなり気を付けていたつもりなので、自分的にかなり精神的ショックが大きい。

コネクタを交換する事も考えたが、これは、液晶パネルの温度を計っているらしいので、まぁ、無くても問題無いと判断した。
一応、ケーブルを挿して、隙間に厚い紙(名刺)を挟んで、何とかなったと思う。

このフレキコネクタと同じ物を探すのも大変そうで、通販に日数がかかると思うし、交換の手間もスキルもかなり高い。

あすか修繕堂

と呼ばれるネットショップ(YouTubeに修理の動画が沢山ある)に、

あすかリムーバー

「低温ハンダ」が紹介されている、これを使えば、取り外しは可能と思うが、3cmで600円と高価だ・・

組み立て

いつも後悔するが、分解する前に写真を撮っておくべきなのだが、今回も忘れている。

分解の様子は、その時は覚えているが、数日たつと、どうなっていたか忘れている・・・
組み立ては、パズルのようだが、そこまで難解ではなかったので、何とか元に戻せた。


一応直ったようだー

電源を入れてみるー

電源ランプが点いて、画面にロゴが表示された、どうやら直ったようだー


一応、MacBook Pro 13 に接続してみた、問題無い。

直る事が判っていれば、モニターを注文しなかったのだが・・・

折角直ったのだから、メインモニターに戻すべきなのだが、買ったばかりのモニターなので、迷うところ、一番の問題は、間違って解像度が低いモニターを買ってしまった事だ、同じ解像度なら、新品モニターを迷わず使うのだが・・・

でもまぁ、やはり解像度が高い以前のモニターを使うべきなのだろうなぁー・・・

DELL U2718Q の修理(その1)

何の前触れもなく・・

土日は、もて耐で、家を空けていた、仕事部屋は、日中、かなりの高温になるので、この時期エアコンが欠かせない。

日曜の夜遅く、戻って、速攻でエアコンの電源を入れて、ビールを飲みながら扇風機を浴びていた。
夜遅かったので、それなりに温度は下がっていたものの、30度くらいはあったと思う。

PCの電源を入れて、ログインして、ブラウザを立ち上げメールをチェックする。

そして、荷物の整理をして、もう一度画面を観ると、真っ暗だった。
あれ、おかしいなぁーと思い、マウスを動かしたり、キーボードを触ったりしたが何も変化が無いー

PCを強制シャットダウンして、もう一度起動するが、やはりブラックアウトで変化無し・・・

モニターの電源ボタンを押すが、何も変化無し・・・

モニターの電源ケーブルを抜いて、挿し直すなど一連の手順をするも、変化無し・・・

このタイミングで壊れるのか!?

とりあえず、以前にPS4のモニターとして使っていた17インチの小型モニターに繋いでみた、画面は小さいがちゃんとPCは起動して画面が出る。

保障を確認、そして分解

自分は、オプションの長期保証プラン的な物には入らない主義なので、このモニターの保証期間は去年の8月に終了している。
※購入してから2年くらいしかたっていない・・・

YouTube の修理動画などを多く観ていたので、このモニターも、電源系のどこかが壊れているものと予想した。

そこで、とりあえず、分解してみたー。

まず、見えるネジを外す、シールで隠されているネジは無かった。

意外と重宝した、タイヤレバー(バイクのタイヤをホイールから外す工具)

パネルの分解が一番難解なのかもと思う、どのような構造なのか、想像するしかない。
しかし意外と簡単に、隙間を開くと、裏蓋が少しづつ開いていく、硬い部分は、タイヤレバーなどを使って、少しづつ開いていく、コーナーは、剛性が高く、頑丈だったが、爪が折れる事なく、綺麗に裏蓋を外す事が出来た。

フレキケーブルなどを外し、電磁波対策の金属ケースを外して、メインボードを出してみる。

このモニターは大まかに3つのボードに分かれている。

・電源ボード
・メインボード
・液晶ライト制御ボード(と思われる)

解析

とりあえず、ACコードを繋いで、電圧をチェックしてみる。

メインボードの主要な電圧を計るとやはり「0V」。

今度は、メインボードと電源を繋ぐコネクターを外して電圧を計る。

ACラインは、正常でPFC対策がしてあり、直近のコンデンサには380Vの電圧が出ている。
最終出力は、18Vくらいのようだ、電源だけだと正常のようだ。
それにしても豪華な創りの電源だー

メインボードの電源ラインの「抵抗」を計ってみる、「4オーム」くらい、やはり、電源ラインのどこかがショートしているようだ。

一番最初に疑ったのは、電解コンデンサ、ルーペを使いよーく観察してみるが、膨らんでいたり、液漏れしていたりする様子は無い。

とりあえず、今日は眠いので、明日にでも、再調査する事にした。

新たにモニターを注文

修理には、それなりに時間がかかりそうなので、とりあえず、直近の仕事もあるので、替えのモニターを注文した。

今度も同じように27インチモニター、U2718Q は既に廃盤のようで、U2719D を注文した。
ここで、大失敗、急いでいたので、良く確認せず、4Kモニターでは無く、解像度が低い物を注文してしまった、これは、後に気がついた・・・

まぁそれでも、17インチのモニターよりは随分マシなので、到着を待つ事にする。

4kだと、高精細過ぎて、小さい文字が見えにくい場合もあるとか、自分に言い聞かせた・・・


U2718Q のメインボードは、eBay などに出品されていて、4000円程度で購入可能な事が判った。
※送料を合わせると6000円程度となる。

注文したモニターは水曜には到着した。
今度のモニターは、解像度は以前の物より低いものの、IPS液晶で、コントラストが高いように感じる。
文字がシャープな感じ。

解析を続ける

解像度が低いモニターを注文した事もあって、かなり落胆、動揺していた。

それで、何とか「復帰」させようと必死になっていた、液晶と接続しているケーブルを外して、基板だけを詳細に観察していた。

電源ラインには、220uF、25Vの電解コンデンサがあり、最初それを疑い、外してみたが、問題無いようだった。

次に回路構成を眺めていた、18Vから、スイッチングレギュレータで、必要な電圧を生成しているようで、それが4系統ある。
1系統(多分、USBハブの5V生成)は、二段目にあり関係無さそうだ。

3系統では、入力側に積層セラミックコンデンサが2個並列に並んでいる。
これらコンデンサの両端の抵抗を計ると4オームで、電源ラインと接続している事が判る、これは、入力段のバイパスコンデンサであると思われる。

ルーペでこれらを中心に観察したが、問題無さそうだった。

とゆー事は、この3系統の、スイッチングレギュレータICのどれかが死んだのか?

しかし、どう見ても、パッケージは正常で、破壊している兆候は無い。
※問題なのは、QFP の場合、型番の判断が出来ない点だ、壊れていても交換する部品の番号が判らない、調べるにしても、非常に沢山の中から探すのは骨が折れる・・・
※TI 製のようだが、確信は持てない、2 系統は同じ 14 ピンの QFP だが、1 系統は、8 ピンのチップ部品のようだ、4.7uH のインダクタがある。


一般的に、意外と IC は頑丈で、設計に問題が無く、熱的に安全なら死ぬ事は少ないと思われる。
それに、過電流保護などがしっかりしているので、破壊する事は少ないものと思われる。

それより、コンデンサなどの、部品の劣化が多く、大抵の故障は、それが原因だと、修理動画で、学習していた。

原因見つかる

電源の抵抗は 4 オームなので、電源は過電流で、保護回路が働き、0V となる。

それなら、外部に実験用電源を接続して、徐々に電圧を上げて、ある程度電流を流せば、壊れている部品が発熱するのでは無いかと考えた。


その前にもう一度、基板を観察、今度はスイッチングレギュレーター部の周辺だけを集中して観察していた。

すると、斜めからルーペで観察していたら、積層セラミックのバイパスコンデンサの横が僅かに割れて、クラックが入っているように見えた。
※隣に同じコンデンサがあり、隙間が狭く、見えずらい。

早速、ハンダステーションの電源を入れ、温度を最大にして、ハンダを大量に溶かして、コンデンサを外してみた。
※電源ラインはパターンが広く、熱が逃げるので、容量の大きいハンダコテじゃないとハンダが溶けない。

外して、電源の抵抗を計ると、ショートが解消している事が判った。
やはり、このコンデンサの劣化が原因のようだ、コンデンサ単体で抵抗を計るとやはり4オーム。

部品を調査

問題は、このコンデンサの容量だ、幸い、2個並列にあるので、正常の方も外して、容量を計ってみる。

どうやら、10uF のようだ、ただ、ここの電圧は 18V なので、25V 程度の耐圧は必要と思われる。

部品が手元に無いので、秋月に部品を注文した。
※昨日、打ち合わせで秋葉原まで出かけたのに、タイミングが悪すぎる・・・


今回はここまで。

RX72N Envision Kit での開発(その1)

Arduino を使わないという選択

世の中、ほぼ Arduino 一択という状況になってしまったと言っても過言では無いです。
自分が考えるに、良い面と、そうではない面があると思います。

「良い面」は、非常に簡単に言うと、「敷居を極限まで下げた」と言えるのかもしれません。
アプリケーションを作るのに必要な知識だけでマイコンを動かせます。


Arduino は易しいですが、マイコンを独自で動かす事も実はそんなに難しくありません。

実際、「独自」にマイコンを動かして、「main」関数まで来るには、色々と、行わなければならない事や知識が必要です。
Arduino では、これらの知識は「不要」と分類されており、アプリケーションを作るユーザーが考える必要はありません。
※これは、マイコンが違っても、Arduino 環境下では、同じように使う事が出来ます。

Arduino は一応 C++ ですが、元が、AVR と言う 8/16 ビットマイコンからスタートした為、最新の C++ コンパイラを利用できません。
世の中にある、スケッチは、この制限により、C++ とは言えない物が多く、互換性を考えて、今でも、古いスタイルでプログラミングをしています。

自分も昔は、C 言語が主流で、C++ はオマケ程度でしたが、PC でアプリケーションを作るプロジェクトで仕事をした時、C++ を勉強しなおしました。
そこから、数十年、今では、C++ 以外でプログラムを作る事が苦痛になっています。
※ C++ は非常に難しい部分があるので、独学では限界があります、良い師と、時間が必要ですが、最近は、「勉強会」も頻繁に行われており、「学ぶ」には、かなりハードルが下がりました。
また、最高のコンパイラもフリーで利用出来ます。


組み込みマイコンでも、C++ を積極的に使いたいので、国産で、高性能なマイコンを探しました。
ARMが嫌いな訳では無く、単純に、日本人なのに、「わざわざ外国のマイコンを使うのはおかしいだろう」という思いがありました。
昔から、日立は好きで、H8やSHを良く使っていました、しばらくしてルネサスに統合されました。
最近は、RXマイコンを推しているようです、RXマイコンは多分三菱由来のマイコンと思いますが、非常に優れた、マイコンである事が直ぐに判りました。
開発環境も、gcc をサポートしており、十分実用になる事が判りました。

そこから C++ を積極的に利用した組み込みマイコン用フレームワークを整備して、現在に至っています。
※このフレームワークは、いくつかのプロジェクトで利用しています、その関係もあり、ライセンスを MIT にしています。

開発環境の整備

ルネサス社の E2 Studio は、無料版に制限(128Kバイトまでしかバイナリーを作れない)があり、CC-RX コンパイラでは、C++11、C++14, C++17 などの C++ ソースをコンパイルする事が出来ない為、独自にビルドした gcc-6.4.0 を使います。
※ルネサス社は、独自に、gcc-4.8 ベースの開発環境も用意していますが、4.8 系では、C++14, C++17 をコンパイルする事が出来ない。

C++11, C++14, C++17 はそれぞれ、2011 年、2014 年、2017 年に C++ 標準化委員会が策定した仕様を網羅したバージョンです。
年度が更新する(3年毎)度に、より良い機能が使えるようになっており、わざわざ古い仕様の C++ を使う理由は無いと思います。
※ C++17 は 2017 年の仕様です、今は 2020 年なので、ある程度「枯れて」いると言えると思います。

RX72N Envision kit の内蔵 E2-Lite を使って、マイコン内蔵フラッシュプログラムを書き換えするには、Windows 環境が必須となります。

コマンドラインによる開発環境を著しく敬遠する人がいますが、「慣れ」の問題であり、GUI 環境を覚えるよりハードルは低いと思われます。

MSYS2 を利用しています。

gcc のビルドに関しては、hirakuni45 github RX、又は gcc、g++を使ったルネサスRXマイコン開発を参照の事。

Renesas Flash Programmer v3 をインストールしてください。

ソースコードの編集には、VSCode が便利です、馴染みのテキストエディターが無いのなら(あっても)インストールお勧め。
※設定や、使い方は、ぐぐって~

ソースコードの取得

関係フレームワークなど一式を、github からクローンします。
※「D:/Git/RX」にクローンしています。

W10.~ % cd /d/Git
W10./d/Git % git clone git://github.com/hirakuni45/RX.git

他に「boost」が必要です。

W10./d/Git % pacman -S mingw-w64-x86_64-boost

FIRST_sample

FIRST_sample ディレクトリ、RX72N に移動します。

W10./d/Git ~ % cd RX/FIRST_sample
W10./d/Git/RX/FIRST_sample % cd RX72N

ソースコードをビルドします。

W10./d/Git/RX/FIRST_sample/RX72N % make

W10./d/Git/RX/FIRST_sample/RX72N % ls
led_sample.elf  led_sample.lst  led_sample.map  led_sample.mot  Makefile  release

ビルドされた「led_sample.mot」ファイルを、Renesas Flash Programmer で、RX72N Envision kit に書き込みます。

RX72N Envision kit USR LED が 0.25 秒間隔で点滅する。

Flash Programmer v3 の設定

  • PC と RX72N Envision kit の「ECN1」をマイクロUSBで接続します。
  • 電流不足になる場合、外部にACアダプタを接続する必要があります。
  • SW1 の 2 番をOFFにします。
  • 新規プロジェクトを作成し、RX72x を選択します。

  • E2 emulator Lite を選択
  • FINE を選択
  • 1,500,000 bps を選択

  • 供給しない を選択

  • リセット端子をHi-Z を選択

  • 接続出来たら、先ほどビルドしたファイルを選択して、書き込みます。

ソースコードを眺める

ソースコードは、複数のRXマイコン用に実装されており、「SIG_RX72N」が機種依存部分となっています。

#include "common/renesas.hpp"

namespace {

/// ベースクリスタルの定義
/// LED 接続ポートの定義
#if defined(SIG_RX71M)
    typedef device::system_io<12'000'000> SYSTEM_IO;
    typedef device::PORT<device::PORT0, device::bitpos::B7> LED;
#elif defined(SIG_RX72M)
    typedef device::system_io<12'000'000> SYSTEM_IO;
    typedef device::PORT<device::PORT0, device::bitpos::B7> LED;
#elif defined(SIG_RX72N)
    typedef device::system_io<16'000'000> SYSTEM_IO;
    typedef device::PORT<device::PORT4, device::bitpos::B0> LED;
#elif defined(SIG_RX64M)
    typedef device::system_io<12'000'000> SYSTEM_IO;
    typedef device::PORT<device::PORT0, device::bitpos::B7> LED;
#elif defined(SIG_RX65N)
    typedef device::system_io<12'000'000> SYSTEM_IO;
    typedef device::PORT<device::PORT7, device::bitpos::B0> LED;
#elif defined(SIG_RX63T)
    typedef device::system_io<12'000'000> SYSTEM_IO;
    typedef device::PORT<device::PORTB, device::bitpos::B7> LED;
#elif defined(SIG_RX24T)
    typedef device::system_io<10'000'000, 80'000'000> SYSTEM_IO;
    typedef device::PORT<device::PORT0, device::bitpos::B0> LED;
#elif defined(SIG_RX66T)
    typedef device::system_io<10'000'000, 160'000'000> SYSTEM_IO;
    typedef device::PORT<device::PORT0, device::bitpos::B0> LED;
#elif defined(SIG_RX72T)
    typedef device::system_io<8'000'000, 192'000'000> SYSTEM_IO;
    typedef device::PORT<device::PORT0, device::bitpos::B1> LED;
#endif
}

int main(int argc, char** argv);

int main(int argc, char** argv)
{
    SYSTEM_IO::setup_system_clock();

    LED::OUTPUT();  // LED ポートを出力に設定

    while(1) {
        utils::delay::milli_second(250);
        LED::P = 0;
        utils::delay::milli_second(250);
        LED::P = 1;
    }
}

RX マイコンは、内部にクロックジェネレータがあり、起動した場合には、内部の発信器で、最低限の状態で起動します。
そこで、RX72N の動作を最高性能に切り替える為、フレームワークの助けを借ります。

    SYSTEM_IO::setup_system_clock();

この API を呼ぶ事で、RX72N は最大の 240MHz で動作します。

「SYSTEM_IO」は、以下のように定義されており、外部 16MHz のクリスタルを接続している設定です。

    typedef device::system_io<16'000'000> SYSTEM_IO;

240MHz の指定は、Makefile でされており、ソースをコンパイルする時に、定数を指定しています。
※「F_ICLK」の値

USER_DEFS   =   SIG_RX72N \
                F_ICLK=240000000 \
                F_PCLKA=120000000 F_PCLKB=60000000 F_PCLKC=60000000 F_PCLKD=60000000 \
                F_FCLK=60000000 F_BCLK=120000000

※これらの定数を使って、内部で、クロックジェネレータの設定を自動で行います。
※詳しくは、system_io.hppを参照の事。

LED の定義では、PORT テンプレートクラスにより、1ビットのポートとしています。
※この場合、PORT4 の B0 で、ボード上のユーザーLEDに接続されています。

    typedef device::PORT<device::PORT4, device::bitpos::B0> LED;

LED ポートを出力に指定します。

    LED::OUTPUT();  // LED ポートを出力に設定

LED ポートに「0」、「1」を送る。

        LED::P = 0;
...
        LED::P = 1;

0.25 秒の間隔を作るのはソフトウェアータイマーによるものです。(あまり正確ではありません)
※250ミリ秒

    utils::delay::milli_second(250);

このように、非常に簡単にオリジナルプログラムを走らせる事が出来ます。


次回、SCI を利用したプログラムを解説する予定です。

Visual Studio Code を使う為の設定

自分は、マルチプラットホームにこだわりがあり、色々な異なった環境でも同じような操作性を提供できる事に注目している。

Visual Studio Code は、マイクロソフトのオープンソースによるもので、アプリケーションとしてはテキストエディターだが、単なる文書を書くだけではない、色々な拡張機能を追加でき、カスタマイズ出来る点で大きな広がりがある。
拡張機能は、emacs が先人でもあるが、emacs がスタートした時代は古く、VSC は最近の「流行」を取り入れて斬新な物になっている、emacs を現代風に作り直したアプリケーションとも言えると思う。
※emacs は Lisp だが、VSCは Json なので、より多くの人に受け入れやすい。

「創作活動のほとんどは、文書を作る動作が起点になっている。」と言う事実に改めて気がつく。

既に多くの人が、VSC を利用した拡張機能をリリースしており、自分で新規に作らなくても、インストールして利用する事が出来る。
また、VSC の設定方法や Tips など豊富にある、ただ、目的の機能を実現する方法は複数(無限)あり、VSC のバージョンとも関連するので、シンプルな方法を選んで取り込む必要がある。

自分が VSC で感激した点:
・拡張機能が豊富で、検索してインストールする事がコンビニエンス。
・Git と連携していて、git で行う操作を標準で色々行える、git 用フロントエンドアプリを使うより強力で判りやすく便利かもしれない。
・Markdown 形式を標準でサポートしており、プレビューしながら記述出来る。
※拡張機能を入れると PDF 化する事も出来る。
・Terminal 機能があり、MSYS2 の bash などを呼び出して使う事が出来る。
・C++ では非常に有能なインテリセンスが使える。
※インクルードパスの設定が重要
・プラットホーム毎の「固有」設定が出来る。
・比較的軽い。

それでも、小躍りする前に事前の調査が重要、「道具」類は、良さそうと思って使ってみても、細かいとこで気に入らない事も多い。
少し使ってみて、「何だコレ!」って思った事もあったけど、やはり「短所」より「長所」が勝っており、将来性を考えたら、コレを使わない理由が無い事に気がつく。

今まで emacs を中心に使ってきた、ただ、積極的に Lisp を使う気になれなくて、ほぼコードを書くだけで使っていた。
※知り合いは、自分で Lisp を書いて、自分の欲しい環境を色々実装している。
それを横目で観ていて、自分もやってみたいと思っていたが、もう少しハードルを下げた方法は無いのかとも思っていた。

最近の VSC では、「ワークスペース」と言う概念を使う事ができる点で、異なった環境を柔軟に切り替える事が出来る。
※以前は、フォルダーのルートを指定するシンプルな物だったが、それを少し拡張して、複数フォルダーに関連するファイル郡を一括して扱う事が出来るようになった。
「ワークスペース」では、設定が書かれた専用ファイルを開く事から始めるので、固有の設定を取り込む事が出来る。

まずインストール。
MSYS2 は現状でも、ツールの中心なので、インストールする、詳しい方法は、https://github.com/hirakuni45/RX を参照の事。
※MSYS2 は MinGW とは異なったアプリケーションなので、必ずMSYS2 を使うように。

・Terminal で MSYS2 の bash が起動出来るようにする設定、「settings.json」を編集して、以下のように追加しておく。
※「settings.json」の直接編集の正しい方法は「ぐぐって」もらうとして、自分の場合は、
「設定」などで、「settings.json で編集」などのリンクがあるので、それをクリックして編集している。
※キーワードを入れると候補が表示されるので判りやすい。

{
    "git.ignoreLegacyWarning": true,
    "git.autoRepositoryDetection": "subFolders",
    "C_Cpp.default.cppStandard": "c++14",
    "C_Cpp.default.cStandard": "c99",
    "files.autoSave": "afterDelay",
    "C_Cpp.default.intelliSenseMode": "gcc-x64",
    "C_Cpp.intelliSenseEngineFallback": "Disabled",
    // MSYS2 bash のパスと、起動設定
    "terminal.integrated.shell.windows": "C:\\msys64\\usr\\bin\\bash.exe",
    "terminal.integrated.env.windows": {
        "MSYSTEM": "MINGW64",
        "CHERE_INVOKING": "1"
    },
    "terminal.integrated.shellArgs.windows": [
        "--login"
    ],
    "terminal.integrated.cursorStyle": "line",
    "editor.renderWhitespace": "all"
}

※必要な部分のみコピーする場合は、「,」に注意

・拡張機能を入れよう~
※「拡張機能」ボタンを押して、検索ボックスでキーワードを入れれば、候補がリストされ、簡単にインストール出来る。

(1) C/C++ (Microsoft)
※自分は、マイクロソフトの物を入れているが、検索すると複数の物が見つかるので、自分の嗜好に合った物を使えば良いだろう。
※現段階で、gcc などでインテリセンスを機能させる設定が判っていない。

(2) Emacs Friendly Keymap
※とりあえず、キーバインドを Emacs 風にしている、vi や他のエディター用もあるし、自分でキーバインドを設定する事も出来る。
※VSCでは、「ESC」キーは別の意味で使われており、一般的な Emacs のメタキーとして利用するには反故が多いようだ。
なので、「M-v」は「ALT+v」として機能する、今まで「ESC」を使ってきたが、矯正する必要がありそうだ・・・
まぁ確かに、ESC を押してから v を押すより、ALT+v の方が利便性が高い。

(3) Japanese Language Pack for VS Code (Microsoft)
英語のメニューでも、そんなに困らないが、日本語の対応は流石に本家だけあって良く出来ている


最後はインテリセンスの設定だが、MSYS2 上の gcc g++、clang などで運用するには、もう少し調査が必要だと思う。

思いつくインクルードパスを設定しても、思ったように、インテリセンスが機能しない・・・

色々調べたが、何故思ったように機能しないかも不明で、WEBにある「こうすればおけー」と言った情報を見て、そのように設定してみたが、やはり駄目・・

何か特殊な設定をするのか、別の拡張機能を入れるのか、謎である・・・

M705マウスの修理

最近、どうもボタンの調子が悪い、いわゆる「チャタリング」を起こす感じで、具合が
悪い。

このマウス、保障期間は3年と長いのだが、保障期間は過ぎている。
かと言って、買いなおすのももったいない。

ネットで調べると、同じような症状に悩んでいる人も多いようで、スイッチに使ってい
るマイクロスイッチを単体で入手する事が出来るので、自分も修理する事にした。

分解する場合に、この+ドライバーが、ピッタリだった。

ある程度値段のするマウスは、分解する事を前提に作られているためか、比較的容易に
分解できる構造になっている。

(1)まず、5箇所のネジを外して、上ケースを分離する、側面にあるスイッチ用のコ
ネクターを抜く(そこそこ硬いので注意)
※パッドの下に2本隠れているので、パッドを剥がす(両面テープで貼ってある)

(2)スクロールホイールを固定してあるピンを抜く。

(3)スクロールホイールを外して、ネジを4箇所外すと基板が取れる。
※電源コネクターを抜く(そこそこ硬いので注意)
※スクロールホイールボタン用の小さいバネがあるので、無くさないように!

(4)問題のスイッチを取り除く。

※十分溶かして、吸引機で吸い取る、ピンを左右に揺らした感触で、フリーになってい
るか、まだハンダが残っているか判断できる。
※サーマルリリーフがあってもパターンの面積が広いと、熱が拡散されて、ハンダが十
分に溶けないので、大きな容量のコテが必要。(自分は、アンテックスの60Wを使っ
た)
※80Wの温度調整機能付のコテでは、最大温度でもハンダがうまく溶けなかった。

(5)新品のスイッチを取り付けて完了。
・購入したスイッチと、古いスイッチ

・GNDはサーマルリリーフになっているので、コテの熱量が足りないとハンダ付けしにくい。

・右ボタン、左ボタンで向きが違うので注意

(6)各部品を元に戻して終了。

当たり前だが、チャタリングも収まって、調子が戻った~

ASUS UX32VD にも Ubuntu を入れてみる

前回のブログでHPのミニノートにUbuntuをインストールして、
気を良くしたのだが、いかんせん、あまりに反応が遅くて、辛い・・・

最近は、モバイル環境はMac-Bookばかりで、Windowsの
ノートをあまり使わなくなったので、UX32VDにもインストールし
てみた。
一応HDD仕様なので、それを外して、128GBのSSDに交換して
それにインストールしてみた。
※128GBのSSDはOrangePiに使う予定で買っておいたも
のだった・・

メモリーは4GBなので、64ビット版をインストールする。

ubuntu-ja-16.04-desktop-amd64.iso

前回の失敗から、最初から、USBインサーネットを接続し、インストー
ル中のアップデートも行うようにし、全てのソフトがインストールできる
ようにして行った。
順調に進み、小一時間でインストール出来た。

WiFiも認識し、何の問題も無く、遅さも感じない。
ブラウザも、小気味良く動作する。

img_0843s

SSDのせいなのか、起動も終了も極めて速い!

HP mini 1000 に Ubuntu をインストールする

すっかり忘れていたのだけど、HP mini 1000 と言うノートPCがあった・・
このPCにはWindowsXPがインストールされている。
・Atom N270 1.6GHz
・2GBメインメモリー(アップグレードしてある!通常だと1GB)
・60GBHDD
・WindowsXP
久しぶりに掘り起こして、電源を入れた(ちゃんとバッテリーパックを外してあった)
ら、ちゃんと起動した。

そこで、このノートにLinuxをインストールする事にした。(XPは捨てる!)

まず、どのディストリビューションを選ぶか・・・
最近、OS-XとWindows7ばかりで、すっかりご無沙汰で、どれがホットなの
かまるで分からない・・
とりあえず、無難な「Ubuntu」の日本語バージョンを入れる事にした。
※32ビット版だ

ubuntu-ja-14.04-desktop-i386.iso

・まずisoイメージをダウンロードして、DVDに書き込む。
・USB接続ドライブを繋げて、DVDからブート。
※N270 1.6GHzはかなり遅いだろうなと思ったが、まあ我慢できる。
・インストール(この段階ではネットワークを認識していない)
・起動して、判る範囲で色々設定。
※あまり、この環境を使った事が無いので、使い方が良く判らない。
※WiFiが認識しないが、その他は、ほぼ自動認識しているようだ。
・USB接続インサーネットを接続したら、自動で認識したので、アップデートする。

img_0842s
※ソフトウェアーアップデートは、かなり時間を要する・・・

途中で、インストーラーが固まり、再起動したら、GUIが動かなくなった・・・

結局、最初からインストールをやり直す事に・・・

初めての環境は、インストールをやり直す事はよくあるので、まぁ気にしない~
※ただ、このマシン、流石に遅くて、かなり時間がかかる・・・

今度は、最初からUSBインサーネットも接続して、インストールの段階で、アップ
デートを併用するようにし、「オープンソース以外のソフト・インストール」もチェック
して、行った。

かなり時間がかかったが、一応動くようになった。

色々触ってみると、最新版はかなり完成度が高く、普通に使える事が判った。

ただ、やはり、N270は遅い・・・