Hatena::ブログ(Diary)

滴了庵日録 このページをアンテナに追加 RSSフィード

2017/10/19(Thu)

CubeMX環境でprintfを使う

STM32マイコンのCubeMX環境(HAL Driver使用)でprintfを使ってUARTに文字列を出力したい場合、下記のようなputchar関数を実装すればよい。この例では標準出力をUART2に出力している。もちろん、あらかじめCubeMXで対応するUARTの設定をおこなって初期化コードを生成しておくこと。

ちなみに、Nucleo-64ボードではUART2がST-LINKチップに接続されており、ST-LINKを経由してPCの仮想COMポートに接続できる。

// 標準出力をUART2へ
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif
PUTCHAR_PROTOTYPE
{
  HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 1, 0xFFFF);
  return ch;
}

2017/10/17(Tue)

IARのプロジェクトのバージョン管理メモ

IAR Embedded Workbenchのプロジェクトでバージョン管理から除外するファイルは、以下の通り。(たぶん)

除外すべきファイル

  • EWARM/プロジェクト.dep
  • EWARM/settings/
  • EWARM/プロジェクト/Obj/

除外するかどうかはお好みで(最終生成物)

  • EWARM/プロジェクト/List/プロジェクト.map
  • EWARM/プロジェクト/Exe/プロジェクト.out
  • EWARM/プロジェクト/Exe/プロジェクト.sim

2017/10/10(Tue)

ぼくのボスはお釈迦さま

つらつらと思うことを書いてみる。長らく社会人やってて、現代語で文章を書くことにもずいぶん慣れたけれど、いまだに魂の言葉は漢文体になっちゃうね。


吾人、年少より俗を厭ふるの性有り。長じて洛陽に在ること四年、濃州に赴くこと三年、河州の塵網に囚はるること二年。三十にして終ひに和州の故林に帰る。是れ古詩に園田の居に帰ると謂へるが如し。俗に適はざるの骨を養ひ、辺土の市中に隠れて烙鉄を振るひ錫鉛を熱するの趣は、偏へに宗を求め応を現ずるにあり。既に名教を離れたる身なれば、王法の化には順はず。況んや賤商の化をや。大樹を去る者、何ぞ小木の陰に拘せん。古仏の曰く、白髪長髭是れ長老にあらず、梵志の胎より出でたるも亦た梵志にあらず、と。黄皓は欧拉公式の妙理を知らず、劉禅は傅里叶変換の幽玄に通ぜず。斯くの如き愚昧卑賎を敬するは是れ蒙昧の因、土人の習なり。白眼を以て応ふるに如くは無し。惟るに世に博学賢才多く日々に叡智の精華開く。此れを追ふは悦楽なるも、浅才の病骨、日暮れて途遠きが如し。豈に小人凡夫に意を用ゐるの暇有らんや。沙門は無道の君侯に臣たらず。唯だ微電脳に程序の功徳を成就して些少の布施を受くるのみ。吾人は本より古仏如来の臣、亜理士多徳の末弟なり。


【セルフ現代語訳】

ぼくは子供のころから世俗を厭う性格だった。大人になって京都で4年暮らし、岐阜に赴任して3年、大阪の塵にまみれた網に囚われて2年、30歳のときについに故郷の奈良に帰って来た。これは古い陶淵明の詩に言うところの「園田の居に帰る」のようなものである。世俗に不適合な気骨を養生し、田舎の町でひっそりとハンダごてを振るい、ハンダを温めて暮らしている趣旨は、ただ真理を求め応用を具現することにある。すでに世俗の名誉を離れた身であるから、世俗権力のロジックには馴染まないし、ましてやショボい金儲けのロジックに馴染むはずもない。大樹の陰を去った者が、どうして小さな木の陰に拘泥しようか。お釈迦さまの言葉にも、「頭髪が白くなった者を長老と呼ぶのではない」「バラモンの女の腹から生まれた者をバラモンと呼ぶのではない」とある。蜀漢を衰えさせた黄皓のような佞臣はオイラーの公式の妙理を知らず、2代目で国を亡ぼした劉禅のような暗君はフーリエ変換の幽玄には通じない。そのような愚かで卑しい人間を敬うのは無知蒙昧な未開人の因習である。白目を剥いて応じるより他ない。思うに、この世には博学で才能あふれる人たちがたくさんいて、日々すばらしい英知の結晶が生み出されている。それを追いかけるのは心楽しいことだが、浅学非才の病身であるぼくには「日暮れて道遠し」の感がある。どうして程度の低いくだらない者たちのことに意を配るヒマがあるだろうか。求道者は愚かな主君の家来にはならない。だたマイコンプログラムの功徳を積んで、わずかなお布施を受け取っているだけである。ぼくはもともとお釈迦さまの家来であり、アリストテレスの弟子なのだ。

写真

2017/10/08(Sun)

ホーザンのパーツケース&ダイソーのジョイントA4ラック

ホーザンのパーツケースをいくつも積んでると出し入れに難儀しますが、ダイソーのジョイントA4ラック(1段100円)を積んで収納すると出し入れかんたん!

写真

2017/10/05(Thu)

Arduino互換ボードの条件コンパイル

がじぇっとるねさすコミュニティの記事よりメモメモ。

元記事

要点

  • ソースは .ino ではなく、ふつうに .cpp/.c と .h で
  • 機種ごとにヘッダのインクルードを条件コンパイル
    • ここで分かりやすい機種分けの定数を定義しておく
  • その他の機種依存部分も条件コンパイル
    • 先に定義した機種分けの定数を使う

ヘッダのインクルード部分

#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega32U4__)
    #if defined(ARDUINO) && ARDUINO >= 100
        #include <Arduino.h>
    #else
        #include <WProgram.h>
    #endif
    #define _ARDUINO_AVR_ 1
#elif defined(__SAM3X8E__)
    #include <Arduino.h>
    #define _ARDUINO_DUE_ 1
#elif defined(__RX__)
    #include <rxduino.h>
    #define _GR_SAKURA_ 1
#elif defined(__RL78__)
    #include <RLduino78.h>
    #define _GR_KURUMI_ 1
#else
    #error unknown target.
#endif

機種依存部分

#if _ARDUINO_AVR_
// Arduino 依存部分
 〜
#endif
#if _ARDUINO_DUE_
// Arduino DUE 依存部分
 〜
#endif
#if _GR_SAKURA_
// GR-SAKURA 依存部分
 〜
#endif
#if _GR_KURUMI_
// GR-KURUMI 依存部分
 〜
#endif