完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
嗨!我不确定在这里发布这个主题。如果我错了,请把我带到正确的地方。我在调试阶段,发现了奇怪的事情。1。当我开始调试会话时,窗口显示了断点(图片),我在网上搜索了相关的线程。有我的信息。1。设备:PIC16F1824,编译器:XC8 V1.44,ID:xV4.012。该板由电源供电,而不是由PIKIT33供电。我只设置了一个断点。虽然我可以在下一行设置断点,但我对场景背后的原因感到好奇。2。我在下一行317上设置了断点,很明显error_.=-1(2补足的0xFFFF)和OTHER_FLAGbits.COMMUNICA._FAILURE=1当程序到达第319行时,它应该:1.错误计数器=02。转到情况0:BUT,它忽略switch语句,并转到IF语句的末尾。为了更清楚的说明:我不明白为什么,我的代码有什么错误吗?谢谢。
|
|
相关推荐
18个回答
|
|
|
你可能在看优化代码。编译器有许多优化方法,可以使调试器跳过一个圆或跳过行。解决这一问题的一种方法是向代码中添加NOP()。这应该给你一个固定点来放置断点。
|
|
|
|
|
|
NKurzman:嗨,在哪里找到优化的代码。优化代码是反汇编列表文件吗?你提到了“出现”。这意味着它不会跳动?
|
|
|
|
|
|
优化是编译器的选择。在项目上设置右时钟,并选择编译器选项。
|
|
|
|
|
|
这是它应该的工作。执行时,它会转到案例1,因为这是一个后增量。我猜你没有一个案例1或一个缺省情况,所以它到了IF.()的末尾。
|
|
|
|
|
|
你的C代码编译成汇编语言。这就是PIC实际执行的。如果启用了优化,那么它将寻找在不改变代码功能的情况下使代码更有效的方法。有时这意味着它决定跳过对输出没有影响的汇编指令,或者以稍微不同的为了使它更有效。是的,您需要查看汇编语言,看看它到底在做什么。正如NKurzman建议的,您可以插入NOP指令以创建断点。
|
|
|
|
|
|
对NKurzman和MRPACKEKEAD:谢谢,在禁用优化之后,它工作了。到1: 0:哦,我知道它是一个后增量运算符。我认为在单变量语句中也有同样的效果。每本书C是如何编程的:我想我误解了这个句子。
|
|
|
|
|
|
我认为你误解的细节是开关语句包含开关语句结束的所有内容。
|
|
|
|
|
|
跳到switch语句的结束括号与优化关系不大,它只是“C处理开关的方式”。对单个案例的所有测试都是一系列if语句,它们放在tze开关{}的末尾。这与“单遍编译”有点关系(谁的年龄足够大,可以回忆起关于单遍与双遍的争论?),因为这种方式大多数跳跃目标是已知的先前使用。如果编译器支持并且开关允许,那么可以使用一些“跳转表”来替代实现,我认为这些表是上级的(=高度优化的)。
|
|
|
|
|
|
我想我误解了这个句子。在这里的例子中,开关(error_.++)将使用error_.的值首先分支到case语句,然后递增error_.。为了完成您期望的操作,您将使用预增量。关于优化,以.()为例:当使用error_.=0执行.()语句时,它在情况1000中可能跳转到LED 1_ON行,因为这里的代码与情况0相同。也就是说,壳体0的主体可以被优化掉。
|
|
|
|
|
|
我想我误解了这个句子。你误解了那个句子。“在一份声明中,“这意味着同样的效果。然而,下面不是萨梅尔会留下的这个为你解答的原因。
|
|
|
|
|
|
它不允许我用这个来编辑我的帖子。那么…
|
|
|
|
|
|
对杜:虽然我现在不懂“单程编译”,但我会研究它。它跳到这一行错误计数器=0!!!!我绝对会买这本书的,谢谢。
|
|
|
|
|
|
@Andy_TNo需要深入研究单遍(或单遍)与双遍(.-pass):这是“信仰之战”早已过去。虽然通常没有文档记载,但是当前的编译器倾向于单遍类型。但是这是一个“编译器设计主题”,它具有一些影响力,但在其他方面几乎没有交互作用。嵌入式软件设计。
|
|
|
|
|
|
真的吗?他们如何通过时间旅行来实现这一目标?我很好奇,需要搜索一些信息。
|
|
|
|
|
|
嗨,达里奥,单遍仅涉及建立比双遍方法(旨在保持符号表小(er))更大的符号表。考虑到今天的内存大小和最终使用(光盘)临时文件,这是一个小问题。这里不应该讨论。任何真正想了解这方面的人都应该找一些关于“编译器——原理、技术、工具”或类似主题的好书。(对不起,没有这方面的建议。)
|
|
|
|
|
|
嗯,我从来没见过这样的情况,但是自从我编写了Commodore的汇编程序,然后又编写了Z80以来,已经有很长一段时间了。我习惯于首先创建符号表,然后在第二遍解析所有地址。然后,有时我遇到“优化问题”,说我需要使用“Carry上的分支”到附近的标签,但是在第二次传递标签之后,标签变得太远,因此必须将其转换为“跳过non-Carry/.”,但是这可能导致代码的另一个更改,所以您可能想要第三次通过,或者只是停止。
|
|
|
|
|
|
我不想深入到这里——无论如何……除了当前编译器有多个阶段(例如,C-&g t;metacode-&g t;target code-&g t;linker)之外,每个阶段进行一些优化,其中的一个技巧是首先使用通用的跳远。对短跳的优化比其他方法更容易。跳“回”比向前跳(在优化方面,以及在每个跳转目标之前已知的符号表方面)更容易。直到现在,我还没有编写编译器或汇编器——只有一些解释器。但是我和一些优秀的(和一些低级)编译器一起工作过,并且有很多的见解。足以讨论代码覆盖测试深入一些学术水平,但让我们完成这个讨论在这里…
|
|
|
|
|
|
是的,好的:这是有道理的,这或多或少是我所做的。汇编程序直接从记忆/符号到机器代码,通过一个或2个遍。编译器…我的第一个是使用符号等生成汇编代码。后来,我推出了一个“元代码”阶段,它允许优化等等。我还做了一些解释器,我可以说这更容易。
|
|
|
|
|
只有小组成员才能发言,加入小组>>
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
475 浏览 0 评论
5795 浏览 9 评论
2334 浏览 8 评论
2224 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3530 浏览 3 评论
1125浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
1098浏览 1评论
我是Microchip 的代理商,有PIC16F1829T-I/SS 技术问题可以咨询我,微信:A-chip-Ti
873浏览 1评论
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
475浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 20:34 , Processed in 2.060194 second(s), Total 106, Slave 89 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
3443