Я портирую T6963-based LCD driver из AVR-GCC на компилятор микрочипа C18. Я видел макрос «pgm_read_byte»: кто-нибудь знает, как переносить этот макрос?Как перенести макрос pgm_read_byte (AVR-GCC) в компилятор Mircrochip C18?
UPDATE
От 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; \
}))
Спасибо за ваш ответ, проблема даже __LPM ((uint16_t) (address_short)) не существуют в C18 (он больше используется как 'pgm_read_byte'), поэтому они ищут решение или обходное решение. –
@ Максвелл. Это совсем другая проблема. У вас не возникли проблемы с переносом этого макроса, вы хотите портировать функцию, которая вызывается макросом. Если вы можете предоставить тело оригинальной функции __LPM вместе с вашей портированной версией, мы могли бы пройти несколько советов. – bta
Извините, может быть, вопрос был не совсем ясен (я был слишком сонным ночью). Я добавил тело _LPM в вопрос. Благодаря! –