找回密码
 立即注册
查看: 755|回复: 10

请教一个变量的问题

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:321
  • 最近打卡:2025-05-03 22:15:36

10

主题

24

回帖

1150

积分

金牌会员

积分
1150
发表于 2024-8-30 14:57:59 | 显示全部楼层 |阅读模式
本帖最后由 摇滚一族 于 2024-8-30 15:02 编辑

配置了变量,发现读回来是野值,而不是0,给他赋值为0后,读回来还不是0,不清楚是什么原因?

用“STC8H8K64U-45MHz-LQFP64-DIP64-DEMO-CODE-20231007\15-通过USB CDC协议虚拟串口收发数据” 例程测试了 一下
仅定义了几个变量、然后赋值0、串口打印  三行代码,如下标红处

出来部分也是野值……串口收到的数据为:aa 0,bb 0,cc 0,dd 0,ee 0,ff 4e00,gg 2031,hh 3336,ii 3403,jj 268
如果所有变量都不赋值0,串口收到的数据为:aa 4e20,bb 2000,cc ff1a,dd 9431,ee 0,ff 4e00,gg 2031,hh 3336,ii 3403,jj 268
不清楚是什么原因?请教各位大侠


代码:

#define PRINTF_HID              //printf输出直接重定向到USB HID接口,放在"usb.h"头文件之前

#include "../comm/STC8h.h"  //包含此头文件后,不需要再包含"reg51.h"头文件
#include "../comm/usb.h"     //USB调试及复位所需头文件
#include <intrins.h>
#include <stdio.h>
#include <string.h>

#define MAIN_Fosc       24000000L   //定义主时钟

char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";                      //设置自动复位到ISP区的用户接口命令
u8 aa,bb,cc,dd,ee,ff,gg,hh,ii,jj;
//P3.2口按键复位所需变量
bit Key_Flag;
u16 Key_cnt;

void sys_init();
void delay_ms(u8 ms);
void KeyResetScan(void);

void main()
{
    sys_init();  //系统初始化
    usb_init();  //USB CDC 接口配置
    IE2 |= 0x80;   //IE2相关的中断位操作使能后,需要重新设置EUSB
    EA = 1;
    aa=0;bb=0;cc=0;dd=0;ee=0;ff=0;gg=0;hh=0;ii=0;jj=0;
    while (1)
    {
        delay_ms(1);
        KeyResetScan();   //长按P3.2口按键触发软件复位,进入USB下载模式,不需要此功能可删除本行代码

        if(DeviceState != DEVSTATE_CONFIGURED)  //等待USB完成配置
            continue;

        if (bUsbOutReady)
        {
            usb_OUT_done();    //接收应答(固定格式)
            
            printf("\r\nOutNumber=%bd\r\n",OutNumber);  //使用 printf 函数打印接收数据长度

            USB_SendData(UsbOutBuffer,OutNumber);  //发送数据缓冲区,长度
            printf("aa %x,bb %x,cc %x,dd %x,ee %x,ff %x,gg %x,hh %x,ii %x,jj %x \n",aa,bb,cc,dd,ee,ff,gg,hh,ii,jj);
        }
    }
}







回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2024-8-30 15:13:46 | 显示全部楼层
printf使用问题,,   可以在论坛里搜搜这方面的东西
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:321
  • 最近打卡:2025-05-03 22:15:36

10

主题

24

回帖

1150

积分

金牌会员

积分
1150
发表于 2024-8-30 15:34:08 | 显示全部楼层
_奶*** 发表于 2024-8-30 15:13
printf使用问题,,   可以在论坛里搜搜这方面的东西

我不用printf,实际使用也发现有同样的问题,所以才发这个贴子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2024-8-30 16:08:24 | 显示全部楼层
摇滚*** 发表于 2024-8-30 15:34
我不用printf,实际使用也发现有同样的问题,所以才发这个贴子

别的是怎么输出的呢?0.0

这个图里面的printf这么用 肯定是不能得到你想要的结果。。

欸 你上面都直到u8 的变量要加b  这 下面就不加了0.0  你的这写aa,bb.... 不也是u8的么
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:449
  • 最近打卡:2025-04-30 10:57:37

17

主题

533

回帖

1326

积分

金牌会员

积分
1326
发表于 2024-8-30 16:09:47 | 显示全部楼层
你可以仿真一下看看吗?
自信就会温和,温和就会坚定!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2024-8-30 16:10:23 | 显示全部楼层
不过 如果怀疑是变量的问题的话,,你可以整一个空的工程 加上串口的代码,,然后打印一下,,工程越干净 越能找到问题
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:240
  • 最近打卡:2025-05-03 15:51:21

22

主题

283

回帖

911

积分

高级会员

积分
911
发表于 2024-8-30 22:11:34 | 显示全部楼层
printf("aa %bx \n",  aa);
REMOVEUNUSED
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2024-8-31 08:50:13 | 显示全部楼层
wnag*** 发表于 2024-8-31 06:56
我没看明白,我自己这么写没有发现什么问题啊,请教一下楼主的代码有什么问题? ...

他这里用的8H的单片机   printf这里 如果想要打印u8变量 要用%bx   
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2024-8-31 08:50:47 | 显示全部楼层
wnag*** 发表于 2024-8-31 06:56
我没看明白,我自己这么写没有发现什么问题啊,请教一下楼主的代码有什么问题? ...

你测试的单片机是8H么?
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:321
  • 最近打卡:2025-05-03 22:15:36

10

主题

24

回帖

1150

积分

金牌会员

积分
1150
发表于 2024-8-31 14:15:36 | 显示全部楼层
_奶*** 发表于 2024-8-31 08:50
你测试的单片机是8H么?

感谢回复,改成%bx后,在例程里显示为0了

原程序原因也找到了,不是变量出问题了,是硬件有个键有问题,误触发了变量改变

点评

printf在接收16位以下的变量时,会出现因为数据长度问题造成的值错误。 想要显示u8或者char类型的值。可以通过加入强制类型转换实现。 比如printf("out:%x",(int)aa); 这样就可以了  详情 回复 发表于 2024-8-31 15:02
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-4 04:18 , Processed in 0.145852 second(s), 112 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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