||
三天来都在调试单片机程序中的一个子程序,今天终于把问题解决了。
这个子程序要实现对上位机传输来的多个参数存储到外存指定的单元中,这原本是个很简单的程序,但在编程和实现过程中遇到了很多问题,通过这次程序的编程调试让自己体会到解决单片机编程与调试问题方法的重要性。
首先我根据芯片手册以及一些资料很快实现了单字节及多字节固定连续地址的读写问题,接下来是多字节、变地址、变数值的读写功能。因为已经实现了对芯片的读写功能,我觉得对于多字节、变地址、变数值的读写功能是很简单的事了,无非是地址算法、形参传递的问题,所以就一步把这个程序全部改完了。可想而知,并没有达到预期的效果。对这个问题太想当然了,在前两天的调试过程中我也没有具体的调试方案,东改改西改改,改了两天也没改出个结果来,仔细一想连根本原因都没有找到。我静下心来,该如何找到原因所在呢?我给自己设计了调试方案,分为在主程序与子程序中调用读写程序,首先用单字节及多字节固定连续地址的读写,其次变地址,再次变数据。通过这三种不同的情况下程序运行情况看,在主程序中正常,在子程序中也能读写。这说明芯片控制是没有问题的。那么在完整程序中为什么不正常呢?或许和子程序调用位置有关。在主程序中运行或由主程序调用子程序运行都是正常的,但由接收程序调用就不正常了,很可能和接收程序的调用有关。于是通过设计程序进行对比,发现确实是这个原因。到这里基本上确定了问题所在,就是因为读写程序被串口中断接收子程序调用引起的。只是不明白为什么不可以,如果因为其中调用了发送子程序才导致读写问题的话,去掉向上发送这一步应该写没问题,事实上在这里写完在主程序里读时仍然不正确,而且昨天的程序中用数组的方式中转的时候也向上发送数据,发送的数据是正常的,但读写是不正确的。虽然这个原因还不明白,但程序已经找到解决办法了。
通过这次编程,我觉得单片机编程与调试要注意以下几点:(1)不要想当然,和硬件相关联的控制软件很难说硬件能按照理论情况执行,或者硬件存在一个你没有注意到的执行问题。(2)调试单片机程序要按部就班,不要跨度太大,否则一旦出现问题,会花费更多的时间。(3)遇到问题要想可能的原因都有哪些,如何设计方案进行一一验证。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-11-1 07:06
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社