上野家のホームページ
ナーマル,マリン,ココ
[
新規
|
一覧
|
検索
|
最新
|
ヘルプ
]
開発/AVR/RAM上の変数
のソース
資料室
開発
/
AVR
/
RAM上の変数
のソース
[
差分
|
バックアップ
|
リロード
]
[ ]
差分
を表示
開発/AVR/RAM上の変数
へ行く。
WinAVRで,特に属性を付けずに変数を定義すると,AVRのRAM空間上に置かれる。~ AVRはハーバードアーキテクチャーなんで,プログラムがあるFlash ROMとRAMは別のバスにつながれている。 よく使われる整数データの型は,<inttypes.h>にまとめられている。~ <avr/io.h>をインクルードすると,<avr/sfr-defs.h>経由で,<inttypes.h>が自動的にインクルードされる。 定数は,"const"キーワードで定義する。 **<inttypes.h>による定義済みの型 [#fa3fccc4] |整数型名|変数サイズ|表現できる範囲| |int8_t|1|-128~127| |uint8_t|1|0~255| |int16_t|2|-32768~32767| |uint16_t|2|0~65535| |int32_t|4|-2147483648~2147483647| |uint32_t|4|0~4294967295| |int64_t|8|-9.22*10^18~9.22*10^18| |uint64_t|8|0~1.844*10^19| **宣言の仕方 [#m788e813] uint_8 val; // RAM上に変数を作成 val = 10; // 10にする **RAM上定数の宣言 [#n902c095] const uint8_t ver = 10; // RAM上に定数を設定 定数宣言は,その後値を代入などで変更できないことを除けば,初期値付き変数確保と違いはない。この定数値はFlash ROM上ではなく,RAM上に置かれる。RAM容量は少ないので,あまりこのような使い方はしない。 **レジスタ変数 [#sa43526d] register uint8_t regval asm("r2"); これで,AVRの汎用レジスタR2上に変数が確保される。 register uint16_t regval_w asm("r2"); このようにすると,R2:R3にワード変数を確保出来る。 **最適化 [#i17cfcf5] RAM上の変数を使う場合,AVRではまず,ld/ldd/lds命令で変数を汎用レジスタに持って来て,処理を行った後,st/std/sts命令でRAMに戻すというような動作をする。~ avrgccは最適化機能を持っているため,ある変数に対する処理が連続して行われる場合は,一度汎用レジスタに持ってきたデータをいちいちRAMに返さずに,レジスタ上に置いたまま操作して,最後にRAMに保存するようなコードを作れるようだ。~ ローカル変数は,スタックポインタ位置からld/stなどで参照できるため,lds/sts命令で参照されるグローバル変数より,多少コードサイズ,実行速度共に有利になるみたい。
開発/AVR/RAM上の変数 のバックアップソース(No. All)
現: 2020-12-26 (土) 15:07:35
yuji
Counter: 641, today: 1, yesterday: 0
Copyright©2008 Yuji Ueno All Rights Reserved.
ログイン
ユーザ名:
パスワード:
IDとパスワードを記憶
パスワード紛失
メインメニュー
ホーム
でぶlog
資料室
最新ページ一覧
全ページ一覧
ヘルプ
» 関連ページ
» Wikiソース
» 編集履歴
» バックアップ一覧
» 添付ファイル一覧
フォーラム
お問い合わせ