問題描述:全域性變數,會被莫名其妙更改!列印為50,後面做比較的時候這個值為0了。
第一,我肯定沒有犯低階錯誤,沒有其他的更改,搜尋全部**,沒有發現這個變數因為我程式問題導致不符合預期,同時找了兩位同事檢驗;第二,volatile肯定是修飾了變數的。
同時在網上搜尋了一下,並沒有得到滿意的答覆,但是可以確定的是,在使用keil 對stm32程式設計的時候,有其他人和我出現了一樣的問題。
在國外和國內看到了符合我情況描述,可是最後的原因,我實在不知,也沒得到乙個滿意的答案。
乙份程式各個變數跑得好好的,因為增加了**,然後出現了變數的未知更改。
很荒謬的是,有人說再增加一點**,它就又能正常跑了。但我確實是這樣做了之後,它還真就好了,增加的**和這個變數無關。
再其次,在使用結構體強制一位元組對齊之後,也出現過結構體中的資料不對,之後調整了結構體元素的位置,解決了這個問題,但是我強制一位元組對齊,按理說不應該有問題,程式也正常執行了很久,後面增加了**之後出現了這個問題。依舊迷惑。
我無法理解和解釋這個現象。
只能說,之後的強制一位元組對齊還是慎用,還有就是遇到c語言語法沒有錯誤的時候,多想想其他辦法,看能不能繞過這個問題,先滿足目前的需求,當然,我們最後都想知道根本原因,可由於知識的限制。。。
玩arm的想著微控制器的好,玩微控制器的時候想著要是arm我就自己完成重定位了。
在學校的時候想著上班,上班了想著學校的好。
對我的這個問題,提出我自己的假設:最可能的還是記憶體問題,其次作業系統任務切換的問題。希望有一天自己能夠明白。
最後說一句,做微控制器沒有那麼簡單,做微控制器也可以有比較不錯的工資,可做微控制器,真的沒有前途,之後或許不會怎麼玩這個了,我還是有追求的!
結題:還是記憶體溢位導致的,任務棧倒是夠得,只是我的串列埠快取陣列設定過小(這種情況下偶爾是能正常的,當執行到程式的某個地方的可能出現bug,必然我們要規避掉這種情況),擴大一倍後程式一直執行無該類現象產生了。總結就是,遇到這類問題,多半是陣列溢位或者指標亂訪問或者系統棧不夠或者任務棧不夠用。這類問題還可能會導致stm32進入硬體錯誤中斷。以後多留意該類問題。
/*2018.7.15*/
敏捷到底是什麼?
文 ivar jacobson 在支援軟體工程 比如rational統一過程rup 與敏捷陣營 比如scrum或是xp 之間,人們一直存在著衝突。也不難理解,因為這兩種方法間都是在用著彼此並不相容的方式來描述的。其實大可不必,因為他們背後的觀點全然是相輔相成的。關鍵在於該如何用對兩者來說都公平的方式...
我們到底是什麼?
我們到底是什麼?我們是一種生物電流 生物電流有幾種狀態,喜怒哀樂等,可以根據外部環境進行自我切換 該種生物電流附屬在一種器官硬體上面 我們可以從器官硬體上感知一些資訊,產生新的資訊生物電流,新產生的生物電流符合原先的標準 我們可以把資訊電流儲存在器官硬體上,但具體如何儲存等資訊無法被我們感知 我們的...
SDN到底是什麼
sdn到底是什麼?雖然這個概念已經被炒到了,但還沒有人對其給出乙個明確的概念。盛科網路總監張衛峰撰寫了自己關注sdn以來,對其認識的四個階段,最後乙個階段又回到了sdn字面的意思軟體定義網路,每個階段作者的新觀點,也會給我們帶來一些啟發。以下為原文 我對sdn的認識可以分為四個階段,最後乙個階段是在...