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

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

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-05-16 11:56:09

2

主题

186

回帖

1058

积分

金牌会员

积分
1058
发表于 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      
回复 支持 反对

使用道具 举报 送花

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

2

主题

15

回帖

56

积分

注册会员

积分
56
发表于 2024-8-21 13:57:51 | 显示全部楼层
编译选的是STC32G8K64。不过应该和MCU没有关系。看看zmemcpy()函数的汇编,就能看出C251编译器有问题
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:392
  • 最近打卡:2025-06-13 09:05:42
已绑定手机

29

主题

306

回帖

670

积分

高级会员

积分
670
发表于 2024-8-21 14:48:46 | 显示全部楼层
jy_z*** 发表于 2024-8-21 13:57
编译选的是STC32G8K64。不过应该和MCU没有关系。看看zmemcpy()函数的汇编,就能看出C251编译器有问题 ...

仿真没问题啊
22.png
1.png
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:392
  • 最近打卡:2025-06-13 09:05:42
已绑定手机

29

主题

306

回帖

670

积分

高级会员

积分
670
发表于 2024-8-21 14:54:02 | 显示全部楼层

没问题
3.png
回复 支持 反对

使用道具 举报 送花

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

2

主题

186

回帖

1058

积分

金牌会员

积分
1058
发表于 2024-8-21 16:12:16 | 显示全部楼层
jy_z*** 发表于 2024-8-21 13:57
编译选的是STC32G8K64。不过应该和MCU没有关系。看看zmemcpy()函数的汇编,就能看出C251编译器有问题 ...

反汇编中看出C251编译器的什么问题了
回复 支持 反对

使用道具 举报 送花

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

2

主题

15

回帖

56

积分

注册会员

积分
56
发表于 2024-8-21 17:25:37 | 显示全部楼层
D:\1.png
回复 支持 反对

使用道具 举报 送花

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

2

主题

15

回帖

56

积分

注册会员

积分
56
发表于 2024-8-21 17:34:30 | 显示全部楼层
我用的memory模式:large
         code模式:large
1.png
回复 支持 反对

使用道具 举报 送花

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

2

主题

15

回帖

56

积分

注册会员

积分
56
发表于 2024-8-21 17:53:37 | 显示全部楼层
会不会是memory在large模式下,C251编译器在第3个参数可以传递数据,但是不能参与计算更新!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:444
  • 最近打卡:2025-06-16 09:26:42
已绑定手机

39

主题

2059

回帖

7070

积分

论坛元老

积分
7070
发表于 2024-8-21 18:05:04 | 显示全部楼层
我用你提供的程序通过串口打印,输出数据都是正常的。
例程参考附件。
截图202408211803445803.jpg

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

16.78 KB, 下载次数: 54

回复 支持 反对

使用道具 举报 送花

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

2

主题

15

回帖

56

积分

注册会员

积分
56
发表于 2024-8-22 11:29:13 | 显示全部楼层
你使用memory的large模式编译的吗?你看看我贴出的zmemcopy函数的汇编,这个函数的循环是出不来的。C251编译器产生的汇编是有问题的。这应该是C251的一个bug
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-17 03:27 , Processed in 0.165812 second(s), 105 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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