发 帖  
原厂入驻New
[问答] 怎么通过UART和传感器通信?
227 UART 传感器
分享
嗨,论坛,我的代码有一个问题,通过UART和传感器通信。BNO0559轴传感器的协议没有提供一个指示器,它当前通过UART发送什么数据。因此,PIC不知道在UART上接收的数据意味着什么,所以软件会记住最近请求了哪些数据。假设我们想从传感器读取加速度数据。发送包含相关内存地址的消息,并在_pendingRequestindex变量中记住BNO055Addr_AccelerationData。S 7(这意味着BNO055 ADDRIX加速数据),这是很好的。但是,代码并没有继续到Box 055 ADDRIX加速数据:相反,函数立即结束。开关语句之后有一行,但它不运行。我做错了什么?我使用MPLABX V4.10XC32 v2.10PIC32 MZ2048 EFH064
0
2020-3-26 07:05:29   评论 分享淘帖 邀请回答

相关问题

16个回答
不涉及中断。下面的代码写入到Apple PrimeReestEngress。它根据不同的条件从主循环调用。但是,即使这里可能有一个bug,调试器说switch变量重复地具有一些值,并且永远不会执行正确的情况,这使我抓狂。
2020-3-26 07:42:35 评论

举报

我实际上也避免了子块中的“断裂”语句……它可能混淆事物。
2020-3-26 08:07:28 评论

举报

不,这行得通。这只是一个风格问题,缺失的默认状态也只是一个风格问题。但它往往有助于发现问题。默认情况下,我有一个默认状态(PUN打算)将状态打印到调试控制台。我总是将默认状态视为异常。Nick
2020-3-26 08:14:18 评论

举报

添加默认大小写和移动括号中的分隔符都没有改变任何内容。代码仍然没有输入大小写BNO055Addr_AccelerationData。我不明白。
2020-3-26 08:29:25 评论

举报

如果启用了优化,并且编译器能够确定AccelerationDataReceivedHandler始终是NULL,那么可以想象特定案例块可以全部删除。你能给我们一个小项目来演示这个问题吗?
2020-3-26 08:36:51 评论

举报

不,这行得通。这只是一个风格问题,缺失的默认状态也只是一个风格问题。但它往往有助于发现问题。默认情况下,我有一个默认状态(PUN打算)将状态打印到调试控制台。我总是把默认状态当作一个例外。NickSome编码标准(例如,MISRA C)要求开关在最后有一个默认情况。然而,当使用带有枚举的switch时,除非出于其他原因需要默认值,否则我的首选项是不设置默认值,因为如果该切换不包括每个枚举值的大小写,则GCC将报告警告。这是有用的,例如,当你在EnUM中添加更多的项目时,忘记将相应的情况添加到交换机中。然而,这一点可以激烈辩论,并有优点和缺点,使用或不使用默认情况下。所以,是的,这是风格的问题。-)
另一种可能性(如果您只是单步执行代码)是,当函数实际上没有执行时,它似乎没有执行。我经历了各种各样的奇怪的单步,主要是由于指令重新排序等。使用-O0编译以消除所有优化是有帮助的——但是请注意,我更喜欢始终与-O一起开发和工作,直到需要调试和单个步骤,然后使用-O0重新构建。原因在于,我更喜欢“测试您所飞行的,飞行您所测试的”,所以我不喜欢使用-O0进行开发,然后稍后会得到令人不快的惊喜。在执行开关之前。如果使用带有错误指针或大小的memset(),或者如果某些配置错误的DMA传输覆盖了程序内存等,则可能发生这种情况。在交换机将执行之前,ActudioDATA接收处理程序。
我同意这个“默认”的东西,但“打破”的问题…可能是不同的。我不同意上面提到的代码,但例如,当有一个if…打破…开关内部的状态。我记得几年前的一次长时间的讨论…
2020-3-26 09:15:46 评论

举报

我发现有时候,当我切换到-O0来调试不再合适的东西时,这当然会发生在我真的需要切换到带有更多闪存的PIC来容纳我放入的所有东西的时候。
2020-3-26 09:29:41 评论

举报

尝试在需要断点的地方放置Nop.();宏。12点12分也许是对的。优化器可以对代码进行有趣的操作。(所有的法律和正确的,但混淆调试)
2020-3-26 09:45:51 评论

举报

我会检查BNO055_InternalMessageReceivedHandler函数的asm输出,要么是“case”代码,要么是编译器“知道”代码不能够到达,并且已经对它进行了优化(看起来是这样)。如果优化了,看起来只有一个原因,它已经做到了,正如已经说过的。
2020-3-26 10:05:08 评论

举报

只需双双检查:)你确定BNO055 ADDRyTeleStaseDATA=7吗?它没有显示在上面的代码段中。
2020-3-26 10:12:29 评论

举报

是的,BNO055 ADDRyAccess数据==7:
2020-3-26 10:27:14 评论

举报

程序集列表很有趣。当在第一个switch语句的断点处停止,然后选择“.”->“Debuging”->“.mbly”时,BNO055_InternalMessageReceivedHandler本身根本不显示,而是应该调用它的代码。看看大会:远下,14行从结束,是呼叫。但在汇编程序中似乎没有等价物。怎么可能呢?编译器是否认为整个函数没有用并将其优化?我在调试器中检查,ActudioDATaReaveDeD处理程序有一个值,0x9D030A3C。
2020-3-26 10:39:23 评论

举报

IDE的.mbly视图试图将程序集重新排列为类似于源代码顺序的内容,这根本不是非常有用。注意地址不是连续的。相反,使用命令行中的ObjDIP。
2020-3-26 10:55:17 评论

举报

您还可以让objdump在build-project属性之后创建一个asm'list',在build-${MP_CC_DIR}/xc32-objdump-d${ImageDir}/${PROJECTNAME}.${IMAGE_TYPE}.elf>list.txt.-d之后构建、执行此行,但是您也可以根据自己的喜好进行定制,我不知道是否需要MK。需要一个特殊的-m开关(MM确实需要-m mips:micromips,因为这就是它所能做的),一个快速查看编译器是否正在优化删除代码的方法,就是只注释出可疑函数中的代码片段-构建大小将改变或不改变示例,注释掉t他是(加速数据接收处理器)!= NULL)’测试,如果构建大小保持不变,那么它已经被优化掉了(请看别处),如果构建大小增加,那么找出为什么注释掉的代码导致编译器对代码进行优化
2020-3-26 11:09:40 评论

举报

只有小组成员才能发言,加入小组>>

108个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /7 下一条

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