找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1400|回复: 1
打印 上一主题 下一主题
收起左侧

C语言如何把函数指针参数传到宏定义开辟的空间呢?

[复制链接]
跳转到指定楼层
楼主
ID:731155 发表于 2020-11-6 10:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如下,想用#else 替换,但这样编译不通过,请教怎么修改才能编译通过。
  1. typedef struct{
  2. uint8 Address;
  3. uint8 Top_data;
  4. uint8 Middle_data;
  5. uint8 Botton_data;
  6. }RAM_TAB;

  7. RAM_TAB *ram_ptr;

  8. #define RESEVE_ADDR (0x8fb2600)//使用RESEVE保留的内存

  9. typedef struct{
  10. uint8 Address;
  11. uint8 Top_data;
  12. uint8 Middle_data;
  13. uint8 Botton_data;
  14. }ram_tab_t;

  15. #define g_ram_tab_info ((ram_tab_t *)(RESEVE_ADDR))

  16. int WriteRam(uint8 data_length, RAM_TAB *ram_address)
  17. {
  18. uint8 i,

  19. #if 0
  20. ram_ptr = ram_address;
  21. #else
  22. g_ram_tab_info = ram_address;
  23. #endif

  24. for(i = 0; i < data_length; i++)
  25. {
  26. #if 0
  27. if(WriteReg(0x1d,&ram_ptr->Address,ADDR,2) != FALSE)
  28. return -1;
  29. if(WriteReg(0x10,&ram_ptr->Top_data,ADDR,2) != FALSE)
  30. return -1;
  31. if(WriteReg(0x11,&ram_ptr->Middle_data,ADDR,2) != FALSE)
  32. return -1;
  33. if(WriteReg(0x22,&ram_ptr->Botton_data,ADDR,2) != FALSE)
  34. return -1;
  35. ram_ptr++;
  36. #else
  37. if(WriteReg(0x1d,&g_ram_tab_info->Address,ADDR,2) != FALSE)
  38. return -1;
  39. if(WriteReg(0x10,&g_ram_tab_info->Top_data,ADDR,2) != FALSE)
  40. return -1;
  41. if(WriteReg(0x11,&g_ram_tab_info->Middle_data,ADDR,2) != FALSE)
  42. return -1;
  43. if(WriteReg(0x22,&g_ram_tab_info->Botton_data,ADDR,2) != FALSE)
  44. return -1;
  45. g_ram_tab_info++;
  46. #endif
  47. }

  48. return 0;
  49. }
复制代码



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:592183 发表于 2020-11-6 15:41 | 只看该作者
对于像STM32这种程序,你所定义的RESERVE_ADDR属于FLASH的地址范围,g_ram_tab_info代表的是一个FLASH地址,第28行g_ram_tab_info=ram_address是试图将FLASH的指改变,这是不允许的。


评分

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

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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