[STM32L1] printf输出异常

[复制链接]
1149|25
 楼主| supernan 发表于 2021-1-18 23:43 | 显示全部楼层 |阅读模式

uint8_t ReceData_Handle(void)
{
uint8_t rret = 0;
        frame_head_data *p;
        p = (frame_head_data *) Real_Data;
        printf("%x\r\n",p->cmd);
        printf("%x\r\n",Real_Data[19]);
        //while(1);
        if(p->cmd != CMD_REPEAT)     
        {

                System_param.date_time[0] = Real_Data[11];
                System_param.date_time[1] = Real_Data[12];
                System_param.date_time[2] = Real_Data[13];
                System_param.date_time[3] = Real_Data[14];
                System_param.date_time[4] = Real_Data[15];
                System_param.date_time[5] = Real_Data[16];
                ChangeTime = 1;
                if(Real_Data[19] == 0x00)
                {
                        rret = 0;
                        printf("\r\n工作正常\r\n");
                        
                }
        }
        else
        {
                rret = 0;
                printf("%x\r\n",rret);
               
        }
以上满足这个else if( p->cmd == CMD_REPORTCONFIG)分支时候,为什么打印输出不是0,而是长整形的数据0x200000ab?
juventus9554 发表于 2021-1-18 23:45 | 显示全部楼层
前面的打印正常么
yinxiangh 发表于 2021-1-18 23:46 | 显示全部楼层
目测内存空间已经被破坏了
 楼主| supernan 发表于 2021-1-18 23:48 | 显示全部楼层
前面的打印正常呀
xxrs 发表于 2021-1-18 23:51 | 显示全部楼层
我比较在意那个Real_Data数组多大
morrisk 发表于 2021-1-18 23:52 | 显示全部楼层
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里面的地址打印出来了)
 楼主| supernan 发表于 2021-1-18 23:55 | 显示全部楼层
uint8_t Real_Data[64];  
gongche 发表于 2021-1-18 23:57 | 显示全部楼层
目测 rret 没有用到,你直接往外输出‘0’就好了
bqyj 发表于 2021-1-18 23:58 | 显示全部楼层

if()
else if() 貌似用得不对,后面的代码(else if里面的)永远都不会运行
 楼主| supernan 发表于 2021-1-19 22:17 | 显示全部楼层
就是打印整形数据呀
 楼主| supernan 发表于 2021-1-19 22:19 | 显示全部楼层
就是打印整形不是字符串呢
songqian17 发表于 2021-1-19 22:20 | 显示全部楼层

数组没溢出
就再查查野指针吧...
zyf部长 发表于 2021-1-19 22:22 | 显示全部楼层

printf("%x\r\n",rret);  改成 printf("%d\r\n",rret);
 楼主| supernan 发表于 2021-1-19 22:25 | 显示全部楼层
这是改动后的,改之前有运行到出的问题
 楼主| supernan 发表于 2021-1-19 22:30 | 显示全部楼层

printf("%x\r\n",rret);  改成 printf("%d\r\n",rret);
其实这2个打印没什么区别。只是16进制整形和十进制整形的差别,应该不是你说的问题
juventus9554 发表于 2021-1-19 22:32 | 显示全部楼层
printf("%x\r\n",rret);  改成 printf("%02x\r\n",(UINT16)rret);
dingy 发表于 2021-1-19 22:33 | 显示全部楼层
强制转换的问题,在KEIL里面很正常。
zyf部长 发表于 2021-1-19 22:40 | 显示全部楼层
你打印的格式不对,改成%d就行了
pengf 发表于 2021-1-19 22:42 | 显示全部楼层
你直接输出0,比这个要好,有时间研究这个,还不如去做些有意义的事情
houcs 发表于 2021-1-19 22:45 | 显示全部楼层
串口能打印出来什么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

730

主题

10412

帖子

6

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