0x00 CREELINKS平臺簡介 0x00 CREELINKS平臺簡介 CREELINKS(創e聯)是由大信科技有限公司研發,集合軟硬體、操作系統、數據云儲存、開發工具於一體,用於物聯網產品的設計、研發與生產的平臺。 平臺涉及智能硬體、車聯網、智能家居、可穿戴設備、工業控制等各個物聯網領域。旨在 ...
0x00 CREELINKS平臺簡介
CREELINKS(創e聯)是由大信科技有限公司研發,集合軟硬體、操作系統、數據云儲存、開發工具於一體,用於物聯網產品的設計、研發與生產的平臺。
平臺涉及智能硬體、車聯網、智能家居、可穿戴設備、工業控制等各個物聯網領域。旨在輔助中小型企業快速完成物聯網產品原型的設計與開發;併為開源軟硬體愛好者、硬體DIY極客、教育機構等提供更高效的資源。
平臺包含通用功能模塊、操作系統、核心庫、模塊驅動庫、物聯網典型產品的解決方案及相關開發工具。
CREELINKS www.creelinks.com
0x01 處理器CeCcp資源是什麼?
CeCcp資源是CREELINKS平臺中將不同處理器平臺中計數器(脈衝計數器)的共性提取出來,整理並編寫出來的標準庫。CeAd標準庫包含了Ad操作相關的所有屬性及API介面函數,如: 開始計數、停止計數、獲得當前Ccp計數的值、清除計數等、。其標準庫的頭文件為CeCcp.h,不同處理器平臺實現的源文件名統一為CeCcp.c。
詳細介紹如下:
1、資源介紹
Creelinks平臺Ccp對象的操作頭文件,包含有關處理器平臺Ccp內容的相關操作。可能不同處理器平臺,Ccp計數的最大值有所不同,所以使用Ccp資源時,儘量使用CeMcu.h中的相關Ccp屬性巨集定義。
2、相關配置
在CeMcu.h中有與處理器平臺有關的配置項如下:
1 #define CE_CCP_MAX_COUNT (uint32)65535 /*!< CCP所支持的最大計數值*/
其中:
CE_CCP_MAX_COUNT:因受處理器的計數器硬體結構限制,不同處理器平臺的計數器可計數的最大值不同,則用戶在設定計數器的最大值時,請誤超過此值。
3、屬性對象
1 /** 2 * @brief 結構體,CCP對象可用屬性集合 3 */ 4 typedef struct 5 { 6 CE_RESOURCE ceResource; /*!< Ccp對應的資源號*/ 7 uint32 ceCntVal; /*!< 用戶設定的Ccp計數臨界值*/ 8 void* pAddPar; /*!< 空指針,可用於傳遞額外參數*/ 9 void (*callBackReachCntVal)(void* pAddPar); /*!< Ccp計數到達用戶設置的臨界值後,需要執行的回調函數*/ 10 11 CeExCcpPar ceExCcpPar; /*!< 與處理器平臺相關的額外參數結構體,用以提高代碼效率,用戶無須關註*/ 12 }CeCcp;
其中:
ceResource:對應核心模塊的Ccp資源號, 只要在核心板上,資源介面中帶C標號即可。
ceCntVal:用戶需設定的當前最大計數值,即達到此計數後即進入中斷並調用用戶提供的回調函數。
pAddPar:在調用回調函數時,傳入的對象,可指向任意值。
callBackReachCntVal:用戶需提供的當達到設定的最大計數值後,系統調用的用戶回調,此回調一般均在中斷中執行,故用戶不要在回調內做大量耗時操作,以免影響系統性能。
ceExPwmPar:用於存不同的處理器平臺,Ccp屬性對象需要的額外參數。此結構體在CeMcu.h文件中定義。
4、操作對象
1 /** 2 * @brief 結構體,CCP對象可用操作集合 3 */ 4 typedef struct 5 { 6 CE_STATUS (*initial)(CeCcp* ceCcp); /*!< @brief 初始化Ccp計數器 7 @param ceCcp:ceCcp屬性對象指針*/ 8 9 void (*start)(CeCcp* ceCcp); /*!< @brief 開始Ccp計數 10 @param ceCcp:ceCcp屬性對象指針*/ 11 12 void (*stop)(CeCcp* ceCcp); /*!< @brief 停止Ccp計數 13 @param ceCcp:ceCcp屬性對象指針*/ 14 15 uint32 (*getNowCcpCnt)(CeCcp* ceCcp); /*!< @brief 獲得當前Ccp計數的值,此值一定小於等於ceMaxCnt 16 @param ceCcp:ceCcp屬性對象指針 17 @return 獲取本次計數周期的計數值*/ 18 19 uint32 (*getAllCcpCnt)(CeCcp* ceCcp); /*!< @brief 獲得從開始計數起(調用startCcp時開始),到現在一共的計數值 20 @param ceCcp:ceCcp屬性對象指針 21 @return 獲取從開始計數到目前為止總的計數值*/ 22 23 void (*clearCcpCnt)(CeCcp* ceCcp); /*!< @brief 清除計數,從0開始重新計數 24 @param ceCcp:ceCcp屬性對象指針*/ 25 }CeCcpOpBase; 26 extern const CeCcpOpBase ceCcpOp; /*!< 所有與Ccp相關的操作*/
其中:
initial:對一個Ccp資源進行初始化,如果在CeMcu.h中的巨集定義 __CE_CHECK_PAR__處於打開狀態,則會對輸入的CeCcp屬性對象進行參數檢查。
start:開始Ccp計數,開始計數時不會重置當前的計數值。
stop:停止Ccp計數,停止後,Ccp計數器操持各個寄存器的值不變,在下次調用start時,還將會在之前的基礎上進行脈衝計數。
getNowCcpCnt:獲得當前的計數值,即在未達到用戶提供的最大計數值時,當前的計數值。一旦到達最大值後,調用回調後,則清空此值,並重新計數。
getAllCcpCnt:獲得從Ccp第一次執行start開始到目前的計數總值,除非調用clearCcpCnt,否則內部計數不會清空。
clearCcpCnt:清空有關Ccp所有的計數寄存器,全部從0開始。
5、執行流程
6、應用示例
1 /** 2 ****************************************************************************** 3 * @brief 使用流程及示常式序(基於前後臺非操作系統環境) 4 * @function 設定Ccp的最大計數值為10,並每500ms讀取當前值並通過Uart輸出到上位機 5 ****************************************************************************** 6 #include "Creelinks.h" 7 CeCcp myCcp; //Ccp屬性對象 8 uint8 ccpCount; //當前Ccp的計數值 9 10 // @brief Ccp計數器達到設置值後的事件回調 11 // @param pAddPar:Ccp對像指針里的pAddPar參數 12 void ceCcpReachCntCallBack(void* pAddPar) 13 { 14 ceSystemOp.printf("Ccp is reach setting count!\n"); 15 } 16 17 int main(void) 18 { 19 ceSystemOp.initial(); //Creelinks環境初始化 20 ceSystemOp.initialDebug(RxUart); //通過Uart串口輸出Debug信息到上位機 21 //TODO:請在此處插入模塊初始化等操作 22 myCcp.ceResource = RxC; //指定計數器資源號 23 myCcp.ceCntVal = 10; //指定計數到何值後,進入中斷回調 24 myCcp.callBackReachCntVal = ceCcpReachCntCallBack;//指定回調函數 25 myCcp.pAddPar = &myCcp; //指定屬性中空指針為本身,中斷回調中傳入此指針 26 ceCcpOp.initial(&myCcp); //初始化計數器 27 ceCcpOp.start(&myCcp); //開始計數 28 while (1) 29 { 30 ceSystemOp.mainTask(); //Creelinks環境主迴圈任務,請保證此函數能夠被周期調用 31 //TODO:請在此處插入用戶操作 32 ccpCount = ceCcpOp.getNowCcpCnt(&myCcp); //獲得當前計數值 33 ceSystemOp.printf("Ccp count is %d\n", ccpCount);//列印當前計數值 34 ceSystemOp.delayMs(500); //延時500ms 35 }; 36 } 37 ****************************************************************************** 38 */
0x02 CeCcp的註意事項
在不同處理器平臺或不同的核心板下,Ccp計數器的最大值因受計數器硬體結構限制,會有所不同。使用Ccp資源時,請註意此最大值限制! 當Ccp計數器達到用戶設置的Ccp計數臨界值時,當Ccp計數達到用戶設定的最大計數值後,系統調用用戶回調函數,此回調一般均在中斷中執行,故用戶不要在回調內做大量耗時操作,以免影響系統性能!0x03 CeCcp在不同處理器的應用實例
1、STM32平臺下的ELinkSTM核心板下使用CeCcp...。代碼及動畫效果如下:
待添加...