国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【嵌入式項(xiàng)目應(yīng)用】__用于搭建調(diào)試輸出、建立時(shí)間系統(tǒng)的嵌入式框架“Zorb Framework”

這篇具有很好參考價(jià)值的文章主要介紹了【嵌入式項(xiàng)目應(yīng)用】__用于搭建調(diào)試輸出、建立時(shí)間系統(tǒng)的嵌入式框架“Zorb Framework”。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

一、什么是Zorb?

二、嵌入式環(huán)境搭建

三、調(diào)試輸出

四、實(shí)現(xiàn)斷言

五、建立時(shí)間系統(tǒng)

六、結(jié)束語

(* ̄︶ ̄)創(chuàng)作不易!期待你們的?點(diǎn)贊、收藏和評(píng)論喔。


一、什么是Zorb?

Zorb Framework是一個(gè)基于面向?qū)ο?/strong>的思想來搭建一個(gè)輕量級(jí)的嵌入式框架。

搭建Zorb Framework的目的是為在不能運(yùn)行Linux的芯片上快速開發(fā)應(yīng)用,不用反復(fù)造輪子。

Zorb Framework的初步設(shè)計(jì)功能有:

  1. 時(shí)間系統(tǒng)功能zf_time
  2. 環(huán)形緩沖區(qū)功能zf_buffer
  3. 列表功能zf_list
  4. 狀態(tài)機(jī)功能zf_fsm
  5. 事件功能zf_event
  6. 定時(shí)器功能zf_timer
  7. 任務(wù)功能zf_task

前6個(gè)功能,就可以實(shí)現(xiàn)純事件驅(qū)動(dòng)的程序,基本可以滿足中小型嵌入式應(yīng)用程序開發(fā)的需求。加上任務(wù)功能,是為了滿足部分程序?qū)?shí)時(shí)性要求較高的需求。當(dāng)然,也可以將前6個(gè)功能裁剪出來,然后運(yùn)行在現(xiàn)有的嵌入式系統(tǒng)上面,這樣子也可以滿足實(shí)時(shí)性的需求。

二、嵌入式環(huán)境搭建

采用?STM32F429?開發(fā)板作為硬件運(yùn)行環(huán)境,硬件資源用到串口1systick,

其中串口1:提供調(diào)試打印功能,systick:提供系統(tǒng)時(shí)間計(jì)數(shù)功能。

【嵌入式項(xiàng)目應(yīng)用】__用于搭建調(diào)試輸出、建立時(shí)間系統(tǒng)的嵌入式框架“Zorb Framework”,嵌入式開發(fā),STM32系列單片機(jī)開發(fā),單片機(jī),嵌入式硬件,嵌入式軟件框架,Zorb,stm32,物聯(lián)網(wǎng),人工智能

關(guān)于硬件環(huán)境的搭建不多說,可以參照開發(fā)板提供的例程來搭建,板級(jí)初始化完成了調(diào)試串口和systick的初始化。

/******************************************************************************
 * 描述  :硬件環(huán)境初始化
 * 參數(shù)  :無
 * 返回  :無
******************************************************************************/
void BSP_init(void)
{
    /* 嵌套向量中斷控制器組選擇 */
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

    /* 初始化調(diào)試串口 */
    Debug_USART_init();

    /* Systick初始化 */
    SystemTick_init();
}

/******************************************************************************
 * 描述  :硬件底層程序
 * 參數(shù)  :無
 * 返回  :無
******************************************************************************/
void BSP_process(void)
{

}

三、調(diào)試輸出

開發(fā)一個(gè)程序,最開始也最重要的是搭建調(diào)試的環(huán)境,我們采用串口1作為調(diào)試輸出(printf映射),然后調(diào)試信息分為三個(gè)等級(jí),后續(xù)上位機(jī)可以根據(jù)不同等級(jí)進(jìn)行高亮提示:

?

/**
  *****************************************************************************
  * @file    zf_debug.h
  * @author  Zorb
  * @version V1.0.0
  * @date    2018-06-28
  * @brief   調(diào)試輸出的頭文件
  *****************************************************************************
  * @history
  *
  * 1. Date:2018-06-28
  *    Author:Zorb
  *    Modification:建立文件
  *
  *****************************************************************************
  */

#ifndef __ZF_DEBUG_H__
#define __ZF_DEBUG_H__

#ifdef __cplusplus
extern "C" {
#endif

#include "stdio.h"
#include "stdbool.h"

#define LOG_D 0; /* 信息等級(jí):正常 */
#define LOG_W 1; /* 信息等級(jí):告警 */
#define LOG_E 2; /* 信息等級(jí):錯(cuò)誤 */

#define _ZF_DEBUG             /* 定義調(diào)試功能 */
#define ZF_DEBUG_ON true      /* 啟用調(diào)試功能 */

#ifdef _ZF_DEBUG
    #if ZF_DEBUG_ON
        #define ZF_DEBUG(rank, x...) do     \
        {                                   \
            char code[10] = "[rank=0]";     \
            code[6] = '0' + (char)rank;     \
            if (code[6] != '0')             \
            {                               \
                printf("%s", code);         \
            }                               \
            printf(x);                      \
        } while(0)
    #else
        #define ZF_DEBUG(rank, x...)
    #endif /* ZF_DEBUG_ON */
#endif /* _ZF_DEBUG */

#ifdef __cplusplus
}
#endif

#endif /* __ZF_DEBUG_H__ */

/******************************** END OF FILE ********************************/

四、實(shí)現(xiàn)斷言

在開發(fā)過程中,在關(guān)鍵地方進(jìn)行一些斷言,可以方便定位bug。

/**
  *****************************************************************************
  * @file    zf_assert.h
  * @author  Zorb
  * @version V1.0.0
  * @date    2018-06-28
  * @brief   斷言的頭文件
  *****************************************************************************
  * @history
  *
  * 1. Date:2018-06-28
  *    Author:Zorb
  *    Modification:建立文件
  *
  *****************************************************************************
  */

#ifndef __ZF_ASSERT_H__
#define __ZF_ASSERT_H__

#ifdef __cplusplus
extern "C" {
#endif

#include "stdint.h"

#define _ZF_ASSERT              /* 定義斷言功能 */
#define ZF_ASSERT_ON true       /* 啟用斷言功能 */

#ifdef _ZF_ASSERT
    #if ZF_ASSERT_ON
         #define ZF_ASSERT(expression_) ((expression_) ?\
            (void)0 : ZF_assertHandle((uint8_t *)__FILE__, (int)__LINE__));
    #else
         #define ZF_ASSERT(expression_)
    #endif /* ZF_ASSERT_ON */
#endif /* _ZF_ASSERT */

/* 斷言產(chǎn)生時(shí)的處理 */
void ZF_assertHandle(uint8_t *pFileName, int line);

#ifdef __cplusplus
}
#endif

#endif /* __ZF_ASSERT_H__ */

/******************************** END OF FILE ********************************/

斷言的處理很簡(jiǎn)單,就是告訴我們?cè)谀膫€(gè)文件哪一行出錯(cuò)就可以,實(shí)現(xiàn)如下

/**
  *****************************************************************************
  * @file    zf_assert.c
  * @author  Zorb
  * @version V1.0.0
  * @date    2018-06-28
  * @brief   斷言的實(shí)現(xiàn)
  *****************************************************************************
  * @history
  *
  * 1. Date:2018-06-28
  *    Author:Zorb
  *    Modification:建立文件
  *
  *****************************************************************************
  */

#include "zf_assert.h"
#include "zf_debug.h"

/******************************************************************************
 * 描述  :斷言產(chǎn)生時(shí)的處理
 * 參數(shù)  :(in)-pFileName 文件名
 *         (in)-line 行數(shù)
 * 返回  :無
******************************************************************************/
void ZF_assertHandle(uint8_t *pFileName, int line)
{
    ZF_DEBUG(LOG_E, "file:%s line:%d:asserted\r\n", pFileName, line);

    while (1);
}

/******************************** END OF FILE ********************************/

五、建立時(shí)間系統(tǒng)

為了減少框架對(duì)資源的消耗,所以初步設(shè)定框架的最小時(shí)間周期為1ms,因此我們需要設(shè)置systick的定時(shí)周期為1ms,然后每次進(jìn)入中斷為我們的框架計(jì)數(shù)即可。?

/******************************************************************************
 * 描述  :SysTick中斷服務(wù)程序
 * 參數(shù)  :無
 * 返回  :無
******************************************************************************/
void SysTick_Handler(void)
{
    /* 為zorb framework提供計(jì)時(shí) */
    ZF_timeTick();
}

現(xiàn)在時(shí)間系統(tǒng)提供的功能比較基礎(chǔ),只有系統(tǒng)滴答計(jì)數(shù)和系統(tǒng)死等待延時(shí),后面我們開發(fā)定時(shí)器功能和任務(wù)功能的時(shí)候會(huì)重新擴(kuò)展時(shí)間系統(tǒng)。

/**
  *****************************************************************************
  * @file    zf_time.h
  * @author  Zorb
  * @version V1.0.0
  * @date    2018-06-28
  * @brief   系統(tǒng)時(shí)間的頭文件
  *****************************************************************************
  * @history
  *
  * 1. Date:2018-06-28
  *    Author:Zorb
  *    Modification:建立文件
  *
  *****************************************************************************
  */

#ifndef __ZF_TIME_H__
#define __ZF_TIME_H__

#ifdef __cplusplus
extern "C" {
#endif

#include "stdbool.h"
#include "stdint.h"

/* 系統(tǒng)滴答周期(ms) */
#define ZF_TICK_PERIOD 1

/* 獲取系統(tǒng)滴答數(shù) */
#define ZF_SYSTICK() ZF_getSystemTick()

/* 獲取系統(tǒng)時(shí)間(ms) */
#define ZF_SYSTIME_MS() ZF_getSystemTimeMS()

/* 系統(tǒng)延時(shí)(ms) */
#define ZF_DELAY_MS(ms_) do                            \
{                                                      \
    if (ms_ % ZF_TICK_PERIOD)                          \
    {                                                  \
        ZF_delayTick((ms_ / ZF_TICK_PERIOD) + 1);      \
    }                                                  \
    else                                               \
    {                                                  \
        ZF_delayTick(ms_ / ZF_TICK_PERIOD);            \
    }                                                  \
} while(0)

/* 獲取系統(tǒng)滴答數(shù) */
uint32_t ZF_getSystemTick(void);

/* 獲取系統(tǒng)時(shí)間(ms) */
uint32_t ZF_getSystemTimeMS(void);

/* 系統(tǒng)延時(shí) */
void ZF_delayTick(uint32_t tick);

/* 系統(tǒng)滴答程序(需掛在硬件的時(shí)間中斷里邊) */
void ZF_timeTick (void);

#ifdef __cplusplus
}
#endif

#endif /* __ZF_TIME_H__ */

/******************************** END OF FILE ********************************/

?

六、結(jié)束語

本篇實(shí)現(xiàn)的功能比較基礎(chǔ),但是整個(gè)框架開發(fā)的根基,后面所有擴(kuò)展的功能都需要在此環(huán)境下進(jìn)行開發(fā)。搭建良好的調(diào)試輸出環(huán)境,可以幫我們快速定位bug的所在,從而提高開發(fā)效率。

Zorb Framework github:https://github.com/54zorb/Zorb-Framework


(* ̄︶ ̄)創(chuàng)作不易!期待你們的?點(diǎn)贊、收藏和評(píng)論喔。

本文來源網(wǎng)絡(luò),免費(fèi)分享知識(shí),版權(quán)歸原作者所有。如涉及作品版權(quán)問題,請(qǐng)聯(lián)系我進(jìn)行刪除!文章來源地址http://www.zghlxwxcb.cn/news/detail-736286.html

到了這里,關(guān)于【嵌入式項(xiàng)目應(yīng)用】__用于搭建調(diào)試輸出、建立時(shí)間系統(tǒng)的嵌入式框架“Zorb Framework”的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 用于時(shí)間觸發(fā)的嵌入式軟件的IDE

    用于時(shí)間觸發(fā)的嵌入式軟件的IDE

    TTE Systems的RapidiTTy IDE為希望創(chuàng)建“時(shí)間觸發(fā)”微控制器軟件以提高整體系統(tǒng)可靠性的開發(fā)人員提供了一個(gè)獨(dú)立的環(huán)境。RapidiTTy(下面的圖1)旨在解決深度嵌入的應(yīng)用,包括醫(yī)療,國防,汽車和工業(yè)部門以及白色和棕色商品中的控制和監(jiān)視操作。 時(shí)間觸發(fā)(TT)系統(tǒng)的關(guān)鍵特征

    2024年02月07日
    瀏覽(23)
  • 【C語言】嵌入式C語言項(xiàng)目管理利器:深入理解Makefile的應(yīng)用與實(shí)踐

    【C語言】嵌入式C語言項(xiàng)目管理利器:深入理解Makefile的應(yīng)用與實(shí)踐

    目錄 一、makedile的概述 1、案例引入 2、makefile? 3、Makefile優(yōu)點(diǎn) 二、makefile的語法規(guī)則? 1、語法規(guī)則 2、簡(jiǎn)單實(shí)戰(zhàn) 三、makefile的變量 1、自定義變量 2、系統(tǒng)環(huán)境變量 3、預(yù)定義變量 4、高級(jí)makefile gcc a.c b.c c.c ‐o main 如果只修改了b.c 使用gcc編譯 需要對(duì)所有文件重新編譯。makefi

    2024年02月15日
    瀏覽(22)
  • LDGRB-01 用于在邊緣處理人工智能的嵌入式硬件

    LDGRB-01 用于在邊緣處理人工智能的嵌入式硬件

    LDGRB-01 ?用于在邊緣處理人工智能的嵌入式硬件商業(yè)和企業(yè)中的IT系統(tǒng)正在全面快速發(fā)展,一個(gè)不斷增長的趨勢(shì)正在將計(jì)算能力推向邊緣。Gartner預(yù)測(cè),到2025年,邊緣計(jì)算將處理75%的數(shù)據(jù)由所有用例產(chǎn)生,包括工廠、醫(yī)療保健和運(yùn)輸中的用例。您可以將邊緣計(jì)算的采用與人工智

    2024年02月07日
    瀏覽(21)
  • 【嵌入式項(xiàng)目應(yīng)用】__物聯(lián)網(wǎng)小知識(shí):不同通訊線的通訊距離是多少,你知道嗎?

    【嵌入式項(xiàng)目應(yīng)用】__物聯(lián)網(wǎng)小知識(shí):不同通訊線的通訊距離是多少,你知道嗎?

    目錄 前言 不同協(xié)議通訊線的傳輸距離? 無線傳輸協(xié)議與距離 1. 藍(lán)牙 2. Zigbee 3. LoRa 4. Wi-Fi 5. 蜂窩網(wǎng)絡(luò) 6. Sigfox 7. LoRaWAN (* ̄︶ ̄)創(chuàng)作不易!期待你們的?點(diǎn)贊、收藏和評(píng)論喔。? 在物聯(lián)網(wǎng)中,通訊線的作用是 傳輸數(shù)據(jù) 、 信號(hào) 和 電能 ,以便在設(shè)備之間建立通信鏈路。 常見的

    2024年02月05日
    瀏覽(19)
  • 嵌入式軟件調(diào)試與驗(yàn)證4自動(dòng)重現(xiàn)和分析嵌入式軟件中的Bug

    嵌入式軟件調(diào)試與驗(yàn)證4自動(dòng)重現(xiàn)和分析嵌入式軟件中的Bug

    嵌入式軟件的重要性逐年增加。ISO26262標(biāo)準(zhǔn)的最高安全級(jí)別要求十個(gè)9小時(shí)內(nèi)無故障運(yùn)行。然而,歷史上的一些項(xiàng)目表明,即使進(jìn)行了全面的測(cè)試,多年來仍有許多錯(cuò)誤未被發(fā)現(xiàn)。航天飛機(jī)的控制計(jì)算機(jī)僅有50萬行源代碼,卻經(jīng)過了長達(dá)8年的測(cè)試,每行源代碼耗資1000美元,即總

    2024年02月08日
    瀏覽(19)
  • 【嵌入式Android各種調(diào)試命令】

    pm工具為包管理(package manager)的簡(jiǎn)稱,可以使用pm工具來執(zhí)行應(yīng)用的安裝和查詢應(yīng)用包的信息、系統(tǒng)權(quán)限、控制應(yīng)用。pm工具是Android開發(fā)與測(cè)試過程中必不可少的工具。通常放置在System/bin下。 這個(gè)命令可以查看到apk的包名,版本信息,啟動(dòng)活動(dòng),SDK版本,權(quán)限信息,目標(biāo)設(shè)備

    2024年01月20日
    瀏覽(60)
  • 嵌入式軟件調(diào)試與驗(yàn)證2仿真

    嵌入式軟件調(diào)試與驗(yàn)證2仿真

    目前的EDA環(huán)境提供了各種固件調(diào)試方法。通常可以使用以下方法之一: 使用硬件的SystemC模型進(jìn)行仿真 這可以在不接觸硬件的情況下盡早開始固件開發(fā),并在假設(shè)模型準(zhǔn)確的情況下測(cè)試代碼的功能。主要局限是缺乏系統(tǒng)視圖和(取決于模型的準(zhǔn)確性)缺乏硬件時(shí)序準(zhǔn)確性(行

    2024年02月08日
    瀏覽(14)
  • 嵌入式軟件調(diào)試與驗(yàn)證1概述

    嵌入式軟件調(diào)試與驗(yàn)證1概述

    近年來,嵌入式系統(tǒng)(ES Embedded systems)因其靈活的操作和可能性而被廣泛應(yīng)用于電子系統(tǒng)行業(yè)。嵌入式系統(tǒng)由硬件、軟件和其他模塊(如機(jī)械)組成,旨在作為更大系統(tǒng)的一部分執(zhí)行特定任務(wù)。網(wǎng)絡(luò)物理系統(tǒng)(CPS Cyber-Physical System)和物聯(lián)網(wǎng)(IoT Internet of Things)等重要的新概

    2024年02月08日
    瀏覽(22)
  • C/C++|物聯(lián)網(wǎng)開發(fā)入門+項(xiàng)目實(shí)戰(zhàn)|函數(shù)輸入與輸出|值傳遞|地址傳遞|連續(xù)空間的傳遞|嵌入式C語言高級(jí)|C語言函數(shù)的使用-學(xué)習(xí)筆記(11)

    C/C++|物聯(lián)網(wǎng)開發(fā)入門+項(xiàng)目實(shí)戰(zhàn)|函數(shù)輸入與輸出|值傳遞|地址傳遞|連續(xù)空間的傳遞|嵌入式C語言高級(jí)|C語言函數(shù)的使用-學(xué)習(xí)筆記(11)

    參考: 麥子學(xué)院-嵌入式C語言高級(jí)-C語言函數(shù)的使用 一堆代碼的集合,用一個(gè)標(biāo)簽去描述它 復(fù)用化,降低冗余度 標(biāo)簽 ------ 函數(shù)名 函數(shù)和數(shù)組都屬于內(nèi)存空間,函數(shù)具備3要素: int *p; int a[100]; 1、函數(shù)名(地址) 2、輸入?yún)?shù) 3、返回值 在定義函數(shù)時(shí),必須將3要素告知編譯器

    2023年04月20日
    瀏覽(27)
  • 嵌入式開發(fā)板qt gdb調(diào)試

    嵌入式開發(fā)板qt gdb調(diào)試

    1) 啟動(dòng) gdbserver ssh 或者 telnet 登陸揚(yáng)創(chuàng)平板 192.168.0.253, 進(jìn)入命令行執(zhí)行如下: chmod 777 /home/HelloWorld (2) 打 開 QTcreator-Debug-StartDebugging-Attach to Running Debug Server 進(jìn)行如下設(shè)置,設(shè)置監(jiān)聽端口10000. 點(diǎn)擊上圖中的按鈕,由于按鈕中的函數(shù)設(shè)置了斷點(diǎn),則跳到斷點(diǎn),界面如下

    2024年02月04日
    瀏覽(34)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包