除BUG記

我負責一個模塊,功能比較簡單,就是測量環境溫、濕度,外加控制空調開/關、溫度設定。就是這么幾個功能,就反復試驗、修改,才達到穩定。在調試時,出現各種各樣的BUG,一些是編程時候出現的語法錯誤,一些是功能設計不合理的原因。其中有個BUG折騰了好久,今天終于發現原因,這還是別人幫助我才解決的。下面看看這除BUG的過程:

???

空調通訊方面問題比較多:

1、起初是有時候出現空調與模塊完全不能通訊的現象;

2、出現空調與模塊單邊通訊的現象,即空調收到模塊的指令,但模塊沒有收到空調返回的信息;

3、出現空調與模塊首次上電時,情況2發生,但不重啟的情況時,第二次之后完全通訊成功(雙邊通訊)的現象。

針對情況一,通過請教OMRON公司的技術人員,我了解到溫控器接收指令與發送指令之間必須有一定的時間間隔,大概有500ms就可以了。所以我在發送數據程序中加入了500ms的延時指令,問題1情況不在出現,但隨之而來的是問題2的頻繁出現。這個問題困擾了我很長時間。在現場我做了如下試驗:

首先,斷開溫控器與模塊之間的RS485連接,然后通過usb轉串口線把溫控器與調試所用的筆記本連接起來,然后通過通過串口調試助手調試溫控器,目的是為了驗證溫控器是否能夠正常工作。經過試驗,結果表明溫控器完全能夠正常工作。電氣連接示意圖如圖1

?

1 溫控器與上位機連接

接著,斷開筆記本與溫控器的連接,然后通過usb轉串口線把模塊與調試所用的筆記本連接起來,然后通過串口調試助手調試模塊,目的是為了測試模塊軟件是否正常。經過試驗,結果表明模塊能夠成功接收到串口助手發送過來的數據。電氣連接示意圖如圖2

2? 模塊與上位機連接

最后,重新連接溫控器與模塊,上電,設置溫度,情況2再次出現。電氣連接示意圖如圖3

3 溫控器與模塊連接

同時連接溫控器、模塊、筆記本時候,則溫控器與模塊之間能夠夠正常通信。電氣連接示意圖如圖4

4 溫控器與模塊、上位機連接

到此初步估計是由于RS485接線問題,經過詢問OMRON公司技術人員可知,11時,RS485總線終端電阻(約為120歐姆)可有可無。模塊上接有終端電阻,當我嘗試去掉該電阻時,針對圖3情況時,問題2得到解決。但出現問題3

經過考慮,在模塊上電初始化中,我加入了向空調發送“開空調”程序,這段程序能夠保證每次模塊上電時都要重新開啟空調,以保證空調隨時進行接收別的指令(當空調處于“關”時,它是不工作的,即使空調已經上電)。問題3得以解決。

到這里,本以為可以結束了,其實還有很大的問題,如果在模塊上電之后才開空調的話,那么那個初始化中加入的指令就不會起作用,還是會出現問題3。這個方法治標不治本,后來,在一同事的幫助下,終于從根本上解決的問題。問題是這樣解決的,只在一個地方加了這么一條語句。

void beginSend(void)
{?
?uint8 i = 0;
?sendEnable();?//設為發送??
?TXSTAbits.TXEN = 1; //使能發送?
??? for(i=0; i< sendCount; i++)
??? {
?? TXREG? = sendBuf[i];??
?? while (!TXSTAbits.TRMT);?? //TSR為空時置TRMT = 1
??? }
??? receEnable();??? //設為接收
??? sendCount = 0;
??? receCount = 0;??? //這個很重要
??? TXSTAbits.TXEN = 0;
??? Delay10KTCYx(100);?? //延時500ms????
}

關于這個函數就不多解釋了。對比我這樣、那樣的測試,還是沒有找到錯誤的根本原因,人家只是看了一遍調試報告,就立馬找出了問題的所在。這固然有經驗的問題,但更多的是我自身對于問題的分析不夠冷靜、思維不夠嚴謹。還沒有形成自己的一套發現錯誤、分析錯誤、解決錯誤的思維體系。在遇到“比較怪”的情況時,就亂了方陣,試圖用窮舉法把可能出現錯誤的地方都測試一遍,這大大消耗了時間,并且本質上講并不能對解決問題有效的幫助。反而可能因為混亂一通的測試,遇到更多別的問題,最終偏離了正確解決問題的道路。

發現并找到一種合乎科學的編程習慣、除BUG思路是以后工作時的重中之重。

?

?

?

?

?

?

?

?

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/259156.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/259156.shtml
英文地址,請注明出處:http://en.pswp.cn/news/259156.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

正則表達式語法(轉)

正則表達式是一種文本模式&#xff0c;包括普通字符&#xff08;例如&#xff0c;a 到 z 之間的字母&#xff09;和特殊字符&#xff08;稱為“元字符”&#xff09;。模式描述在搜索文本時要匹配的一個或多個字符串。 正則表達式示例 表達式匹配 /^\s*$/ 匹配空行。 /\d{2}-…

迎戰校招訓練題

一、雙空 編譯器可以根據硬件特性選擇合適的類型長度&#xff0c;但要遵循如下限制&#xff1a;short與int類型至少為___C___位&#xff0c;long至少為__D____位&#xff0c;并且short類型不長于int類型&#xff0c;int類型不得長于long類型。 A. 4 B.8 C.16 D. 32 E. 64…

【ASP.NET Web API2】初識Web API

Web Api 是什么&#xff1f; MSDN&#xff1a;ASP.NET Web API 是一種框架&#xff0c;用于輕松構建可以訪問多種客戶端&#xff08;包括瀏覽器和移動設備&#xff09;的 HTTP 服務 百度百科&#xff1a;Web API是網絡應用程序接口。 個人理解&#xff1a;Web API 是提供給多種…

三星s8怎么分屏操作_三星手機該怎么玩?了解完這幾點用機技巧,可以輕車熟路了!...

其實對于三星這個手機品牌&#xff0c;我還是很佩服的。雖然近些年來&#xff0c;三星在國內的市場份額日漸變少&#xff0c;但是在國內的影響力依然尚存。畢竟三星手機在某些方面還是很有優勢的&#xff0c;特別是旗艦系列機型深受消費者喜愛。接下來&#xff0c;筆者就跟大家…

關于條件編譯的問題

這兩天來忙活ucos-II在PIC18fxxx系列上的移植。在編譯的時候老出現變量被多重定義的錯誤。花費了一天的功夫才成功編譯通過&#xff0c;錯誤何在&#xff1f;&#xff1f;就是因為沒有搞明白條件編譯的原理&#xff0c;二是對mcc18編譯器的特點無知。下面學習條件編譯方面的知識…

二維數組的指針復習

最近一次的考試都是指針&#xff0c;真是給我深深上了一課&#xff0c;所以我特此復習一下指針方面的知識。二維數組的指針 int a[3][4] {{1,3,5,7},{9,11,13,15},{17,19,21,23}}; 下面通過一個表來做詳細的說明&#xff1a; 訪問二維數組&#xff0c;有兩種方法&#xff0c;一…

稱重的問題

給你8顆小石頭和一架托盤天平。有7顆石頭的重量是一樣的&#xff0c;另外一顆比其他石頭略重&#xff1b;除此之外&#xff0c;這些石頭完全沒有分別。你不得假設那顆重頭到底比其他的石頭重了多少。請問&#xff1a;最少要稱量幾次&#xff0c;你才能把那顆較重的石頭找出來&a…

TIF圖像文件的讀取(c++代碼)

一 TIF圖像介紹 TIFF是最復雜的一種位圖文件格式。TIFF是基于標記的文件格式&#xff0c;它廣泛地應用于對圖像質量要求較高的圖像的存儲與轉換。由于它的結構靈活和包容性大&#xff0c;它已成為圖像文件格式的一種標準&#xff0c;絕大多數圖像系統都支持這種格式。 TIFF 是一…

g menu i meun_長沙話讀“這里”,到底是閣(gó)里還是該(gái)里

“帶籠子”、“打抱秋”……這些地道的長沙話&#xff0c;長沙人&#xff0c;你有多久沒聽過了&#xff1f;/ 長沙人&#xff0c;你還記得長沙話嗎 / “去了很多地方&#xff0c;最后還是回到了長沙”“我聽見了一句長沙話&#xff0c;就想回長沙了。”逗霸妹聽過很多人回長沙的…

git使用---工作區和暫存區

轉載于:https://www.cnblogs.com/momo-unique/articles/4380551.html

UC/OS-II的學習

粗略的的看了邵貝貝老師的那本書&#xff0c;感覺有點眉目。UC/OS-II的全局變量繁多&#xff0c;剛接觸的時候容易弄混淆&#xff0c;現在總結下&#xff1a; OSRunning&#xff1a; 用于標識多任務環境是否已經開啟運行&#xff0c;在OSStart()函數里啟動任務后就置為True。 …

偶數哥德巴赫猜想

已知不小于6的偶數都可以分成兩個素數之和。請編寫6到100000的所有偶數的分解&#xff0c;若有一個偶數可以分解成多個素數之和&#xff0c;只需寫出一種即可。 #include <iostream> #include <algorithm> using namespace std;bool isprime(int n)//判斷素數{int …

[20170420]表達式加0或者減0不一樣.txt

[20170420]表達式加0或者減0不一樣.txt --//oracle 有時候避免某個索引采用字段0或者-0的方式&#xff0c;不使用索引&#xff0c;但是兩者存在一點點區別&#xff0c;通過例子說明。 1.環境&#xff1a; SCOTTbook> &r/ver1 PORT_STRING VERSION …

MAPLAP開發環境中release模式和debug模式燒寫.hex文件的不同之處

昨天看了齊工的報告才知道release模式和debug模式燒寫.hex文件的不同。 三&#xff1a;問題分析 1. PIC系列的仿真器和集成開發環境的情況&#xff1a; Release模式和Debug模式是有區別的&#xff1b;Release模式是只把代碼燒錄到單片機的flash區內&#xff0c;上電執行&am…

JavaWeb -- Session實例 -- 自動登錄 和 防止表單重復提交(令牌產生器) MD5碼

1、 自動登錄 http://blog.csdn.net/xj626852095/article/details/16825659 2. 防止表單重復提交 表單Servlet //負責產生表單 public class FormServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletEx…

電腦常見故障處理_彩超常見故障及維修

彩超是醫學檢測手段中重要的環節之一&#xff0c;是對產婦以及對病人進行內部組織和結構觀察的重要方式之一&#xff0c;彩超應用得當可以及早的診斷出病人的疾病&#xff0c;為患者解除疾病的困擾。彩超設備是一種極為先進的診斷系統&#xff0c;一般彩超系統包括以下幾個部分…

微軟歷史最高市值是多少?

有人說微軟在1999 年 12 月達到股價歷史最高點 $58.38并不準確。我1999年12月22日增加微軟&#xff0c;公司依照1999年12月27日的價格&#xff08;119.125&#xff0c;拆股后變為59.5625&#xff09;給了我一筆期權&#xff0c;這個價格&#xff0c;成為微軟股價空前絕后最高點…

京東2016校招編程題

記得有一個大題&#xff0c;說的是給定一個n*n的矩陣&#xff0c;要求從1開始填充矩陣&#xff0c;最后的矩陣是蛇形的。即如下&#xff1a; n3, 7 8 1 6 9 2 5 4 3 n4, 10 11 12 1 9 16 13 2 8 15 14 3 7 6 5 4 給出代碼&#xff1a; #incl…

leetcode21

/*** Definition for singly-linked list.* public class ListNode {* public int val;* public ListNode next;* public ListNode(int x) { val x; }* }*/ public class Solution {public ListNode MergeTwoLists(ListNode l1, ListNode l2) {//遞歸實現鏈表合并…

springmvc02

1&#xff0c;創建實體類對象User 注意要導入 bean-validator.jar 包 package com.yangw.springmvc.entity;import org.hibernate.validator.constraints.Length; import org.hibernate.validator.constraints.NotEmpty; import org.hibernate.validator.constraints.Range; im…