標(biāo)題:
求助:avr編程 WinAVR程序移植到iar for avr 出現(xiàn)錯(cuò)誤
[打印本頁]
作者:
by64214
時(shí)間:
2021-3-21 11:46
標(biāo)題:
求助:avr編程 WinAVR程序移植到iar for avr 出現(xiàn)錯(cuò)誤
求助:avr編程 WinAVR程序移植到iar for avr
出現(xiàn)錯(cuò)誤
WinAVR
pgmspace.h
頭文件
函數(shù)
[url=]表情[/url]
#definepgm_read_byte(address_short) pgm_read_byte_near(address_short)
iar for avr
pgmspace.h
頭文件
函數(shù) 沒有
pgm_read_byte
函數(shù)
/* PGM_P points into program address space */ PGM_P指向程序地址空間
#ifdef __HAS_ELPM__
#define PGM_P const char __farflash *
#define PGM_VOID_P const void __farflash *
#else
#define PGM_P const char __flash *
#define PGM_VOID_P const void __flash *
#endif /* __HAS_ELPM__ */
#define __PRINTFPR_P _Pragma("__printf_args") \
_Pragma("library_default_requirements _formatted_write_P = unknown")
#define __SCANFPR_P _Pragma("__scanf_args") \
_Pragma("library_default_requirements _formatted_read_P = unknown")
/* Language extensions are necessary to cope with multiple address spaces */
必須使用語言擴(kuò)展才能應(yīng)對(duì)多個(gè)地址空間
#pragma language=save
#pragma language=extended
__PRINTFPR_P int printf_P(PGM_P __format,...);
__SCANFPR_P int scanf_P(PGM_P __format,...);
__PRINTFPR_P int sprintf_P(char *__s,PGM_P __format,...);
__SCANFPR_P int sscanf_P(const char *__s, PGM_P __format,...);
int puts_P(PGM_P __s);
PGM_P strerror_P(int errnum);
size_t strlen_P(PGM_P s);
__x_z int memcmp_P(const void *, PGM_VOID_P, size_t);
__x_z void *memcpy_P(void *, PGM_VOID_P, size_t);
__x_z char *strcat_P(char *, PGM_P);
__x_z int strcmp_P(const char *, PGM_P);
__x_z char *strcpy_P(char *, PGM_P);
__x_z char *strncat_P(char *, PGM_P, size_t);
__x_z int strncmp_P(const char *, PGM_P, size_t);
__x_z char *strncpy_P(char *, PGM_P, size_t);
__x_z int memcmp_G(const void *, const void __generic *, size_t);
__x_z void *memcpy_G(void *, const void __generic *, size_t);
__x_z char *strcat_G(char *, const char __generic *);
__x_z int strcmp_G(const char *, const char __generic *);
__x_z char *strcpy_G(char *, const char __generic *);
__z size_t strlen_G(const char __generic *);
__x_z char *strncat_G(char *, const char __generic *, size_t);
__x_z int strncmp_G(const char *, const char __generic *, size_t);
__x_z char *strncpy_G(char *, const char __generic *, size_t);
int puts_G(const char __generic *);
復(fù)制代碼
現(xiàn)在
WinAVR程序
移植到iar for avr
pgm_read_byte 出現(xiàn)錯(cuò)誤 請(qǐng)求指導(dǎo) 下面程序程序 應(yīng)該怎么改?
void Common_Show(INT8U P,INT8U L,INT8U W,char *r)
{
INT8U i;
//顯示在左半屏或左右半屏
if(L < 64)
{
CS1_1(); CS2_0();
LCD_Write_Command(LCD_PAGE+P);
LCD_Write_Command(LCD_COL+L);
//全部顯示在左半屏
if(L + W < 64)
{
for(i=0; i<W; i++) LCD_Write_Data(<b>pgm_read_byte</b>(r+i));
}
//如果越界則跨越左右半屏顯示
else
{
//左半屏顯示
for(i=0; i<64-L; i++) LCD_Write_Data(<b>pgm_read_byte</b>(r+i));
//右半屏顯示
CS1_0(); CS2_1();
LCD_Write_Command(LCD_PAGE+P);
LCD_Write_Command(LCD_COL);
for(i=64-L; i<W; i++) LCD_Write_Data(<b>pgm_read_byte</b>(r+i));
}
}
//全部顯示在右半屏
else
{
CS1_0(); CS2_1();
LCD_Write_Command(LCD_PAGE+P);
LCD_Write_Command(LCD_COL+L-64);
for(i=0; i<W; i++) LCD_Write_Data(<b>pgm_read_byte</b>(r+i));
}
}
復(fù)制代碼
作者:
KongQuan
時(shí)間:
2021-3-21 13:23
試試自己定義替換
#definepgm_read_byte(address_short) *(const char __flash * ( address_short))
作者:
by64214
時(shí)間:
2021-3-21 14:59
謝謝指導(dǎo)!
#define pgm_read_byte(address_short) *(const char __flash * ( address_short))
編譯 出現(xiàn) Error[Pe018]: expected a ")" Error[Pe029]: expected an expression
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1