mbed SDK コーディングスタイル

このノートブックは、mbed SDK cording style の翻訳版です。

コーディングスタイル

このページでは mbed のコーディングスタイルについて記述します。我々のゴールは、この標準を mbed SDK 準拠として記載する事です(パートナーによって記述された 3rd パーティライブラリなどは除きます)。

mbed SDK のコードは、K&R スタイル(参考: http://en. wikipedia.org/wiki/Indent_style#K.26R_style))に従い、以下のコード例で示される少なくとも2つの例外があります。

adc.c

static const PinMap PinMap_ADC[] = {
    {PTC2, ADC0_SE4b, 0},
    {NC  , NC       , 0}
};

uint32_t adc_function(analogin_t *obj, uint32_t options)
{
    uint32_t instance = obj->adc >> ADC_INSTANCE_SHIFT;
    switch (options) {
        case 1:
            timeout = 6;
            break;
        default:
            timeout = 10;
            break;
    }

    while (!adc_hal_is_conversion_completed(instance, 0)) {
        if (timeout == 0) {
            break;
        } else {
            timeout--;
        }
    }

    if (obj->adc == ADC_CHANNEL0) {
        adc_measure_channel(instance);
        adc_stop_channel(instance);
    } else {
        error("channel not available");
    }

#if DEBUG
    for (uint32_t i = 0; i < 10; i++) {
        printf("Loop : %d", i);
    }
#endif
    return adc_hal_get_conversion_value(instance, 0);
}

ルール

  • インデント - 4 スペース, タブは使わないで下さい
  • 中括弧 - K&R, 関数のオープニングの中括弧は例外的に新規行に記述する
  • 1 TBS - if, else, while, for 等のステートメントの中括弧で指定する(K&R からのものは除く) 参考: http://en.wikipedia.org/wiki/Indent_style#Variant:_1TBS
  • ステートメントは1行とする
  • プリプロセッサマクロは新規行の先頭から開始し、中のコードは前述の例に従ってインデントを行う
  • switch ステートメント内の case は、インデントする(K&R からのものは除く)
  • if, while, for, switch ステートメントの後にスペースを挿入し、2項演算子と3項演算子も同様とする
  • 各行は最大で120文字程度にする
  • ポインタ '*' は、名前にアジャストする (analogin_t *obj)
  • 行末にスペースを残さない
  • 空行には、スペースを残さない
  • ファイルのデフォルトオプションは、Unix 形式のラインエンド
  • マクロには大文字を使用する
  • ファイルには、最後に空白行が必要

命名規則

クラス

  • 先頭は大文字で、個々のワードの先頭も大文字とする (AnalogIn, BusInOut).
  • メソッド名は小文字とし、異なったワードはアンダースコア(_)で区分される
  • プライベートメンバの先頭文字はアンダースコア(_)とする

ユーザー定義の型 (typedef)

  • 構造体 - サフィックス _t - ユーザー定義の型を表す
  • 列挙型 - 型名と変数名 - クラスと同じ命名規則 (例: MyNewEnum)

関数

  • 小文字で記述する(クラスのメソッド名と同様)
  • 異なったワードはアンダースコア(_)で区分される (wait_ms, read_u16)

analog.h

#define ADC_INSTANCE_SHIFT 8

class AnalogIn {
public:
    /** Create an AnalogIn, connected to the specified pin
     *
     * @param pin AnalogIn pin to connect to
     * @param name (optional) A string to identify the object
     */
    AnalogIn(PinName pin) {
        analogin_init(&_adc, pin);
    }

    /** Read the input voltage, represented as a float in the range [0.0, 1.0]
     *
     * @returns
     *    A floating-point value representing the current input voltage, measured as a percentage
     */
    uint32_t read() {
        return analogin_read(&_adc, operation);
    }

protected:
    analogin_t _adc;
};

typedef enum {
    ADC0_SE0 = (0 << ADC_INSTANCE_SHIFT) | 0,
} ADCName;

struct analogin_s {
    ADCName adc;
};

typedef struct analogin_s analogin_t;

Doxygen ドキュメント

全ての関数/メソッドは、ヘッダファイル内に doxygen javadoc を使用したドキュメントを含むことが出来ます。API ドキュメントの記述に関する詳細な情報は以下のリンクを参照して下さい。 https://mbed.org/handbook/API-Documentation

adc.h

#ifndef ADC_H
#define ADC_H

#ifdef __cplusplus
extern "C" {
#endif

/** ADC Measurement method
 *
 *  @param obj Pointer to the analogin object.
 *  @param options Options to be enabled by ADC peripheral.
 *
 *  @returns
 *    Measurement value on defined ADC channel.
 */
uint32_t adc_function(analogin_t *obj, uint32_t options)

#ifdef __cplusplus
}
#endif

#endif

ソースコードインデンター

mbed プロジェクトでは、AStyle (Artistic Style) ソースコードインデンターを使用してソースコードの自動整形を補助することが出来ます。全てのコーディングスタイルが正確に修正されないかもしれませんが、ほとんどの場合修正することが出来ます。 AStyle は、ここから ダウンロードできます。

公式な mbed SDK スタイルは、以下の AStyle スタイルを含みます(コマンドラインスイッチにより指定):

--style=kr --indent=spaces=4 --indent-switches

あなたのファイルを整形するには、以下のコマンドを実行します。$(FULL_CURRENT_PATH) の部分は、ソースファイルのパスに置き換えて下さい。

astyle.exe --style=kr --indent=spaces=4 --indent-switches $(FULL_CURRENT_PATH)


Please log in to post comments.