當進入時鐘中斷調用SHELL函數時,如果接收到了返回的參數+CMTI,表明上位機模塊向下位機模塊發送了短信數據,可能是命令幀,也可能是確認幀或者非確認幀。在這種情況下,SHELL函數需要對短信內容進行分析,并根據短信的內容進行不同的處理,負責完成以上功能的就是ExecData函數,它是被SHELL函數調用的,用來分析并處理短信數據。
結語
通過以上的分析不難發現,整個程序錯綜復雜,函數之間相互牽扯。標志位在程序的實現過程中扮演著非常重要的角色,正是依靠這些標志位,程序才能很好地實現各個功能之間的切換,而標志位的值是通過OSM模塊返回的參數修改的。因此程序的實現過程應該是閱讀參數→修改標志位→發送指令。
主函數、時鐘中斷和串口中斷程序、SHELL函數、ExecData函數貫穿整個程序的主線和核心部分,對它們的分析可以理解程序的主體思想,這也正是筆者著重介紹的原因所在。然而這些函數和中斷程序的實現,還需要依靠其它函數的配合,比如基于I2C總線的E2PROM操作函數、字符串操作函數以及串口發送函數等,由于篇幅所限,在此不再介紹。GSM網絡本身是不完全可靠的,可能會發生幀發送錯誤、幀丟失的現象。但是由于重發、延時重發機制的存在,程序可以最大程度避免上述情況的發生。在實際應用過程中,模塊運行正常,性能穩定,實時性好。