找回密码
 立即注册
楼主: jy_zhsq

C251编译器问题:函数第3参数不能在函数内计算

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-05-04 18:55:47

2

主题

15

回帖

56

积分

注册会员

积分
56
发表于 2024-8-22 14:16:21 | 显示全部楼层
去掉zmemcopy()函数中的printf语句,编译器的memory模式改为large,编译优化级别改为7。问题就出现了,zmemcopy()函数出不了!

串口打印 - 程序执行结果2.rar

45.93 KB, 下载次数: 45

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-05-04 18:55:47

2

主题

15

回帖

56

积分

注册会员

积分
56
发表于 2024-8-22 14:18:30 | 显示全部楼层
和C251编译器的memory模式选择,编译优化选择,以及程序语句的编写都有关系。应该是一个bug吧
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-05-16 11:56:09

2

主题

186

回帖

1058

积分

金牌会员

积分
1058
发表于 2024-8-22 17:13:57 | 显示全部楼层
本帖最后由 zxcv1973 于 2024-8-22 17:22 编辑
jy_z*** 发表于 2024-8-22 11:29
你使用memory的large模式编译的吗?你看看我贴出的zmemcopy函数的汇编,这个函数的循环是出不来的。C251编 ...

建议memory模式不要用large,该模式下函数参数会分配在XDATA区中,而以前的251单片机片内RAM都是在EDATA区,XDATA区是给外部扩展用的,所以以前就几乎没人用large内存模式,用的人少就不容易反馈BUG,memory模式还是要用STC推荐的
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-05-04 18:55:47

2

主题

15

回帖

56

积分

注册会员

积分
56
发表于 2024-8-22 17:28:38 | 显示全部楼层
当程序跳转大于2K时,好像必须要用large模式编译
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-05-04 18:55:47

2

主题

15

回帖

56

积分

注册会员

积分
56
发表于 2024-8-22 17:34:36 | 显示全部楼层
memory large模式是指编译器默认用STC内置的8KRAM。当程序需要很大的RAM区域时,默认用large模式比较方便
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-05-16 11:56:09

2

主题

186

回帖

1058

积分

金牌会员

积分
1058
发表于 2024-8-23 18:04:21 | 显示全部楼层
jy_z*** 发表于 2024-8-22 17:28
当程序跳转大于2K时,好像必须要用large模式编译

memory模式和程序大小没关系
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-05-16 11:56:09

2

主题

186

回帖

1058

积分

金牌会员

积分
1058
发表于 2024-8-23 18:10:03 | 显示全部楼层
jy_z*** 发表于 2024-8-22 17:34
memory large模式是指编译器默认用STC内置的8KRAM。当程序需要很大的RAM区域时,默认用large模式比较方便 ...

memory large模式执行效率太低,函数参数传递和局部变量都放在XDATA区,251和51不一样,EDATA区已经足够大,memory最优模式就是STC推荐的XSmall模式,然后可通过XDATA关键字把一些变量定义在XDATA区
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-16 23:56 , Processed in 0.132883 second(s), 84 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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