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

C251又出bug了,有关数组下标减法计算 | 这段程序对于C251来说是错误的程序 ?

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:179
  • 最近打卡:2026-03-23 00:27:58

25

主题

231

回帖

2061

积分

金牌会员

积分
2061
发表于 2026-1-30 18:23:45 | 显示全部楼层
i用无符号类型可以避免此类问题。
但是本例中for (i = 15; i >= 0; i--)这个表达式不能用无符号数。

自己写C51程序可以只使用基础语法,避免搞那些花活。
如果移植别的平台上成熟的软件库就得注意了,很多时候得逐字逐句斟酌。
简单移植一下能跑起来了,但时不时的内存漏一下,程序崩一下。


回复

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:60
  • 最近打卡:2026-03-20 14:46:17

141

主题

1293

回帖

1万

积分

荣誉版主

积分
10468
发表于 2026-1-30 19:03:17 | 显示全部楼层
楼主的标题是“C251又出bug了,有关数组下标减法计算”:

(1)如果你的标题不是说C251出BUG,而是来论坛请教,那我会为你解惑答疑
(2)既然你自认为有水平指责C251,那么我只能对你说:你真无知!你真狂妄!
(3)自信不需要用狂妄来证明,无知不可耻,因为可以学习,而且是每个学者必经的阶段,但无知还狂妄就是井底之蛙了!
回复

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:60
  • 最近打卡:2026-03-20 14:46:17

141

主题

1293

回帖

1万

积分

荣誉版主

积分
10468
发表于 2026-1-30 19:05:17 | 显示全部楼层
Ayb_*** 发表于 2026-1-30 16:44
这是完整的汇编,应该没有问题的
; line 695: void write(u16 *dst, u16 dat)
        MOV      WR30,WR6

方法正确,看完整程序,不断章取义
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:179
  • 最近打卡:2026-03-23 00:27:58

25

主题

231

回帖

2061

积分

金牌会员

积分
2061
发表于 2026-1-30 22:14:42 | 显示全部楼层
杨*** 发表于 2026-1-30 19:03
楼主的标题是“C251又出bug了,有关数组下标减法计算”:

(1)如果你的标题不是说C251出BUG,而是来论坛 ...

抱歉,我实在想不出来有什么可以向你请教的,如果以后有的话再请教。

点评

你觉得你的水平比Keil这个大公司的C251编译器开发团队还高吗?  详情 回复 发表于 2026-1-30 22:45
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:179
  • 最近打卡:2026-03-23 00:27:58

25

主题

231

回帖

2061

积分

金牌会员

积分
2061
发表于 2026-1-30 22:26:01 | 显示全部楼层
本来是实际项目中遇到的问题,在别的平台运行良好的代码,移植到C251后出现未预料的结果。
看C源程序没毛病,调试手段又不足,不断改程序,一行一行分析汇编代码,耗费几天才弄清楚原因。
论坛分享这个问题,提醒用户注意,尽量用别的写法代替,这也不算多狂妄吧。

回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:179
  • 最近打卡:2026-03-23 00:27:58

25

主题

231

回帖

2061

积分

金牌会员

积分
2061
发表于 2026-1-30 22:44:00 | 显示全部楼层
简化后的完整演示代码

uint16_t xdata buf[100];
void write(uint16_t *dst, uint16_t dat)
{
    int i;       
       
    for (i = 15; i >= 0; i--)
    {
        dst[15 - i] = dat;
    }
}
void main()
{
        int i;       
        write(buf, 0x1234);       
        while(1);
}

本意是向buf[0]~buf[15]写入固定数据0x1234,实际写到其它地址了。
dst[15-15]不等于dst[0],dst[15-14]不等于dst[1],,
回复

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:60
  • 最近打卡:2026-03-20 14:46:17

141

主题

1293

回帖

1万

积分

荣誉版主

积分
10468
发表于 2026-1-30 22:45:24 | 显示全部楼层
hea*** 发表于 2026-1-30 22:14
抱歉,我实在想不出来有什么可以向你请教的,如果以后有的话再请教。

你觉得你的水平比Keil这个大公司的C251编译器开发团队还高吗?
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:179
  • 最近打卡:2026-03-23 00:27:58

25

主题

231

回帖

2061

积分

金牌会员

积分
2061
发表于 2026-1-30 22:47:12 | 显示全部楼层
杨*** 发表于 2026-1-30 22:45
你觉得你的水平比Keil这个大公司的C251编译器开发团队还高吗?

说话别这么阴阳怪气行吗?

点评

比起你的狂妄自大,这算很有礼貌了?你敢回答这个问题吗?你自己心里有底吗?  详情 回复 发表于 2026-1-30 22:54
回复

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:60
  • 最近打卡:2026-03-20 14:46:17

141

主题

1293

回帖

1万

积分

荣誉版主

积分
10468
发表于 2026-1-30 22:54:28 | 显示全部楼层
hea*** 发表于 2026-1-30 22:47
说话别这么阴阳怪气行吗?

比起你的狂妄自大,这算很有礼貌了!你敢回答这个问题吗?你自己心里有底吗?
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:179
  • 最近打卡:2026-03-23 00:27:58

25

主题

231

回帖

2061

积分

金牌会员

积分
2061
发表于 2026-1-31 00:47:26 | 显示全部楼层
杨*** 发表于 2026-1-30 22:54
比起你的狂妄自大,这算很有礼貌了!你敢回答这个问题吗?你自己心里有底吗? ...

哪个问题?我的技术水平和keil公司谁高吗?
这个问题有点幼稚,我一点没有与keil公司比较水平高低的意思,也毫无与你比较水平高低的意思。
keil是编译器开发公司,我只是用户之一。在软件行业,从来没有要求测试人员和用户一定要比研发人员水平高。我们同时作为研发人员,也从来没有这种想法。

当然,对于这个问题,我可以给你一个满意的答复,在编译器开发水平上,我的水平完全不能和keil比,可以说是0和100的区别。

点评

谢谢你给出参考程序。你既然知道你“在编译器开发水平上,我的水平完全不能和keil比,可以说是0和100的区别” 那么在你的这个具体问题上,你为什么开口就说C251存在BUG?有没有可能是你的程序错误呢?  详情 回复 发表于 2026-1-31 00:54
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-3-23 18:03 , Processed in 0.114917 second(s), 87 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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