STM32

CMSISに従った変数宣言

通常CMSIS
-signedlong-int32_t
-signedshort-int16_t
-signedchar-int8_t
-signedlongconstconst int32_t
-signedshortconstconst int16_t
-signedcharconstconst int8_t
Volatilesignedlong-__O int32_t
__IO int32_t
Volatilesignedshort-__O int16_t
__IO int16_t
Volatilesignedchar-__O int8_t
__IO int8_t
Volatilesignedlongconst__I int32_t
Volatilesignedshortconst__I int16_t
Volatilesignedcharconst__I int8_t
-unsignedlong-uint32_t
-unsignedshort-uint16_t
-unsignedchar-uint8_t
-unsignedlongconstconst uint32_t
-unsignedshortconstconst uint16_t
-unsignedcharconstconst uint8_t
Volatileunsignedlong-__O uint32_t
__IO uint32_t
Volatileunsignedshort-__O uint16_t
__IO uint16_t
Volatileunsignedchar-__O uint8_t
__IO uint8_t
Volatileunsignedlongconst__I uint32_t
Volatileunsignedshortconst__I uint16_t
Volatileunsignedcharconst__I uint8_t

記憶クラス

auto

オブジェクトに自動記憶クラスを与える。関数内でのみ使用可。

register

変数の使用頻度が高いことをコンパイラに知らせる。他はautoと同じ。

static

オブジェクトに静的な記憶クラスを与える。関数の中でも外でも使用可。
staticな局所変数は定義時に0で初期化される。普通の局所変数のように関数がコールされた時のみ存在するのではなく、永久に存在する。しかし、外部変数とは異なり、他の関数からは利用は出来ない。セットされた値は関数が終了しても保持され、再び関数がコールされた時には前回の値が残っていて、そのまま利用可能。

extern

オブジェクト用のメモリが他のどこかで定義されていることを示す。

typedef

型に別名を付ける。構文の便宜上記憶クラス指定子に分類されている。

コラム

stdint.h内で宣言されている

int8_t型とchar型はgccでは別の型と見なされるのでstdint.hの修正が必要な場合がある。

IOタイプ識別子

  • __I volatile const 読み込みのみ
  • __O volatile 書き込みのみ
  • __IO volatile 読み書き

const

constを付けるとROMに割り当てられる

Volatile

  • 黙っていると処理系で行われる最適化を防ぐ
    例えばプログラム上では変数を変化させる式が無いのにループしている文。プログラムは変化させないが、ハードウェアの状態で変数の内容が変わるのでチェックしているにも関わらず、このままでは最適化されてしまうのでそれを防ぐ。
  • 見掛け上冗長な場合の最適化を防ぐ
    プログラムとは関係のないマイコンのハードウェアがレジスタの値を書き換えてしまうので,毎回参照することに意味がある場合。

    あるデータを「だれが読み書きするか」を考えながらプログラムを作ることが大事。

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-03-30 (水) 23:48:25