標籤:嵌入式 工程師 高等數學 行列式 觸摸
原創 2016-10-25 林世霖 秘籍酷
650) this.width=650;" class="rich_media_thumb" id="js_cover" style="height:auto;" src="http://mmbiz.qpic.cn/mmbiz_jpg/d0YYOX6ZlbwoPCzkic4nNhZ5C4vkRTNO0uv8ibJyibRPCEIlgJ2Dl2iaHlz6oOibsRh9OIiaN3PGG9r6ibOYE4nIyXLeQ/640?wx_fmt=jpeg&wxfrom=5" alt="640?wx_fmt=jpeg&wxfrom=5" />
作為基本輸入裝置,觸摸板幾乎是互動式嵌入式系統的標配。當我們知道了可以通過裝置節點讀取觸摸板資料後,我們需要進一步最佳化這些直接擷取的原生資料,比如去抖、消噪、校準等。
650) this.width=650;" style="line-height:25.6px;width:auto;height:auto;" src="http://mmbiz.qpic.cn/mmbiz/d0YYOX6ZlbzCK8LUfGDunpNwYhNDj3jKKbwoZw5mQmqmuOQG3yePN3naqmZrLZ5kvicPFmzzZzUKTwjNnibK2OuQ/0?wx_fmt=gif&wxfrom=5&wx_lazy=1" alt="0?wx_fmt=gif&wxfrom=5&wx_lazy=1" />
最佳化觸摸板的 raw (原生)資料是一項十分複雜的演算法任務,涉及諸如矩陣運算、行列式等高等數學,一般需要有比較紮實的數學背景的演算法工程師來做,他們的其中一項傑出成果,便是今天要介紹的 tslib 庫了。
沒有 使用 tslib 庫之前,操作觸摸板裝置的代碼樣子是這樣的:(醜翻天!!)
650) this.width=650;" style="width:auto;height:auto;" src="http://mmbiz.qpic.cn/mmbiz_png/d0YYOX6Zlbyqqqiad245JtWKhwLMCEliaHWeibQIMMOaMj6qVW9hbwjl95bc9nfODTXstqR4vv60Lxmc2AZkKjCtw/640?wx_fmt=png&wxfrom=5&wx_lazy=1" alt="640?wx_fmt=png&wxfrom=5&wx_lazy=1" />
經過 tslib 庫整容之後,操作觸摸板的代碼是這樣子的:(美軒完!!)
650) this.width=650;" style="width:auto;height:auto;" src="http://mmbiz.qpic.cn/mmbiz_png/d0YYOX6Zlbyqqqiad245JtWKhwLMCEliaHSFvFqb4MOQpoq4YZsLnORgia2THV4tUVqogXEm6R4OQGZb0x6Rd9Gdw/640?wx_fmt=png&wxfrom=5&wx_lazy=1" alt="640?wx_fmt=png&wxfrom=5&wx_lazy=1" />
可以看到,使用了 tslib 庫之後不僅得到了各種牛逼演算法的保駕護航,而且代碼更加簡練,邏輯更加清晰,整個人瞬間變美變帥有沒有!
因此,投資點時間來搞 tslib 庫是值得的,下面以粵嵌的嵌入式課程環境為例(含粵嵌的GEC210開發板),具體操作步驟如下:
1,上網搞個源碼庫,如果你可愛到不會用百度,沒關係,戳我下載(http://download.csdn.net/detail/vincent040/9662825)。
2,將原始碼丟到Ubuntu,並通過以下命令解壓到Ubuntu的家目錄下:
tar xjvf tslib-1.4.tar.bz2 -C ~
3,進入源碼頂層目錄,依次執行如下命令:
mkdir ~/tslib
./configure --prefix=/home/xxx/tslib --host=arm-none-linux-gnueabi
make
make install
當然,我以我多年栽坑經驗告訴你,以上指令哪些地方需要注意,以便節約你寶貴的生命,沒錯請叫我雷鋒,林雷鋒。
A) --prefix= 後面的路徑就是你要安裝 tslib 庫的路徑,牆裂建議設定為家目錄下的空目錄(比如~/tslib),因為如果設定系統其它目錄的話,後期 make install 的時候會讓你解決許可權的問題,當你自作聰明地使用sudo的時候,系統卻又可能會抱怨找不到工具鏈,因此除非你是 Ubuntu科學家,對系統內容變數了如指掌,否則不要用小白的身份去作死,乖乖將 --prefix 指定為 ~/tslib 即可。
B) --host= 後面就是你工具鏈的首碼,注意別眼花寫錯了。
C) make的時候,一般會出現如下錯誤:
650) this.width=650;" style="width:auto;height:auto;" src="http://mmbiz.qpic.cn/mmbiz_png/d0YYOX6Zlbyqqqiad245JtWKhwLMCEliaHOKtdicwOllzwQrofIoY69Do16ksgmChSwibJuuWeRciaZVwpVMia1DR5bA/640?wx_fmt=png&wxfrom=5&wx_lazy=1" alt="640?wx_fmt=png&wxfrom=5&wx_lazy=1" />
這個問題怎麼解決呢?莫方,我看你有緣,今日將祖傳秘方傳授與你(默默承認我這年齡不應有的智慧和大度):那就是,將源碼頂層目錄下的 config.h檔案的第181行,刪除!然後重新 make ,問題解決。
最後,你將會在 /home/xxx/tslib 下發現如下目錄:
650) this.width=650;" style="width:auto;height:auto;" src="http://mmbiz.qpic.cn/mmbiz_png/d0YYOX6Zlbyqqqiad245JtWKhwLMCEliaHmr2hfeyf6urxc9xIXzLtYw84qGyUy2rHicH1dJ8xyY48YOb7XiaYN1Ew/640?wx_fmt=png&wxfrom=5&wx_lazy=1" alt="640?wx_fmt=png&wxfrom=5&wx_lazy=1" />
接下來,你需要想辦法,將這一堆檔案搞到開發板裡面去,一般先將它們打包壓縮,然後通過串口或者網路通訊協定傳輸到開發板,然後在開發板中解壓即可。
庫都拷貝到了開發板,是不是就萬事大吉了呢?非也,你辛辛苦苦乾的這些活兒,開發板系統是無知無覺的,你還必須這麼做:
1,將 tslib/etc/ts.config 中的第2行,由原來這個樣子:
650) this.width=650;" style="width:auto;height:auto;" src="http://mmbiz.qpic.cn/mmbiz_png/d0YYOX6Zlbyqqqiad245JtWKhwLMCEliaHOqHhgQmGtESCDvtSaZp34MvsX3adDKJ6yvPlfCzQCLwdTtEY07Kbew/640?wx_fmt=png&wxfrom=5&wx_lazy=1" alt="640?wx_fmt=png&wxfrom=5&wx_lazy=1" />
改成這個樣子:
650) this.width=650;" style="width:auto;height:auto;" src="http://mmbiz.qpic.cn/mmbiz_png/d0YYOX6Zlbyqqqiad245JtWKhwLMCEliaHB8Gia7iaaw2iaaQzG6xHFUr8Mu7IB2norv57rsvAaWcJeCkFX1nfvFqFQ/640?wx_fmt=png&wxfrom=5&wx_lazy=1" alt="640?wx_fmt=png&wxfrom=5&wx_lazy=1" />
沒錯,就是把第 2 行前面的井號 # 和空格刪除,注意,我說井號和空格,我沒說井號,好之為之。
2,在開發板系統的 /etc/profile 檔案中,增加如下內容(假設你把 tslib 庫放到了開發板的根目錄下,如果不是,以下路徑請進行相應的修改):
export TSLIB_ROOT=/tslib/lib
export TSLIB_TSDEVICE=/dev/event0
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_CONFFILE=/tslib/etc/ts.conf
export TSLIB_PLUGINDIR=/tslib/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_CALIBFILE=/tslib/calibration
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/tslib/lib
解釋一下上面的環境變數:
TSLIB_ROOT 指明TSLIB庫在開發板中的具體位置,要以實際情況為準。
TSLIB_TSDEVICE 指明開發板觸控螢幕的裝置節點檔案名稱。
TSLIB_FBDEVICE 指明開發板LCD的裝置節點檔案名稱。
TSLIB_CONFFILE 指明TSLIB庫的設定檔的具體位置,要以實際情況為準。
TSLIB_PLUGINDIR 指明TSLIB庫的外掛程式模組的具體位置,要以實際情況為準。
TSLIB_CONSOLEDEVICE 指明終端名稱,none意為讓系統自動匹配。
TSLIB_CALIBFILE 指明校本文件的位置,該檔案在執行ts_calibrate之後自動產生。
LD_LIBRARY_PATH 是開發板系統的動態庫連結路徑
3,最後的最後,重啟開發板,讓系統重新讀取 /etc/profile 檔案的內容,有必要的話執行以下 /tslib/bin/ts_calibrate 校準螢幕,大功告成(再再一次默默承認這個年紀不該有的智慧)!
嵌入式(觸摸板庫tslib的編譯和配置)