[STM32L1] 帮我看看printf输出异常

[复制链接]
 楼主| nuc990 发表于 2017-9-29 18:14 | 显示全部楼层 |阅读模式
本帖最后由 nuc990 于 2017-9-30 11:51 编辑
  1. uint8_t ReceData_Handle(void)
  2. {
  3. uint8_t rret = 0;
  4.         frame_head_data *p;
  5.         p = (frame_head_data *) Real_Data;
  6.         printf("%x\r\n",p->cmd);
  7.         printf("%x\r\n",Real_Data[19]);
  8.         //while(1);
  9.         if(p->cmd != CMD_REPEAT)     
  10.         {

  11.                 System_param.date_time[0] = Real_Data[11];
  12.                 System_param.date_time[1] = Real_Data[12];
  13.                 System_param.date_time[2] = Real_Data[13];
  14.                 System_param.date_time[3] = Real_Data[14];
  15.                 System_param.date_time[4] = Real_Data[15];
  16.                 System_param.date_time[5] = Real_Data[16];
  17.                 ChangeTime = 1;
  18.                 if(Real_Data[19] == 0x00)
  19.                 {
  20.                         rret = 0;
  21.                         printf("\r\n工作正常\r\n");
  22.                         
  23.                 }
  24.         }
  25.         else
  26.         {
  27.                 rret = 0;
  28.                 printf("%x\r\n",rret);
  29.                
  30.         }
以上满足这个else if( p->cmd == CMD_REPORTCONFIG)分支时候,为什么打印输出不是0,而是长整形的数据0x200000ab?
gujiamao12345 发表于 2017-9-29 18:17 | 显示全部楼层
前面的打印正常么
目测内存空间已经被破坏了
 楼主| nuc990 发表于 2017-9-29 20:23 | 显示全部楼层
gujiamao12345 发表于 2017-9-29 18:17
前面的打印正常么
目测内存空间已经被破坏了

前面的打印正常呀
gujiamao12345 发表于 2017-9-30 09:00 | 显示全部楼层
nuc990 发表于 2017-9-29 20:23
前面的打印正常呀

我比较在意那个Real_Data数组多大
feelhyq 发表于 2017-9-30 09:21 | 显示全部楼层
本帖最后由 feelhyq 于 2017-9-30 09:37 编辑

        else if( p->cmd == CMD_REPORTCONFIG)
        {
                rret = 0;
                printf("%x\r\n",rret);
               
        }

中的 printf("%x\r\n",rret);  改成 printf("%d\r\n",rret);   你这个打印的是整型数据 而不是字符串(从结果上看,应该是把rret在RAM里面的地址打印出来了)
 楼主| nuc990 发表于 2017-9-30 10:48 | 显示全部楼层
gujiamao12345 发表于 2017-9-30 09:00
我比较在意那个Real_Data数组多大

uint8_t Real_Data[64];  
kingkits 发表于 2017-9-30 10:51 | 显示全部楼层
目测 rret 没有用到,你直接往外输出‘0’就好了
kingkits 发表于 2017-9-30 10:56 | 显示全部楼层
if()
else if() 貌似用得不对,后面的代码(else if里面的)永远都不会运行
 楼主| nuc990 发表于 2017-9-30 11:04 | 显示全部楼层
feelhyq 发表于 2017-9-30 09:21
else if( p->cmd == CMD_REPORTCONFIG)
        {
                rret = 0;

就是打印整形数据呀
 楼主| nuc990 发表于 2017-9-30 11:05 | 显示全部楼层
feelhyq 发表于 2017-9-30 09:21
else if( p->cmd == CMD_REPORTCONFIG)
        {
                rret = 0;

就是打印整形不是字符串呢
gujiamao12345 发表于 2017-9-30 11:26 | 显示全部楼层
nuc990 发表于 2017-9-30 10:48
uint8_t Real_Data[64];

数组没溢出
就再查查野指针吧...
feelhyq 发表于 2017-9-30 11:34 | 显示全部楼层
nuc990 发表于 2017-9-30 11:04
就是打印整形数据呀

printf("%x\r\n",rret);  改成 printf("%d\r\n",rret);   用心看回复,答案都在我之前的回复里面
 楼主| nuc990 发表于 2017-9-30 11:50 | 显示全部楼层
kingkits 发表于 2017-9-30 10:56
if()
else if() 貌似用得不对,后面的代码(else if里面的)永远都不会运行

没事,先不关心这个
 楼主| nuc990 发表于 2017-9-30 11:51 | 显示全部楼层
kingkits 发表于 2017-9-30 10:51
目测 rret 没有用到,你直接往外输出‘0’就好了

这是改动后的,改之前有运行到出的问题
 楼主| nuc990 发表于 2017-9-30 11:53 | 显示全部楼层
feelhyq 发表于 2017-9-30 11:34
printf("%x\r\n",rret);  改成 printf("%d\r\n",rret);   用心看回复,答案都在我之前的回复里面 ...

printf("%x\r\n",rret);  改成 printf("%d\r\n",rret);
其实这2个打印没什么区别。只是16进制整形和十进制整形的差别,应该不是你说的问题
hcn001 发表于 2017-9-30 14:12 | 显示全部楼层
printf("%x\r\n",rret);  改成 printf("%02x\r\n",(UINT16)rret);
hcn001 发表于 2017-9-30 14:13 | 显示全部楼层
强制转换的问题,在KEIL里面很正常。
IICeeprom 发表于 2017-9-30 14:52 | 显示全部楼层
你打印的格式不对,改成%d就行了
kingkits 发表于 2017-9-30 17:33 | 显示全部楼层
你直接输出0,比这个要好,有时间研究这个,还不如去做些有意义的事情
山东电子小菜鸟 发表于 2017-9-30 19:03 | 显示全部楼层
怎么可看不到你的代码 楼上的怎吗看到的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

114

主题

225

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部