c - 如何将 pgm_read_byte 宏 (AVR-GCC) 移植到 Mircrochip C18 编译器?

标签 c assembly embedded avr avr-gcc

我正在移植 T6963-based LCD driver从 AVR-GCC 到 microchip C18 编译器。我看到了宏“pgm_read_byte”:有人知道如何移植这个宏吗?

更新

来自here我可以看到宏的实现

#define   pgm_read_byte(address_short)
pgm_read_byte_near(address_short)
...
#define   pgm_read_byte_near(address_short)   __LPM((uint16_t)(address_short))
...
#define   __LPM(addr)                         __LPM_enhanced__(addr)
...
#define __LPM_enhanced__(addr)  \
(__extension__({                \
    uint16_t __addr16 = (uint16_t)(addr); \
    uint8_t __result;           \
    __asm__                     \
    (                           \
        "lpm %0, Z" "\n\t"      \
        : "=r" (__result)       \
        : "z" (__addr16)        \
    );                          \
    __result;                   \
}))

最佳答案

根据您发布的链接,宏定义为:

#define   pgm_read_byte(address_short)        pgm_read_byte_near(address_short)
#define   pgm_read_byte_near(address_short)   __LPM((uint16_t)(address_short))

这些宏应该是可移植的,没有任何问题,它们只是其他函数/宏的名称的别名。您具体遇到什么问题?到目前为止您尝试过什么,出了什么问题?

关于c - 如何将 pgm_read_byte 宏 (AVR-GCC) 移植到 Mircrochip C18 编译器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10989200/

相关文章:

c - 读入文本文件作为输入并生成输出文件的程序,其中所有原始行均按字母顺序排列

c++ - 为 'gdt_flush' 指定的存储类

c - gdb 不接受用户输入

language-agnostic - 移植和迁移在编程上有区别吗?

从 system() 更改为 exec(),它会加速我的代码吗?

使用 SPI 与 ADXL355 通信

c - EXC_BAD_ACCESS(代码=1,地址=0x0)

从内联汇编 VS2012 调用 C 函数 - 段错误?

linux - 简介 QT,QML 应用程序,在 Linux 系统上(达芬奇板)

c - 在C中将单个字符串分成两个不同的字符串