OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2951|回复: 9

定义 参数 使用 const报错

[复制链接]

3

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2017-12-29
在线时间
14 小时
发表于 2018-1-25 21:00:25 | 显示全部楼层 |阅读模式
1金钱
  使用const定义报错..\..\User\source\uart1.c(125): error:  #144: a value of type "const unsigned char *" cannot be used to initialize an entity of type "unsigned char *"

但是我在51 中就能用。还有c++ 也能用。在MDK就不能用。



456789.png

最佳答案

查看完整内容[请看2#楼]

因为MDK编译时对数据类型的检查更加严格了。使用强制类型转换可以暂时地避免报错。 但是,原则上,我们不应该将不同的数据类型直接进行转换。修改方法: [mw_shl_code=c,true]unsigned char *DatTemp = (unsigned char *char) Dat;[/mw_shl_code]
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

462

帖子

0

精华

高级会员

Rank: 4

积分
906
金钱
906
注册时间
2017-12-15
在线时间
111 小时
发表于 2018-1-25 21:00:26 | 显示全部楼层
本帖最后由 a496298685 于 2018-1-25 21:18 编辑

因为MDK编译时对数据类型的检查更加严格了。使用强制类型转换可以暂时地避免报错。
但是,原则上,我们不应该将不同的数据类型直接进行转换。修改方法:
[mw_shl_code=c,true]unsigned char *DatTemp = (unsigned char *char) Dat;[/mw_shl_code]
回复

使用道具 举报

17

主题

587

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4467
金钱
4467
注册时间
2013-6-27
在线时间
565 小时
发表于 2018-1-25 21:16:48 | 显示全部楼层
keil C51 使用code定义试试
让我们的思维驾驭在电的速度之上!
回复

使用道具 举报

3

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2017-12-29
在线时间
14 小时
 楼主| 发表于 2018-1-29 09:03:14 | 显示全部楼层
DongInker 发表于 2018-1-25 21:16
keil C51 使用code定义试试

C51 的code 是放在rom里面,也就是代码区。而const 定义的是只读类型。这两者有本质区别的。就是说一个在rom区,一个人RAM里面。
回复

使用道具 举报

3

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2017-12-29
在线时间
14 小时
 楼主| 发表于 2018-1-29 09:03:30 | 显示全部楼层
a496298685 发表于 2018-1-25 21:00
因为MDK编译时对数据类型的检查更加严格了。使用强制类型转换可以暂时地避免报错。
但是,原则上,我们不 ...

好的谢谢!
回复

使用道具 举报

3

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2017-12-29
在线时间
14 小时
 楼主| 发表于 2018-1-29 09:20:30 | 显示全部楼层
a496298685 发表于 2018-1-25 21:00
因为MDK编译时对数据类型的检查更加严格了。使用强制类型转换可以暂时地避免报错。
但是,原则上,我们不 ...

还是有问题的
123456.png
回复

使用道具 举报

3

主题

32

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
448
金钱
448
注册时间
2016-9-16
在线时间
51 小时
发表于 2018-1-29 09:28:57 | 显示全部楼层
好像是不是要&Dat
回复

使用道具 举报

3

主题

32

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
448
金钱
448
注册时间
2016-9-16
在线时间
51 小时
发表于 2018-1-29 09:31:46 | 显示全部楼层
不对不对,忽略我上一条,是不是应该unsigned char *DatTemp = (unsigned char *) Dat;
回复

使用道具 举报

5

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
143
金钱
143
注册时间
2017-9-26
在线时间
25 小时
发表于 2018-1-29 10:03:47 | 显示全部楼层
用const unsigned char *Dat 修饰的意思对应的内存空间不可改变,而你把用const的修饰的指针赋给一个可以改变指针对应内存空间的指针,这是不允许的。
回复

使用道具 举报

6

主题

462

帖子

0

精华

高级会员

Rank: 4

积分
906
金钱
906
注册时间
2017-12-15
在线时间
111 小时
发表于 2018-1-29 13:29:10 | 显示全部楼层

抱歉,我输入有误,

应该是
(unsigned char *) Dat;
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 22:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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