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
页: 1 [2] 3
查看完整版本: C251编译器问题:函数第3参数不能在函数内计算