摇滚一族 发表于 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);
      }
    }
}







_奶咖君_ 发表于 2024-8-30 15:13:46

printf使用问题,,   可以在论坛里搜搜这方面的东西

摇滚一族 发表于 2024-8-30 15:34:08

_奶咖君_ 发表于 2024-8-30 15:13
printf使用问题,,   可以在论坛里搜搜这方面的东西

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

_奶咖君_ 发表于 2024-8-30 16:08:24

摇滚一族 发表于 2024-8-30 15:34
我不用printf,实际使用也发现有同样的问题,所以才发这个贴子

别的是怎么输出的呢?0.0

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

欸 你上面都直到u8 的变量要加b这 下面就不加了0.0你的这写aa,bb.... 不也是u8的么

嵌入式之路 发表于 2024-8-30 16:09:47

你可以仿真一下看看吗?

_奶咖君_ 发表于 2024-8-30 16:10:23

不过 如果怀疑是变量的问题的话,,你可以整一个空的工程 加上串口的代码,,然后打印一下,,工程越干净 越能找到问题

邮箱 发表于 2024-8-30 22:11:34

printf("aa %bx \n",aa);

_奶咖君_ 发表于 2024-8-31 08:50:13

wnagming 发表于 2024-8-31 06:56
我没看明白,我自己这么写没有发现什么问题啊,请教一下楼主的代码有什么问题? ...

他这里用的8H的单片机   printf这里 如果想要打印u8变量 要用%bx   

_奶咖君_ 发表于 2024-8-31 08:50:47

wnagming 发表于 2024-8-31 06:56
我没看明白,我自己这么写没有发现什么问题啊,请教一下楼主的代码有什么问题? ...

你测试的单片机是8H么?

摇滚一族 发表于 2024-8-31 14:15:36

_奶咖君_ 发表于 2024-8-31 08:50
你测试的单片机是8H么?

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

原程序原因也找到了,不是变量出问题了,是硬件有个键有问题,误触发了变量改变
页: [1] 2
查看完整版本: 请教一个变量的问题