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

COCOFLY 教程 ——瘋殼無(wú)人機(jī)·系列快速·快速上手【3】OPENMV腳本燒寫
openMV和STM32
OpenMv和STM32通信問(wèn)題
OpenMV與TC264的相關(guān)資料推薦
【瘋殼·無(wú)人機(jī)教程4】開(kāi)源編隊(duì)無(wú)人機(jī)-OPENMV 腳本燒寫
【星曈科技】OpenMv筆記——利用OpenMV與STM32進(jìn)行串口通信

STM32與openmv通信(HAL庫(kù))

OpenMV與單片機(jī)串口通信交互

OPENMV和STM32的識(shí)別追蹤小車(詳細(xì)版)之OPENMV端

OpenMV Cam上的RPC模塊
OpenMV初識(shí)

評(píng)論