最近在看OpenMV的源碼,和往前一樣,經常會卡住,還是對C不夠了解,一知半解的,這些文章不以讀源碼為主,但是會寫一下我日常不見的東西。
OpenMV初體驗
OpenMV最大的賣點就是相對廉價的嵌入式機器視覺了,但是瓶頸其實在IO和運算速度上面。前者就是使用PSRAM這樣的緩沖器,后面就是使用主頻高的MCU。但是一切都有盡頭,無妨,幾十塊錢
目前官方支持得板子是這些得,別的芯片需要移植
在下載的庫里面有很多的Bin文件,這里就是說明文件的作用
這個是makefile文件里面定義要用的編譯器
這個定義的一些目錄
OMV是這個項目最重要的東西,一切魔法的起源,UVC是USB Video devices,CM4是ARM內核,還有STM32的AI應用,以及下面就是一些CMOS的驅動了,也是最重要的。
這個就是緩存器的一些操作函數,無參數無返回的,那就是過程了
這個是控制CMOS的Cambus協議,要使用IIC,這里是針對STM32的
好像是一些高級的東西
還有延時的封裝函數
STM32的片子最少都是F4的片子了
UVC在OpenMV里面是一個占比很大的部分,我為此寫了一篇沒有寫完的文章。
OMV這個文件夾就是我們OpenMV這個項目的精華所在了
這個是以字符串數組寫進去的demo
這些都是支持的傳感器,在傳感器這個目錄里面,后期擴展的話,可以按照樣式自己適配自己的傳感器。
通過寄存器,cambus協議和傳感器的頭文件連在一起
文件在這里,項目里面一些公用的函數封裝在這里
本土狗就見過這個傳感器
ov2640的一個時鐘的頻率,和對傳感器的一個初始化
這個是OV2640寄存器的定義
基本上都是宏定義了
傳感器的一個初始化,看下這個操作的結構體
這里是傳感器的ID,在結構體的一開始被定義
camsbus就是IIC的協議,上面第一個就是寫了這個IIC的協議的地址,下面按照這個結構體里面寫的是硬件的標志位,至于是什么意思,這里的注釋就寫進去了,有一些我還是看不懂的。
行同步信號回調+幀回調+看不懂+重啟
這個就是回調的一個定義,就長這樣的
私有的話,這里就是高和低我也不懂是哪里的
像素格式的功能開端,一個是YUV,可變格式,顏色,動態范圍,拜爾格式
這個是圖像的編碼格式
這個是視頻的分辨率列表
這個函數就吊了,具體其實定義就是這樣的
怎么起作用呢?就是通過參數的不同輸入達到一種不同的函數功能。
把傳感器的結構體的使用范圍擴展一下,以及使用2維數組來放分辨率的信息
下面還有一些函數,初始化有兩種,一個是狀態,一個是硬件
具體的實現,先不看。
但是可以看一下這個初始化的函數使用
結構體的值和函數的參數混在一起
每一個傳感器大概都是通過這樣的被定義
完整的傳感器結構體定義,這里就寫的很亂了,文章寫了兩天了都
傳感器的各種狀態,需要來輸出
代碼中大量看到Void*,有什么用? void*有什么用呢?實際上我們在很多接口中都會發現它們的參數類型都是void*,例如:
ssize_t read(int fd, void *buf, size_t count); void *memcpy(void *dest, const void *src, size_t n);為何要如此設計?因為對于這種通用型接口,你不知道用戶的數據類型是什么,但是你必須能夠處理用戶的各種類型數據,因而會使用void*。void*能包容地接受各種類型的指針。也就是說,如果你期望接口能夠接受任何類型的參數,你可以使用void*類型。但是在具體使用的時候,你必須轉換為具體的指針類型。例如,你傳入接口的是int*,那么你在使用的時候就應該按照int*使用。
因為這里有大量的Makefile文件,VSCode推薦這個插件
這么貴的x1c連個win11都不能裝,笑死了
文章沒有達到自己預期的樣子,寄了,國慶完了。
審核編輯:劉清
-
緩沖器
+關注
關注
6文章
1924瀏覽量
45553 -
PSRAM
+關注
關注
0文章
35瀏覽量
13374 -
openMV
+關注
關注
3文章
39瀏覽量
9827
原文標題:OpenMV-源碼細讀.1
文章出處:【微信號:TT1827652464,微信公眾號:云深之無跡】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論