Anred
发表于 2024-12-30 08:55:07
ahong 发表于 2024-12-27 19:04
P40=1后要加延时,不然复位了,看不到指示动作
我中间测试的时候是加了的,能够看到指示动作
_奶咖君_
发表于 2024-12-30 09:02:47
Anred 发表于 2024-12-30 08:54
好的
结果如何?
Anred
发表于 2024-12-30 10:07:38
_奶咖君_ 发表于 2024-12-30 09:02
结果如何?
并不能进入复位,然后如果删除复位的那条,则可以进入灯的状态显示
Anred
发表于 2024-12-30 10:26:29
_奶咖君_ 发表于 2024-12-27 19:44
咱就说,,能不能把你的while循环里的delay_ms 干掉啊
大佬,可以了,干掉所有的delay_ms后,能启动了
_奶咖君_
发表于 2024-12-30 11:11:57
<p>那么问题应该是这样的,,在你的串口中断中,判断了一包的数据结尾,并清除了计数值 RF,将标志位置1,并在主函数中处理接收的数据包。。虽然写的不算太好,但是就目前的这些功能上来说也是能用的,从你测试修改RTC时间的功能上就能看的出来。</p>
<p>由于你再没有处理当前数据包的时候就清除了RF,,那么在你主函数运行到数据包处理的代码之前,如果串口再次接收到其他的数据,那么你下面处理数据包的代码(你所谓的有限状态机部分)就会判断失效。</p>
<p>那么为什么 修改RTC时间的 就能正确执行呢?原因是,在你串口发送完数据之后,理论上你是不会发送其他的串口数据的,这个时候等到主函数去处理时,就能正确的执行功能。</p>
<p>那么为什么 不停电烧录功能 就极少数可以,大多数不行呢?原因是,你发送命令的这个行为,对于单片机来说可以看作是一个随机事件,如果当程序正好运行到 你的有限状态机 这里,正好串口接收完一包命令,随后立马执行 状态机程序,那么就可以触发不断电下载。。。但是,如果当前的程序运行在 延时函数中(实际上你单片机绝大部分时间都在运行你的延时函数),串口接收了 不断电下载的命令,但是ISP软件很快就会接着发送7F通讯命令。显而易见的是还没有轮到你主函数处理串口数据,,这一包的数据就被破坏了。这样就是失败的情况。</p>
<p><img src="data/attachment/forum/202412/30/110556x3103kkz0u7k06x7.png" alt="image.png" title="image.png" /></p>
<p>那么如何解决呢?请广大坛友们群策群力了<img alt="wunai" class="emoji" src="https://www.stcaimcu.com/static/image/smiley/default/wunai.gif" title="wunai" /></p>
Anred
发表于 2024-12-30 11:46:13
_奶咖君_ 发表于 2024-12-30 11:11
那么问题应该是这样的,,在你的串口中断中,判断了一包的数据结尾,并清除了计数值 RF,将标志位置1,并在 ...
好强的分析流,大佬真棒,叩谢大佬
Anred
发表于 2024-12-30 11:51:38
_奶咖君_ 发表于 2024-12-30 11:11
那么问题应该是这样的,,在你的串口中断中,判断了一包的数据结尾,并清除了计数值 RF,将标志位置1,并在 ...
串口中断中,判断了一包的数据结尾,并清除了计数值 RF,将标志位置1,并在主函数中处理接收的数据包。。虽然写的不算太好,但是就目前的这些功能上来说也是能用的,从你测试修改RTC时间的功能上就能看的出来。
我还想问一下大佬,这个地方中断怎么写是比较高效靠谱的呢