jy_zhsq 发表于 2024-8-22 14:16:21

去掉zmemcopy()函数中的printf语句,编译器的memory模式改为large,编译优化级别改为7。问题就出现了,zmemcopy()函数出不了!

jy_zhsq 发表于 2024-8-22 14:18:30

和C251编译器的memory模式选择,编译优化选择,以及程序语句的编写都有关系。应该是一个bug吧

zxcv1973 发表于 2024-8-22 17:13:57

本帖最后由 zxcv1973 于 2024-8-22 17:22 编辑

jy_zhsq 发表于 2024-8-22 11:29
你使用memory的large模式编译的吗?你看看我贴出的zmemcopy函数的汇编,这个函数的循环是出不来的。C251编 ...
建议memory模式不要用large,该模式下函数参数会分配在XDATA区中,而以前的251单片机片内RAM都是在EDATA区,XDATA区是给外部扩展用的,所以以前就几乎没人用large内存模式,用的人少就不容易反馈BUG,memory模式还是要用STC推荐的

jy_zhsq 发表于 2024-8-22 17:28:38

当程序跳转大于2K时,好像必须要用large模式编译

jy_zhsq 发表于 2024-8-22 17:34:36

memory large模式是指编译器默认用STC内置的8KRAM。当程序需要很大的RAM区域时,默认用large模式比较方便

zxcv1973 发表于 2024-8-23 18:04:21

jy_zhsq 发表于 2024-8-22 17:28
当程序跳转大于2K时,好像必须要用large模式编译

memory模式和程序大小没关系

zxcv1973 发表于 2024-8-23 18:10:03

jy_zhsq 发表于 2024-8-22 17:34
memory large模式是指编译器默认用STC内置的8KRAM。当程序需要很大的RAM区域时,默认用large模式比较方便 ...

memory large模式执行效率太低,函数参数传递和局部变量都放在XDATA区,251和51不一样,EDATA区已经足够大,memory最优模式就是STC推荐的XSmall模式,然后可通过XDATA关键字把一些变量定义在XDATA区
页: 1 2 [3]
查看完整版本: C251编译器问题:函数第3参数不能在函数内计算