最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

如何用分解問(wèn)題的方法來(lái)調(diào)試——調(diào)試思路02

2019-05-09 08:34 作者:凍吃打吃  | 我要投稿

上文提到:

調(diào)試的核心的目標(biāo)只有一個(gè),那就是盡可能精確地鎖定到?jīng)Q定性的錯(cuò)誤因素.
而核心的手段也只有一個(gè),那就是分解問(wèn)題.李昂1998,公眾號(hào):吉大儀電216小論壇硬件調(diào)試和軟件調(diào)試的一點(diǎn)點(diǎn)微小的思路1


由上文可知,只有找到?jīng)Q定性的錯(cuò)誤因素,才能避免該換電源的時(shí)候換了燈絲,該換燈絲的時(shí)候換了開(kāi)關(guān),該換開(kāi)關(guān)的時(shí)候換了電源.....最后解決問(wèn)題的效率極慢甚至徒勞無(wú)功.

那么如何找到?jīng)Q定性的錯(cuò)誤因素呢?,如上文開(kāi)頭所,核心手段就是分解問(wèn)題.

分解問(wèn)題大體上可以分為兩種:

????分解串行問(wèn)題的斷點(diǎn)調(diào)試方法

?? ?分解并行問(wèn)題的對(duì)照試驗(yàn)方法.

一.分解串行問(wèn)題的斷點(diǎn)調(diào)試方法

串行問(wèn)題發(fā)生在流程式的系統(tǒng)當(dāng)中,流程怎么理解呢?就是有順序的,按步驟地實(shí)現(xiàn)特定的功能,有明顯的先后之分.

拿“陀螺儀數(shù)據(jù)顯示”這個(gè)小系統(tǒng)為例,這就是一個(gè)典型的流程式的系統(tǒng).

第一步,陀螺儀初始化.

第二步,陀螺儀測(cè)量到姿態(tài)信息.

第三步,陀螺儀編碼姿態(tài)信息.

第四步,陀螺儀發(fā)送姿態(tài)信息.

第五步,上位機(jī)接收姿態(tài)信息.

第六步,上位機(jī)解碼姿態(tài)信息.

第七步,上位機(jī)顯示姿態(tài)信息.

每一步之間有嚴(yán)格的先后關(guān)系,前一步不成功,后面的步驟哪怕都沒(méi)問(wèn)題,最后的結(jié)果也一定不正確.

如果你看到了最后的現(xiàn)象是“上位機(jī)不顯示姿態(tài)信息”,那么在進(jìn)一步調(diào)試系統(tǒng)之前,你面臨的困境就是“每一步都可能出問(wèn)題”.而且如果上一步存在問(wèn)題,無(wú)論下一步是否存在問(wèn)題,總的現(xiàn)象都是有問(wèn)題.

這時(shí)就需要用到“斷點(diǎn)”的調(diào)試方法,或者廣義一點(diǎn)說(shuō),是斷點(diǎn)式的調(diào)試思想.

最顯而易見(jiàn)的斷點(diǎn)調(diào)試方法,就是在程序里面打斷點(diǎn),不必多說(shuō).除此之外,還有斷點(diǎn)思想的廣義調(diào)試方法,不僅可以打程序斷點(diǎn),還可以打物理斷點(diǎn)(字面意義上把導(dǎo)線斷開(kāi)),還可以打數(shù)學(xué)斷點(diǎn)(對(duì)求解的多個(gè)步驟依次驗(yàn)算)等等.只要是針對(duì)串行問(wèn)題的步驟分解方法,都能夠叫做斷點(diǎn)思想的廣義調(diào)試方法.

斷點(diǎn)思想的廣義調(diào)試方法是解決串行問(wèn)題的基本方法.

二.分解并行問(wèn)題的對(duì)照試驗(yàn)方法

并行問(wèn)題發(fā)生在有應(yīng)該相互獨(dú)立的多個(gè)部分的系統(tǒng)當(dāng)中,說(shuō)并行問(wèn)題發(fā)生在相互獨(dú)立的多個(gè)部分是很好理解的,但是為什么有多了應(yīng)該兩個(gè)字呢?

這是因?yàn)?,如果系統(tǒng)的各個(gè)應(yīng)該相互獨(dú)立的多個(gè)部分真的相互獨(dú)立,完全不會(huì)互相影響,那么就不會(huì)出現(xiàn)并行問(wèn)題了.并行問(wèn)題的本質(zhì),就是本來(lái)應(yīng)該相互獨(dú)立的多個(gè)部分,實(shí)質(zhì)上并沒(méi)有相互獨(dú)立,而他們之間的我們不希望的相互影響,正是造成并行問(wèn)題的根本原因.

對(duì)照試驗(yàn)方法正是探究多個(gè)部分的相互影響的一個(gè)重要手段,對(duì)照試驗(yàn)本身也極大地推動(dòng)了人類認(rèn)識(shí)自然的偉大進(jìn)程.

拿“stm32控制步進(jìn)電機(jī)并顯示”這個(gè)小系統(tǒng)為例,這就是一個(gè)典型的存在并行部分的系統(tǒng).

部分一:stm32控制步進(jìn)電機(jī)的轉(zhuǎn)速

部分二:stm32控制OLED顯示當(dāng)前的轉(zhuǎn)速

我們希望的是,這兩個(gè)部分完全不相互影響,也就是應(yīng)該獨(dú)立,而當(dāng)這樣的系統(tǒng)出現(xiàn)bug時(shí),就要考慮各個(gè)并行部分是否實(shí)際獨(dú)立了.

這個(gè)時(shí)候就可以設(shè)計(jì)以下的一組對(duì)照試驗(yàn),來(lái)判斷是否出現(xiàn)了并行問(wèn)題:

實(shí)驗(yàn)一:stm32控制步進(jìn)電機(jī),但不控制OLED.

實(shí)驗(yàn)二:stm32控制OLED,但不控制步進(jìn)電機(jī).

實(shí)驗(yàn)三:stm32既控制步進(jìn)電機(jī),又控制OLED.

如果實(shí)驗(yàn)三的結(jié)果是無(wú)法同時(shí)工作,實(shí)驗(yàn)一和實(shí)驗(yàn)二的結(jié)果是可以單獨(dú)工作,那么就很明顯,這個(gè)系統(tǒng)出現(xiàn)了并行問(wèn)題,這個(gè)時(shí)候我們就要著重考察這兩個(gè)部分所占用的共同資源(如標(biāo)志位、CPU資源等)和各部分控制的全局因素(如全局延時(shí)、更改全局變量等).

如果實(shí)驗(yàn)一或者實(shí)驗(yàn)二其中一個(gè)無(wú)法單獨(dú)工作,那么無(wú)法判斷現(xiàn)在是否出現(xiàn)并行問(wèn)題,應(yīng)該先保證各個(gè)部分能夠獨(dú)立工作.

實(shí)際中的系統(tǒng)往往是串行問(wèn)題和并行問(wèn)題混雜的,經(jīng)常是多個(gè)串行問(wèn)題形成的步驟鏈彼此是應(yīng)該相互獨(dú)立的,因此,斷點(diǎn)調(diào)試方法和對(duì)照試驗(yàn)方法都需要靈活掌握.

如何用分解問(wèn)題的方法來(lái)調(diào)試——調(diào)試思路02的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
农安县| 德清县| 张家港市| 锡林郭勒盟| 合江县| 长岛县| 丰都县| 贵溪市| 安化县| 郯城县| 唐河县| 蓝山县| 汕头市| 鹿邑县| 许昌县| 济宁市| 株洲市| 登封市| 郯城县| 二手房| 乌鲁木齐县| 松阳县| 滁州市| 仪征市| 永嘉县| 冀州市| 台中市| 陆川县| 宁海县| 青铜峡市| 海南省| 上高县| 石楼县| 正宁县| 临颍县| 荣昌县| 林西县| 长宁县| 二连浩特市| 墨脱县| 绥宁县|