原创 stm32 can總線學習筆記 can總線協議基礎 stm32 位時序配置 標準幀與拓展幀 stm32 CAN id過濾器 接收數據 NORMAL和LOOPBACK模式 NORMAL模式下收不到數據

這段時間折騰stm32與樹莓派之間的can總線通訊遇到了不少問題,樹莓派那端的已經寫在樹莓派外掛MCP2515模塊爬坑記錄裏面了。這次來總結下CAN總線協議和講講stm32如何使用CAN總線。 can總線協議基礎 首先我們來大概看看CAN總

原创 Glide源碼探究(三) - 網絡資源加載 ModelLoader的查詢與註冊 DataFetcher LoadPath 總結

系列文章: Glide源碼探究(一) - 生命週期綁定與Request創建 Glide源碼探究(二) - 內存緩存 Glide源碼探究(三) - 網絡資源加載 接着上篇筆記,按照Glide的流程查詢完內存緩存之後應該算是查詢磁盤緩存,但

原创 樹莓派外掛MCP2515模塊爬坑記錄 can驅動配置 can驅動啓動失敗 解決措施

最近由於接近放假,協調不到調板哥,於是兼職下調板的工作。雖然之前也業餘玩過樹莓派和arduino,但是由於沒有stm32的開發經驗和硬件知識的匱乏,還是遇到了很多坑。 這個can總線模塊就卡了我兩三天,由於涉及到樹莓派的配置知識,覺得有必要

原创 Glide源碼探究(二) 內存緩存 LRUCache 內存緩存整體流程 補充: 內存緩存的查詢順序

讓我們接着上一篇筆記繼續講Engine的load方法,這裏面就是Glide的資源加載流程。 public <R> LoadStatus load(...) { long startTime = VERBOSE_IS_LOGGABLE

原创 Glide源碼探究(一) Glide.with RequestManager.load RequestManager.into request的執行

蠻久之前囫圇吞棗地瞄過Glide部分源碼,最近由於某個契機又心血來潮比較系統的過了一遍它的源碼,發現它的蠻多設計還是比較有意思的。 首先Glide的使用十分簡單,只需要三行代碼就能完成圖片的下載、緩存和顯示: Glide.with(this

原创 JNI運行錯誤-符號未定義 問題還原 問題分析 so的幾個名字 問題原因

最近在弄ndk的時候遇到了個比較坑的問題,雖然最後發現原因挺低級的,但是的確花了我不少時間去查找,中間的分析手法可能不熟悉c/c++的同學會比較陌生,如果遇到的同樣問題的話會無從下手。這裏把整個分析的流程記錄下來,希望有用。 背景項目分兩個

原创 python與c/c++相互調用 ctypes cffi c/c++拓展模塊 完整demo

最近的項目使用python語言,其中一個功能需要對接c++的sdk。於是學習了下python與c/c++的相互調用方法,這裏做下筆記,方便以後查找。 python裏面調用c/c++代碼基本上有三種方式: ctypes庫、cffi庫和c/c+

原创 JNI編譯錯誤-符號未定義 Alexa rapidjson符號未定義 c/c++編譯基礎 nm命令使用

這篇筆記記錄了一次編譯問題的排查過程,還簡單介紹了一些C/C++編譯的知識,希望對jni編譯錯誤的排查能有點幫助。 沒有接觸過C/C++的安卓程序員可能在遇到so庫出現編譯問題的時候會有點束手無措,如果這個庫是公司內部開發的還能丟給負責的同

原创 Git是怎麼工作的 Git與其它版本控制系統的差異 object(對象) 引用 遠程分支 pack機制

相信大部分的程序員都會使用Git,可能使用IDE集成的可視化界面,也可能是直接用的命令行。但是可能很多人對Git的一些原理性的概念並沒有什麼瞭解,這篇博客就從Git的原理出發,講解Git的一些命令操作的底層意義,可能會讓大家使用Git的時候

原创 深挖view繪製流程(二) Choreographer DisplayEventReceiver VSync信號的讀取 VSync信號的發送 總結

Choreographer Choreographer的中文翻譯是編舞者、舞蹈編導的意思,爲什麼起這個名字呢?因爲view的刷新和舞蹈一樣是需要按着節拍來的,Choreographer就是根據VSync信號這個節拍來安排view的刷新動作。

原创 深挖view繪製流程(一) View樹的結構 ViewRootImpl佈局流程 VSync 雙緩衝 SyncBarrier機制 整體流程

view的繪製流程是安卓應用開發的基礎,但是可能很多人對它的理解可能僅限於onMeasure、onLayout、onDraw這三個方法。 我們本着刨根問底的思想,從應用層到native層,對view的繪製流程是如何調用的一探到底。 大家都知

原创 JNI內存管理 局部引用 全局引用 弱全局引用

面試的時候遇到一些候選人的簡歷上寫着熟悉jni,但是問的時候才發現對jni的瞭解僅僅是停留在java和c的方法是如何相互調用上。其實這遠遠稱不上熟悉,這篇博客就來講講jni面試中經常還會問到的內存管理問題。 首先我們知道java和c的對象是

原创 安卓特效相機(三) OpenGL ES 特效渲染 特效的實現原理 OpenGL實現 繪製與雙緩衝 完整代碼

系列文章: 安卓特效相機(一) Camera2的使用 安卓特效相機(二) EGL基礎 安卓特效相機(三) OpenGL ES 特效渲染 安卓特效相機(四) 視頻錄製 特效的實現原理 接下來這篇文章我們講下特效的具體實現原理。 由於預覽畫面的

原创 安卓特效相機(二) EGL基礎 EGL 總結

系列文章: 安卓特效相機(一) Camera2的使用 安卓特效相機(二) EGL基礎 安卓特效相機(三) OpenGL ES 特效渲染 安卓特效相機(四) 視頻錄製 上一篇文章已經和大家講解了下Camera2的使用,能夠將相機捕捉到的畫面顯

原创 安卓特效相機(四) 視頻錄製

系列文章: 安卓特效相機(一) Camera2的使用 安卓特效相機(二) EGL基礎 安卓特效相機(三) OpenGL ES 特效渲染 安卓特效相機(四) 視頻錄製 前幾篇文章已經講完了攝像頭畫面的捕捉和特效渲染,這篇文章我們來講一講最後的