OpenEdv-开源电子网

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

定义的char型变量,在赋字符值时,编译产生警告,求解

[复制链接]

33

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
309
金钱
309
注册时间
2016-5-20
在线时间
45 小时
发表于 2016-9-27 00:00:50 | 显示全部楼层 |阅读模式
1金钱
//通过GPIOF_PIN0-GPIOF_PIN3上的4位拨码开关设置1-16个站号

char Mod_Id;  //óÃà′±êÖ¾×÷Îa′óÕ¾μÄÕ¾oÅ

void RS485_Mod_Id(void)
{
switch(GPIOF->IDR)
  {
         case 0x00: Mod_Id=1 ;
         break;
   case 0x01: Mod_Id=2 ;
         break;
   case 0x02: Mod_Id=3 ;
         break;
         case 0x03: Mod_Id=4 ;
         break;
         case 0x04: Mod_Id=5 ;
         break;
         case 0x05: Mod_Id=6 ;
         break;
         case 0x06: Mod_Id=7 ;
         break;
         case 0x07: Mod_Id=8 ;
         break;
         case 0x08: Mod_Id=9 ;
         break;
         case 0x09: Mod_Id='0A';  
         break;
         case 0x10: Mod_Id='0B' ;
         break;
         case 0x11: Mod_Id='0C' ;
         break;
         case 0x12: Mod_Id='0D' ;
         break;
         case 0x13: Mod_Id='0E' ;
         break;
         case 0x14: Mod_Id='0F' ;
         break;
         case 0x15: Mod_Id='10' ;
         break;       
  }         
}


最佳答案

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

没有'0A'这种东西。 而且你的这么一大个switch case其实就是要说 if(GPIOF->IDR < 16) { Mod_Id = GPIOF ->IDR + 1; } 而且你的switch 没处理default
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

33

主题

984

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8017
金钱
8017
注册时间
2014-8-13
在线时间
1594 小时
发表于 2016-9-27 00:00:51 | 显示全部楼层
没有'0A'这种东西。
而且你的这么一大个switch case其实就是要说
if(GPIOF->IDR < 16)
{
    Mod_Id = GPIOF ->IDR + 1;
}
而且你的switch 没处理default
回复

使用道具 举报

16

主题

197

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
457
金钱
457
注册时间
2012-4-20
在线时间
91 小时
发表于 2016-9-27 08:23:08 | 显示全部楼层
OA就变成字符串了,应该只能一个。
回复

使用道具 举报

19

主题

56

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
323
金钱
323
注册时间
2016-8-9
在线时间
41 小时
发表于 2016-9-27 08:32:49 | 显示全部楼层
我也觉得  OA这形式有问题
回复

使用道具 举报

33

主题

481

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
5075
金钱
5075
注册时间
2013-10-4
在线时间
654 小时
发表于 2016-9-27 09:07:53 | 显示全部楼层
后面赋值应该是0x0A这样的吧,不是'0A'
回复

使用道具 举报

19

主题

430

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1341
金钱
1341
注册时间
2016-4-22
在线时间
187 小时
发表于 2016-9-27 09:29:29 | 显示全部楼层
按2楼说的Mod_Id = GPIOF ->IDR + 1;就行了
伤情最是晚凉天,憔悴斯人不堪怜。
邀酒摧肠三杯醉,寻香惊梦五更寒。
钗头凤斜卿有泪,荼蘼花了我无缘。
小楼寂寞新雨月,也难如钩也难圆。
回复

使用道具 举报

33

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
309
金钱
309
注册时间
2016-5-20
在线时间
45 小时
 楼主| 发表于 2016-9-27 21:11:00 | 显示全部楼层
mack13013 发表于 2016-9-27 04:29
没有'0A'这种东西。
而且你的这么一大个switch case其实就是要说
if(GPIOF->IDR < 16)

问题是我上位机发过来的报文里,当站号大于9时,就要换算成16进制格式,只有0A,0B这样的东西,我是要拿它来和下位机的站号做比较的,用于判断是不是本站要接收的数据,还请大师明示,谢谢
回复

使用道具 举报

33

主题

984

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8017
金钱
8017
注册时间
2014-8-13
在线时间
1594 小时
发表于 2016-9-28 03:44:18 | 显示全部楼层
本帖最后由 mack13013 于 2016-9-28 03:50 编辑
2672751679 发表于 2016-9-27 21:11
问题是我上位机发过来的报文里,当站号大于9时,就要换算成16进制格式,只有0A,0B这样的东西,我是要拿它 ...

0x0A和10(10)其实是一个东西。
如果你实在要用switch case,那么这么写就可以了
case 0x09:
Mod_Id = 10;
break;
case 10:
Mod_Id = 11;
break;
其他以此。

其实我在2楼说的Mod_Id = GPIOF ->IDR + 1;是严格来讲不正确的,
因为0x10其实是16,但是我猜想,你可能是想描述成

case 10:
Mod_Id = 11;
break;
所以我给写成Mod_Id = GPIOF ->IDR + 1;了,因为这样估计会是你要的逻辑。


你去找本C语言书,查看一下进制转换部分吧。

其实就是个16进制和10进制转换问题,0x0A用哪种进制显示都可以,
实质还是那个比9大1的数,这个数用16进制显示就是0x0A(或者直接记作A),用10进制显示就是10,
用8进制显示就是12,用2进制显示就是1010。
不管用哪种方式显示,实质都是比9多1的那个数。

你调试的时候估计是用16进制显示了,你对着那个数字点右键,估计有个“用16进制显示”的菜单打勾了,
取消勾选你就会看见它显示为10了。

另外,“大师”不敢当。




回复

使用道具 举报

4

主题

133

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3862
金钱
3862
注册时间
2016-6-11
在线时间
710 小时
发表于 2016-9-28 06:39:36 | 显示全部楼层
在单片机里,什么都是1和0 的组合,用16进制表示。
回复

使用道具 举报

30

主题

1170

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1993
金钱
1993
注册时间
2016-2-16
在线时间
527 小时
发表于 2016-9-28 09:58:24 | 显示全部楼层
不需要你为单片机考虑用什么进制,0x0a和10对单片机来说是一模一样的东西
回复

使用道具 举报

33

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
309
金钱
309
注册时间
2016-5-20
在线时间
45 小时
 楼主| 发表于 2016-9-28 22:02:55 | 显示全部楼层
mack13013 发表于 2016-9-28 03:44
0x0A和10(10)其实是一个东西。
如果你实在要用switch case,那么这么写就可以了
case 0x09:

谢谢,受益非浅!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-24 15:56

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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