找回密码
 立即注册
查看: 194|回复: 16

C251编译器用的是C99语法吗?与C51不一样啊

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:195
  • 最近打卡:2025-06-02 08:23:59
已绑定手机

36

主题

175

回帖

1317

积分

金牌会员

积分
1317
发表于 2025-5-13 16:12:32 | 显示全部楼层 |阅读模式
一文件原来是STC8A工程,用C51编译无错误。改到STC32上来同样语句报错。 110.PNG 111.PNG 112.PNG

原来定义的缓冲区直接赋值0,可以正常编译。用C251编译器时要赋值数组。
8位程序---换个STC32G.h头文件,换个C251编译器就直接到STC32的高度了;
          想回到8位机,则换个STC8H.h头文件,换个C51编译器就回到8位机了.
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:32
  • 最近打卡:2025-05-27 17:06:33

23

主题

393

回帖

2455

积分

超级版主

积分
2455
发表于 2025-5-13 17:01:16 | 显示全部楼层
STC32G12K128 是32位的8051与STC8A8K64D4不是完全兼容的
电话:0513-55012946 QQ:2195591714  微信:  19952583740
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:455
  • 最近打卡:2025-06-03 09:00:43
已绑定手机

79

主题

5030

回帖

8874

积分

超级版主

DebugLab

积分
8874
发表于 2025-5-13 17:46:00 | 显示全部楼层
又看到声明时赋值的了
重要的事情说三遍
全局变量禁止在声明时赋值
全局变量禁止在声明时赋值
全局变量禁止在声明时赋值
赶紧去看新手必读
https://www.stcaimcu.com/thread-16535-1-1.html
包含startup.a51时,默认会初始化data(也是idata的低128字节)为0,xdata不操作为上电随机数;不包含startup.a51时,data和xdata为上电随机数
程序只能在函数内执行,全局变量禁止在声明时赋值,赋值的语句必须在函数内,函数外的非声明语句无效
数组可以在初始化时用memset函数全部清零(或其他初始化值)
养成好习惯,函数内的局部变量也不要声明时赋值,而且必须在函数开头声明
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:455
  • 最近打卡:2025-06-03 09:00:43
已绑定手机

79

主题

5030

回帖

8874

积分

超级版主

DebugLab

积分
8874
发表于 2025-5-13 17:47:59 | 显示全部楼层
xxx[48]=0;
这样是不规范的,等号前后数据类型和长度不匹配,不能前面是N个字节,后面是1个字节
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:551
  • 最近打卡:2025-06-03 07:49:59
已绑定手机

50

主题

1810

回帖

3066

积分

论坛元老

积分
3066
发表于 2025-5-13 20:54:28 | 显示全部楼层
stc32没有pdata区了啊

点评

谢谢指点。STC32一般情况下只有data,xdata可以用了,是不是这样啊  发表于 2025-5-14 08:49
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:195
  • 最近打卡:2025-06-02 08:23:59
已绑定手机

36

主题

175

回帖

1317

积分

金牌会员

积分
1317
发表于 2025-5-14 08:26:39 | 显示全部楼层
Debu*** 发表于 2025-5-13 17:46
又看到声明时赋值的了
重要的事情说三遍
全局变量禁止在声明时赋值

谢谢版主提示
8位程序---换个STC32G.h头文件,换个C251编译器就直接到STC32的高度了;
          想回到8位机,则换个STC8H.h头文件,换个C51编译器就回到8位机了.
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:455
  • 最近打卡:2025-06-03 08:55:16

33

主题

2419

回帖

5082

积分

论坛元老

积分
5082
发表于 2025-5-14 09:12:18 | 显示全部楼层
Debu*** 发表于 2025-5-13 17:46
又看到声明时赋值的了
重要的事情说三遍
全局变量禁止在声明时赋值

话说这个全局变量赋值这个,有什么依据么?C251 和 C51编译器的区别么?我翻了翻你的关于这个问题的论述,,只找到了一个模糊的可能会失效的描述,剩下的描述就都是禁止并没有提及原因。。
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:455
  • 最近打卡:2025-06-03 08:55:16

33

主题

2419

回帖

5082

积分

论坛元老

积分
5082
发表于 2025-5-14 09:14:24 | 显示全部楼层
Debu*** 发表于 2025-5-13 17:46
又看到声明时赋值的了
重要的事情说三遍
全局变量禁止在声明时赋值

截图202505140913342842.jpg ,,大概就是找到了一个这个描述,,,几乎没有解释出现这个问题的原因,,,所以可以继续补充一下么

点评

编译器的原因,这样操作值就不对,不要这样操作就可以了  详情 回复 发表于 2025-5-14 11:08
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:551
  • 最近打卡:2025-06-03 07:49:59
已绑定手机

50

主题

1810

回帖

3066

积分

论坛元老

积分
3066
发表于 2025-5-14 09:22:57 | 显示全部楼层
看看stc32的ram区
截图202505140922347798.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:455
  • 最近打卡:2025-06-03 09:00:43
已绑定手机

79

主题

5030

回帖

8874

积分

超级版主

DebugLab

积分
8874
发表于 2025-5-14 11:08:47 | 显示全部楼层
_奶*** 发表于 2025-5-14 09:14
,,大概就是找到了一个这个描述,,,几乎没有解释出现这个问题的原因,,,所以可以继续补充一下么

...

编译器的原因,这样操作值就不对,不要这样操作就可以了
DebugLab
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-3 09:08 , Processed in 0.153033 second(s), 119 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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