zxcv1973
发表于 2024-8-21 11:47:37
反汇编后的代码,编译完全没有问题:
6: void zmemcopy(unsigned char * destptr, unsigned char * sourptr, unsigned int len) //数据拷贝
7: {
0xFF0003 7F21 MOV DR8,DR4
0xFF0005 7F70 MOV DR28,DR0
0xFF0007 7ED70018 MOV WR26,0x0018
8: while(len>0)
9: {
0xFF000B 800C SJMP C:0x0019
10: *destptr=*sourptr;
0xFF000D 7E2B70 MOV R7,@DR8
0xFF0010 7A7B70 MOV @DR28,R7
11: destptr++;
0xFF0013 0BF4 INC WR30,#0x01
12: sourptr++;
0xFF0015 0B54 INC WR10,#0x01
13: len--;
0xFF0017 1BD4 DEC WR26,#0x01
14: }
0xFF0019 BED40000 CMP WR26,#0x0000
0xFF001D 38EE JG C:0x000D
15: }
0xFF001F 22 RET
jy_zhsq
发表于 2024-8-21 13:57:51
编译选的是STC32G8K64。不过应该和MCU没有关系。看看zmemcpy()函数的汇编,就能看出C251编译器有问题
小坤
发表于 2024-8-21 14:48:46
jy_zhsq 发表于 2024-8-21 13:57
编译选的是STC32G8K64。不过应该和MCU没有关系。看看zmemcpy()函数的汇编,就能看出C251编译器有问题 ...
仿真没问题啊
小坤
发表于 2024-8-21 14:54:02
小坤 发表于 2024-8-21 14:48
仿真没问题啊
没问题
zxcv1973
发表于 2024-8-21 16:12:16
jy_zhsq 发表于 2024-8-21 13:57
编译选的是STC32G8K64。不过应该和MCU没有关系。看看zmemcpy()函数的汇编,就能看出C251编译器有问题 ...
反汇编中看出C251编译器的什么问题了
jy_zhsq
发表于 2024-8-21 17:25:37
D:\1.png
jy_zhsq
发表于 2024-8-21 17:34:30
我用的memory模式:large
code模式:large
jy_zhsq
发表于 2024-8-21 17:53:37
会不会是memory在large模式下,C251编译器在第3个参数可以传递数据,但是不能参与计算更新!
乘风飞扬
发表于 2024-8-21 18:05:04
我用你提供的程序通过串口打印,输出数据都是正常的。
例程参考附件。
jy_zhsq
发表于 2024-8-22 11:29:13
你使用memory的large模式编译的吗?你看看我贴出的zmemcopy函数的汇编,这个函数的循环是出不来的。C251编译器产生的汇编是有问题的。这应该是C251的一个bug