关于结构体赋值出现错乱数据。

有一个问题在这:

最近使用arm裸机在ads平台上编译一个工程,有若干个文件组成。

由于各个文件中函数传递数据,所以需要很多全局变量。于是我想到使用结构体把这些全局变量放到一起,然后再各个工程文件中使用
关键字extern来引用。

我的步骤如下,我首先在main'函数外面使用 Estruct  * pcstruct来定义这样一个指向全局变量结构体的指针,期中Estruct是我定义的
全局变量结构体类型。
然后我在man函数里面初始化了另一个全局变量结构体 Q 总共有四个成员,全是unsigned char 类型
    (*Q).sel=0;
    (*Q).sev=0;
    (*Q).flag=0;
    (*Q).q=0;
全初始化为0,然后 对全局变量指针  pcstruc里面的成员unsigned char n_buf[10]数组进行初始化:
具体如下:
Globle->n_buff[1] = ((((*Q).sel )<< 6)|(((*Q).sess) << 4)|(((*Q).flag) << 3)|(((*Q).q) >> 1));

然后我编译代码,下载到arm板子上,使用串口打印n_buff[1]的值,和全局变量Q的值
如下:
Q->sel=131
Q->sess=192
Q->q=0
Q->flag=120
n_buf[1]=192;
打印出啦的值跟所设想的值完全不一样。打印出来Q的所有值应该都没有改变

然后n_buf[1]的值应该也是0才对,为何会变成192呢?

我想不通,我准备从程序入手,看看是什么影响了n_buff 以及数据结构Q里面的值,终于我找到了,是这样一句话。



        timer1_mask();//不能屏蔽所有中断,否则容易出错哈
        EINT4_mask();//屏蔽外部中断4
        Uart0_Printf("enter epc_query\n");
	 Uart0_Printf("Q->sel=%d\n",(Q->sel));
	Uart0_Printf("Q->sess=%d\n",(Q->sess));
	Uart0_Printf("Q->q=%d\n",(Q->q));
	Uart0_Printf("Q->flag=%d\n",(Q->flag));
//Globle->n_buff[0] = (0x80 | (EPC_FMN_FACTOR_DR << 3) | (EPC_QUERY_M << 1) | (EPC_QUERY_TRext)); // DR = 0b
	     Uart0_Printf("Globle->n_buff[1]=%x\n",(Globle->n_buff[1]));
	Globle->n_buff[1] =(U8)((*Q).sel);
	
       Uart0_Printf("Globle->n_buff[1]=%x\n",(Globle->n_buff[1]));
	Globle->n_buff[2] = (((*Q).q) << 7);
	//Globle->n_buff[2] |= (crc5((Globle->n_buff),2,1) << 2);
	       Uart0_Printf("enter epc_query\n");

上面画红线的这一句,有点问题,如果不是因为这一句话,那么下面的都是对的哦,太蛋疼了吧
       

不仅程序错乱,而且启动不了定时器1.发送不了命令。原因未知。所以考虑还是从全局变量入手

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值