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区