6 在微控制器上使用c

2021-10-18 13:36:38 字數 2157 閱讀 2859

cuitech-軟體練習-建立通用庫-大綱 (echoiot.com)

這篇不做強制要求,感興趣的同學可以了解。

目前我接觸過的大部分微控制器ide都是支援c++的基礎特性的。(除了51

c++中相對來說更強調封裝性一點,比如類啊,namespace啊,還有inline啊

對於微控制器來說,使用c++最大的優點是可以很快速的移植網上海量的arduino庫,

因為arduino就是c++的一層介面

ps:由於微控制器並沒有很大的記憶體。也沒有專門的記憶體管理,所以一般程式設計還是推薦使用靜態的資料,不要使用malloc。即使是實時作業系統作用也不大,可以當做是了解系統的一環去學習吧。平時編寫微控制器還是少用malloc。

當你決定使用c++的時候,意味著介面層最好也是使用c++編寫的,不使用c++也是可以的,但是要被c++呼叫的標頭檔案中屬於c的內容要加上像這樣的包著

#ifdef __cplusplus

extern

"c"#endif

接下來就來嘗試把我們的整個通用庫轉換為c++吧

1.首先我在當前的例項專案上建立cpp的分支,並且子模組部分也建立了cpp專案的分支

這篇cpp教程就會在這個分支下 進行

2、把所有庫內檔案都變成cpp

3.去nativeinte***ce.h,也就是我們存放所有原生介面的標頭檔案裡。給它包上上面所說的

4.其實到此為止我們已經轉變為了c++了

5.接下來讓我們的矩陣鍵盤更加c++一點

由於矩陣鍵盤這種,一般只可能出現乙個,也就是所謂的單例,所以我這裡有兩種寫法,

乙個是namespace,乙個是class

先來試試namespace的

keypad.h中

keypad.cpp中

keypad_drv.h中

keypad_stm32h7_hal.cpp中

像這樣之後

在keypad內部邏輯呼叫內部驅動可以直接執行drv::readrow() drv::readcol()

另外順帶一提的是。像這裡mymain中的mymainevent函式是要被main.c這個c語言呼叫的。所以我們的mymain.h裡不要include一些c++的內容,我這邊為了防止混淆,把它重新命名成mymain_c.h

至此為止已經完成了。

接下來我們來試試c++的class版本的,這邊我直接複製keypad部分,並且改為classkeypad

這一次它長這樣

cpp檔案裡呢是這樣

然後去標頭檔案中新增驅動層函式

由於驅動層是不希望暴露給外部的。所以我們放在private

然後對應的cpp

那麼這裡我們怎麼去使用這個庫呢

內部直接呼叫或通過this呼叫

外部應用層

首先通過getinstance獲取單例指標,然後呼叫scan();

至此,已經完成了

卡爾曼濾波在微控制器上的使用

ifndef kalman h define kalman h extern kalmangain 卡爾曼增益 extern estimatecovariance 估計協方差 extern measurecovariance 測量協方差 extern estimatevalue 估計值 extern...

微控制器上課總結

一 繪圖,畫板 2g,3g,4g均指通道載波的頻率。手工pcb和工業 pcb的區別 1.多了一層鋪油。2.多了一層絲印。一面有,一面沒有,叫作單層版。電阻 r開頭 電容 c開頭 繪圖軟體 1.民用 protel protel99se protel dxp altium 2.軍用,公司用 cadend...

微控制器上電復位時間 微控制器的復位

一 復位電路 剛剛接通電源的微控制器內部處於不穩定的狀態,cpu無法正常運轉。因此,就需要進行微控制器狀態初始化,這就叫做復位。微控制器帶有復位訊號輸入引腳,可以將這個訊號調至低電平狀態後讓微控制器復位。也就是說通過輸入復位訊號來徹底叫醒微控制器進入工作狀態。接下來講解一下復位的時序 如下圖 只有在...