?通訊地址錯了?嚴格來說,單片機系統(tǒng)中iic總線若是要串聯(lián)多片芯片通信時,最基本的命令‘操’作流程就是發(fā)送器件地址,器件內(nèi)部的‘操’作地址和需要‘操’作的命令,若是器件地址錯了,后面的兩個數(shù)據(jù)就都會是擺設(shè)。
mpu9150這個陀螺儀是通過內(nèi)部磁場相對于地磁變化的改變來感應(yīng)各軸加速度的,內(nèi)部可以通過iic總線直接讀取因磁場變化而改變電壓的ad值,ad值有四組,這四組數(shù)據(jù)名為四元數(shù),讀出這些數(shù)據(jù)后,經(jīng)過軟件上的濾‘波’和歐拉角融合計算,就可以得到芯片三維空間上的xyz軸上的姿態(tài),同時,也可以得到三圍方向的加速度和角速度。
同時,也可以通過讀取第五組數(shù)據(jù),取得電子羅盤的對應(yīng)地磁的方向角。
完成這一切,都需要先要找到器件地址,然后再往相關(guān)的寄存器里發(fā)送指令,隨后芯片才會把數(shù)據(jù)返回回來。
但是,因為mpu9150芯片內(nèi)部還自帶了一個數(shù)據(jù)處理器,名字叫dmp,就是運動處理器,這個處理器能夠直接幫助處理器完成需要消費大量運算資源的四元數(shù)姿態(tài)融合過程,直接給處理器返回姿三軸姿態(tài)角度、三軸加速度,三向加速度和地磁角。是一個很方便的厲害的工具。
但是,在官方的reference里,提供有芯片的address。不過,在還分成了dmp處理器和直接讀取四元數(shù)ad值兩個地址。兩個地址有不同的寄存器和控制命令。藍澤光發(fā)現(xiàn),這位董晨學(xué)長用的是移植的程序,是通過dmp來讀取數(shù)據(jù)的。而他的器件地址,的宏定義,卻寫到了mpu9150的是四元數(shù)控制地址上了。
好吧,說了這么多,藍澤光只想表明一件事:那就是董晨學(xué)長你確實是‘弄’錯了。
“怎么可能!”他站起來一副就要和藍澤光撕‘逼’的樣子。
不過輪無力,他這一個常年缺乏鍛煉的弱‘雞’程序狗,怎么可能能撼動藍澤光?
“可不可能改一改就知道了!”藍澤光‘露’出一副挑戰(zhàn)的笑容。然后就在鍵盤上敲打了幾下,把程序預(yù)編譯宏命令的器件地址改掉,然后就摁下了編譯按鈕。
“臥槽都叫你不要改我程序了。等下子你改得回來嗎?你‘亂’‘弄’什么%!#¥@……”
后面的話藍澤光就自動忽略了。雖然不能說人家逗比,但藍澤光理解一個程序猿的幸苦,一般是不希望別人來‘亂’改自己辛辛苦苦寫的程序的。不過藍澤光看到這套程序,里面有一大堆的英文注視。就早知道是移植來的。
雖然移植也需要時間。但至少不會那么辛苦……
藍澤光鄙夷了一下,這時候程序編譯就完成了。0error,9arning,雖然有警告,但程序應(yīng)該能用。于是藍澤光順手就點擊了loading,編譯過可以調(diào)試的程序就下載到單片機里。復(fù)位之后,就可以在看到效果。
但是,什么效果都沒有啊喂!
“……你看到了沒有!你‘亂’改是沒有用的??禳c改回來!”學(xué)長又是一陣‘激’動,然后就伸手想要去拉藍澤光的肩膀。一副暴力的模樣。
“也許是學(xué)長你移植得有問題呢?”藍澤光聳了聳肩,動了動肩膀,把他的手拍開。
“別鬧,怎么可能!”董晨學(xué)長繼續(xù)伸出手,一點都不憐香惜‘玉’的想要把藍澤光推開。
“怎么不可能,我來看看!”藍澤光自信滿滿的說,然后再一次把這位學(xué)長推開了。
“臥……這里是我的位置學(xué)妹你快點走吧!到時候我把程序‘弄’好移植正常了我給你好不好!”看著自己拼不過藍澤光的樣子,這位障崩潰般的嘆著。
“反正我也要研究,我先來看看?!彼{澤光白了他一眼,然后就撐著桌子,聚‘精’會神盯著那位學(xué)長的屏幕。學(xué)長就快要發(fā)飆了,又一次不知好歹的拉住了藍澤光的肩膀,說:“喂!你叫藍澤光是吧?別以為你是‘女’人我就不敢打你啊!”
“……”對于戰(zhàn)斗力不足半只鵝的acer程序猿,藍澤光根本就不怕他。她一邊盯著屏幕找bug,一邊調(diào)侃著這位學(xué)長,說:“學(xué)長啊,你總是這樣難怪找不到‘女’朋友。都說程序猿沒有‘女’朋友,是不是就是因為你這怪脾氣呢?如果再加上acer的身份,那就更沒有‘女’朋友了!”
這不,藍澤光瞟了瞟這位學(xué)長在a上看的視頻,是vand的fa樂譜,他沒有開外放,但估計耳機里的聲音會很愉悅。
都說,acer沒有‘女’朋友的事實會給諸位acer會心一擊,董晨學(xué)長也是如此。他被藍澤光這么一吐槽,立刻就想到了什么似的扶住了額頭。他這是在反???不,沒有‘女’朋友就是沒有‘女’朋友,他才不會反省什么,死腦筋繼續(xù)爆發(fā)。
“擦!誰要你管了!”
“如果不是學(xué)長你把9150拿走了我才不管你呢!”藍澤光攏了攏,耳邊的頭發(fā),然后就在那九個程序警報當中,找到了一些倪端。
在程序員的世界里,不同變量類型可能會讓數(shù)據(jù)引起沖突。雖然有一些數(shù)據(jù)能夠強制轉(zhuǎn)換,但這可能會有一些靈異的情況。比如在某些編譯器里,u8和char是同樣一個變量,但有時候,卻又有點不同。
董晨學(xué)長的9個警告就出現(xiàn)在這里,融合數(shù)據(jù)的iic總線指針用了兩種相似,但卻又表示不同的變量。藍澤光就拉出鍵盤把他改出來。
“你干嘛你干嘛!”看到藍澤光又要動手動腳的,活該米‘女’朋友的董晨學(xué)長又急了。
“我?guī)湍惆製8改成char讓警告沒有你還不感謝我?”改完,編譯,依舊有警告,不過這些警告的內(nèi)容是定義的變量沒有被使用,這是無關(guān)緊要的事情。藍澤光再編譯,再次載入單片機,但是調(diào)試軟件上依舊沒有數(shù)據(jù)輸出。
“你‘弄’啥‘弄’啥!越改越‘亂’了!臥槽!你還更逗一點!”董晨學(xué)長就站在藍澤光身后,看著就快要殺人了。他旁邊的同學(xué)干笑著拉住了他,說:“董晨啊,你就讓讓學(xué)妹嘛,發(fā)什么火呢,有話好好說呢!”
“讓‘毛’??!”這家伙還在發(fā)飆。
而這時候,小伙伴就把他扯了出去。
“喂!你對一妹子急啥急啊?我還巴不得人家來幫我改程序呢!改得‘亂’七八糟的我還樂意,你腦子是不是有問題了啊?”
“你才有問題!”董晨學(xué)長狠狠的瞪了一眼自己的小伙伴。
“那啥,我在想,你是不是大智若愚的吸引人家學(xué)妹的關(guān)注???再怎么著人家也是笑校‘花’級的,雖然是有男朋友了……”一邊說著,他就一邊看著坐在藍澤光座位旁邊翹著二郎‘腿’看書的路西法。
唉,可愛的‘女’孩子和可愛的男孩子的組合,真是太耀眼了。偽百合的世界就在眼前,對于一個宅男來說,簡直就是要把靈魂獻給路西法的好機會。
不過,董晨可一點都不是大智若愚,他就純粹是一活該沒有‘女’朋友的傻‘逼’。他一臉古怪的看著自己的小伙伴,大吼著:“你腦子一定是不正常了,思維怎么那么跳脫呢?我怎么可能會對那種胡攪蠻纏的‘女’生感興趣?”
“……活該你沒有‘女’朋友!”
“你們強調(diào)這么多次是不是說好了的啊啊‘混’蛋!”
……
不得不說,學(xué)長的小伙伴把他拉出去后,藍澤光就能靜下心來看了看他的程序。因為是移植的,所以按照腦子里“老教授”的經(jīng)驗,藍澤光很快就找到了可能出現(xiàn)的位置。那就是移植程序和原生程序‘交’叉的地方,是自己書寫的iic總線控制程序,和移植的程序的iic總線。
移植部分的程序董晨打了注釋,不過通過對比,藍澤光也能看得出來。
——問題出在這里!
移植的程序在iic總線初始化的設(shè)置上有問題。
可能是因為平日里很少會在iic總線上加掛一堆ic芯片的原因,董晨的程序的iic總線初始化是mòrèn“單掛載”的,也就是說,這樣的iic程序可以跳過芯片地址應(yīng)答的步驟。藍澤光找到了宏定義部分的注釋,很快就改掉了。
編譯,編譯完成。0error,,然后點擊了loading的按鈕,程序就下載到了單片機里。
而就在這個時候,董晨就掙脫了小伙伴的糾纏,牛氣哄哄的從實驗室外走了回來,然后就看到了眼前的一幕。
藍澤光撥‘弄’著陀螺儀芯片,然后屏幕上就顯示出了dmp控制器直接反饋回來的姿態(tài)數(shù)據(jù),一些都很和諧。
“……”董晨瞪呆了眼睛。
當然,他是不會不服的。程序員除了沒有‘女’朋友,還有一個特質(zhì)——就是對技術(shù)的狂熱。
“你這是怎么做到的?”這位學(xué)長,一下子就掃除了之前的煩躁,一下子就狂熱湊到了藍澤光的面前。然后,就是程序猿只見的話題了。十分鐘后,藍澤光講清楚了問題的所在,然后就從包包里‘抽’出了u盤,說。
“學(xué)長,程序我可以拿走吧!”
“哦……”董晨還在藍澤光的清晰的講解中回味無窮。然后聽到藍澤光變換話題,才猛地一驚。
“我……我去!你怎么可能會能找到這個bug!”(未完待續(xù)……)