1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 一只耳朵怪 于 2018-6-13 14:58 编辑
struct MoveStatus_BITS [ Uint16 RunStatus:1; Uint16 ErroStatus:3; Uint16 AccStatus:2; Uint16 Dir:1; Uint16 reserve1:1; Uint16 StopMode:2; Uint16 reserve:6; ]; 定义一个位寄存器结构体,对其中某一位写操作,为什么会影响其他位的状态? 例如定义如下: int16 ***uf=0; .....***uf处理函数 AxisX_Move.Axis_Data.Status.ErroStatus = ***uf; 执行上面这一句,会导致程序中AxisX_Move.Axis_Data.Status.StopMode写操作偶然不成功,这个是什么原因?具体情况:在中断中写AxisX_Move.Axis_Data.Status.StopMode=2,写成功了,因为执行AxisX_Move.Axis_Data.Status.ErroStatus = ***uf,导致再次读AxisX_Move.Axis_Data.Status.StopMode为0,非常奇怪 所有数据都是SRAM存储器操作 |
|
相关推荐
9个回答
|
|
|
|
|
|
问题本身出现概率很低,程序检查了N遍,断点也放过,测试主要放ESTOP0宏指令看程序有没有出错; 程序执行1s左右写一次AxisX_Move.Axis_Data.Status.StopMode=2,大概200-9000次必出现一次出错; 只要删除AxisX_Move.Axis_Data.Status.ErroStatus = ***uf这句,就不会出问题 |
|
|
|
野性Rude 发表于 2018-6-13 11:34 |
|
|
|
直接在后面添加测试语句测试看不到,不知道为什么 AxisX_Move.Axis_Data.Status.StopMode,我把它改成AxisX_Move.Axis_Data.StopMode,Uint16格式,也就是不用位变量,所有的问题都消失了; 连续运行了3天,程序都没有出现过这个问题了? 定义StopMode位变量时都没有定义联合体,所以同样程序修改前不存在从其他地方操作导致AxisX_Move.Axis_Data.Status.StopMode变化的情况;所有怀疑是不是这个位变量操作过于频繁会出问题,请教TI工程师 |
|
|
|
野性Rude 发表于 2018-6-13 11:53 这边看不到你完整定义,应该还是你那里定义有错 |
|
|
|
struct MoveStatus_BITS [ Uint16 RunStatus:1; Uint16 ErroStatus:3; Uint16 AccStatus:2; Uint16 Dir:1; Uint16 reserve1:1; Uint16 StopMode:2; Uint16 reserve:6; ]; struct Move_Data [ struct MoveSet_BITS Set; int32 HomeLSpeed; int32 HomeHSpeed; int32 HomeAPls; struct MoveStatus_BITS Status; Uint16 SStopMode; int32 AbsPos; int32 CmdPos; int32 Speed; ]; union Axis_Move [ Uint16 Buffer[40]; struct Move_Data Axis_Data; ]; union Axis_Move AxisX_Move; 以上是完整的定义;红色位置程序会出错,将程序中所有红色的变量改为绿色的那个就没有问题了 |
|
|
|
你的共同体和结构体用得有点怪,你的buffer数组是干嘛的?和后面的结构体是一个东西吗,我看着有点不像啊。 |
|
|
|
buffer和结构体是一个联合体,这个没有问题,debug时看的出来;buffer数据空间较大,仅仅用作扩展可能加入的结构体数据,buffer仅在上电初始化调用了一次全部清零,用buffer这种联合体也就是为了方便初始化数据 |
|
|
|
野性Rude 发表于 2018-6-13 12:48 这样的话,还真看不出哪里有问题了。关键你的这个BUG不好稳定重现。 |
|
|
|
只有小组成员才能发言,加入小组>>
336 浏览 1 评论
529 浏览 2 评论
NA555DR VCC最低电压需要在5V供电,为什么用3.3V供电搭了个单稳态触发器也使用正常?
774 浏览 3 评论
MSP430F249TPMR出现高温存储后失效了的情况,怎么解决?
651 浏览 1 评论
对于多级放大电路板,在PCB布局中,电源摆放的位置应该注意什么?
1130 浏览 1 评论
AT32F407在USART2 DMA发送数据时,接包接到了要发送的数据,程序还是处于等待传输完成的标识判断中,为什么?
63浏览 29评论
158浏览 23评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
253浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
202浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
60浏览 13评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 20:01 , Processed in 1.562752 second(s), Total 97, Slave 80 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号