找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1621|回复: 2
收起左侧

求助:avr编程 WinAVR程序移植到iar for avr 出现错误

[复制链接]
ID:44037 发表于 2021-3-21 11:46 | 显示全部楼层 |阅读模式
求助:avr编程  WinAVR程序移植到iar for avr 出现错误
   WinAVR  pgmspace.h 头文件  函数[url=]表情[/url]
        #definepgm_read_byte(address_short)   pgm_read_byte_near(address_short)
  iar for avr  pgmspace.h 头文件  函数   没有pgm_read_byte函数  
  1. /* PGM_P points into program address space */ PGM_P指向程序地址空间
  2. #ifdef __HAS_ELPM__
  3. #define PGM_P      const char __farflash *
  4. #define PGM_VOID_P const void __farflash *
  5. #else
  6. #define PGM_P      const char __flash *
  7. #define PGM_VOID_P const void __flash *
  8. #endif /* __HAS_ELPM__ */

  9. #define __PRINTFPR_P _Pragma("__printf_args")                             \
  10.   _Pragma("library_default_requirements _formatted_write_P = unknown")
  11. #define __SCANFPR_P  _Pragma("__scanf_args")                              \
  12.   _Pragma("library_default_requirements _formatted_read_P = unknown")

  13. /* Language extensions are necessary to cope with multiple address spaces */
  14. 必须使用语言扩展才能应对多个地址空间
  15. #pragma language=save
  16. #pragma language=extended
  17. __PRINTFPR_P int     printf_P(PGM_P __format,...);
  18. __SCANFPR_P  int     scanf_P(PGM_P __format,...);
  19. __PRINTFPR_P int     sprintf_P(char *__s,PGM_P __format,...);
  20. __SCANFPR_P  int     sscanf_P(const char *__s, PGM_P __format,...);

  21. int     puts_P(PGM_P __s);
  22. PGM_P   strerror_P(int errnum);
  23. size_t  strlen_P(PGM_P s);
  24. __x_z int memcmp_P(const void *, PGM_VOID_P, size_t);
  25. __x_z void *memcpy_P(void *, PGM_VOID_P, size_t);
  26. __x_z char *strcat_P(char *, PGM_P);
  27. __x_z int strcmp_P(const char *, PGM_P);
  28. __x_z char *strcpy_P(char *, PGM_P);
  29. __x_z char *strncat_P(char *, PGM_P, size_t);
  30. __x_z int strncmp_P(const char *, PGM_P, size_t);
  31. __x_z char *strncpy_P(char *, PGM_P, size_t);

  32. __x_z int memcmp_G(const void *, const void __generic *, size_t);
  33. __x_z void *memcpy_G(void *, const void __generic *, size_t);
  34. __x_z char *strcat_G(char *, const char __generic *);
  35. __x_z int strcmp_G(const char *, const char __generic *);
  36. __x_z char *strcpy_G(char *, const char __generic *);
  37. __z size_t strlen_G(const char __generic *);
  38. __x_z char *strncat_G(char *, const char __generic *, size_t);
  39. __x_z int strncmp_G(const char *, const char __generic *, size_t);
  40. __x_z char *strncpy_G(char *, const char __generic *, size_t);
  41.       int puts_G(const char __generic *);
复制代码

现在
WinAVR程序   移植到iar for avr  pgm_read_byte 出现错误   请求指导  下面程序程序  应该怎么改?
  1. void Common_Show(INT8U P,INT8U L,INT8U W,char *r)
  2. {
  3.     INT8U i;
  4.     //显示在左半屏或左右半屏
  5.     if(L < 64)
  6.     {
  7.         CS1_1(); CS2_0();
  8.         LCD_Write_Command(LCD_PAGE+P);
  9.         LCD_Write_Command(LCD_COL+L);
  10.         //全部显示在左半屏
  11.         if(L + W < 64)
  12.         {
  13.             for(i=0; i<W; i++) LCD_Write_Data(<b>pgm_read_byte</b>(r+i));
  14.         }
  15.         //如果越界则跨越左右半屏显示
  16.         else
  17.         {
  18.             //左半屏显示
  19.             for(i=0; i<64-L; i++) LCD_Write_Data(<b>pgm_read_byte</b>(r+i));
  20.             //右半屏显示
  21.             CS1_0(); CS2_1();
  22.             LCD_Write_Command(LCD_PAGE+P);
  23.             LCD_Write_Command(LCD_COL);
  24.             for(i=64-L; i<W; i++) LCD_Write_Data(<b>pgm_read_byte</b>(r+i));
  25.         }
  26.     }
  27.     //全部显示在右半屏
  28.     else
  29.     {
  30.         CS1_0(); CS2_1();
  31.         LCD_Write_Command(LCD_PAGE+P);
  32.         LCD_Write_Command(LCD_COL+L-64);
  33.         for(i=0; i<W; i++) LCD_Write_Data(<b>pgm_read_byte</b>(r+i));
  34.     }
  35. }
复制代码



回复

使用道具 举报

ID:822755 发表于 2021-3-21 13:23 | 显示全部楼层
试试自己定义替换
#definepgm_read_byte(address_short)   *(const char __flash * ( address_short))

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:44037 发表于 2021-3-21 14:59 | 显示全部楼层
谢谢指导!
#define pgm_read_byte(address_short)   *(const char __flash * ( address_short))
   编译  出现 Error[Pe018]: expected a ")"   Error[Pe029]: expected an expression
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表