Arduinoで遊ぶページ

Arduinoで遊んだ結果を残すページです。
garretlab
__LPM_word_enhanced__()

__LPM_word_enhanced__()

概要

__LPM_word_enhanced__()は、指定したアドレス(PROGMEM領域)に格納されているデータを2バイト読み取るためのアセンブラコードです。

ソースコード

__LPM_word_enhanced__()は、hardware/tools/avr/avr/include/avr/pgmspace.h に定義されています。以下に全ソースコードを示します。

#define __LPM_word_enhanced__(addr)         \
(__extension__({                            \
    uint16_t __addr16 = (uint16_t)(addr);   \
    uint16_t __result;                      \
    __asm__ __volatile__                    \
    (                                       \
        "lpm %A0, Z+"   "\n\t"              \
        "lpm %B0, Z"    "\n\t"              \
        : "=r" (__result), "=z" (__addr16)  \
        : "1" (__addr16)                    \
    );                                      \
    __result;                               \
}))

lpmは、PROGMEM領域のデータを1バイト読み出すための命令です。Load Program Memoryの略です。これを2回実行することで2バイトのデータを読み出します。addrにあるデータを__resultに代入して返却します。

バージョン

Arduino 1.8.5



メニューを表示するためにJavaScriptを有効にしてください。

Arduinoで遊ぶページ
Copyright © 2016 garretlab all rights reserved.
inserted by FC2 system