一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

嵌入式框架Zorb Framework搭建方案

工程師進階筆記 ? 來源:github.com ? 2023-11-05 17:08 ? 次閱讀

一、Zorb簡介

Zorb Framework是一個基于面向對象的思想來搭建一個輕量級的嵌入式框架。

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

Zorb Framework的初步設計功能有:

1、時間系統(tǒng)功能zf_time

2、環(huán)形緩沖區(qū)功能zf_buffer

3、列表功能zf_list

4、狀態(tài)機功能zf_fsm

5、事件功能zf_event

6、定時器功能zf_timer

7、任務功能zf_task

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

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

采用STM32F429開發(fā)板作為硬件運行環(huán)境,硬件資源用到串口1和systick,其中串口1提供調(diào)試打印功能,systick提供系統(tǒng)時間計數(shù)功能。

6b6e5776-7a2f-11ee-939d-92fbcf53809c.png

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

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

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

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

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

}

三、調(diào)試輸出

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

/**
*****************************************************************************
*@filezf_debug.h
*@authorZorb
*@versionV1.0.0
*@date2018-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"

#defineLOG_D0;/*信息等級:正常*/
#defineLOG_W1;/*信息等級:告警*/
#defineLOG_E2;/*信息等級:錯誤*/

#define_ZF_DEBUG/*定義調(diào)試功能*/
#defineZF_DEBUG_ONtrue/*啟用調(diào)試功能*/

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

#ifdef__cplusplus
}
#endif

#endif/*__ZF_DEBUG_H__*/

/********************************ENDOFFILE********************************/

四、實現(xiàn)斷言

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

/**
*****************************************************************************
*@filezf_assert.h
*@authorZorb
*@versionV1.0.0
*@date2018-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/*定義斷言功能*/
#defineZF_ASSERT_ONtrue/*啟用斷言功能*/

#ifdef_ZF_ASSERT
#ifZF_ASSERT_ON
#defineZF_ASSERT(expression_)((expression_)?
(void)0:ZF_assertHandle((uint8_t*)__FILE__,(int)__LINE__));
#else
#defineZF_ASSERT(expression_)
#endif/*ZF_ASSERT_ON*/
#endif/*_ZF_ASSERT*/

/*斷言產(chǎn)生時的處理*/
voidZF_assertHandle(uint8_t*pFileName,intline);

#ifdef__cplusplus
}
#endif

#endif/*__ZF_ASSERT_H__*/

/********************************ENDOFFILE********************************/

斷言的處理很簡單,就是告訴我們在哪個文件哪一行出錯就可以,實現(xiàn)如下

/**
*****************************************************************************
*@filezf_assert.c
*@authorZorb
*@versionV1.0.0
*@date2018-06-28
*@brief斷言的實現(xiàn)
*****************************************************************************
*@history
*
*1.Date:2018-06-28
*Author:Zorb
*Modification:建立文件
*
*****************************************************************************
*/

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

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

while(1);
}

/********************************ENDOFFILE********************************/

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

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

/******************************************************************************
*描述:SysTick中斷服務程序
*參數(shù):無
*返回:無
******************************************************************************/
voidSysTick_Handler(void)
{
/*為zorbframework提供計時*/
ZF_timeTick();
}

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

/**
*****************************************************************************
*@filezf_time.h
*@authorZorb
*@versionV1.0.0
*@date2018-06-28
*@brief系統(tǒng)時間的頭文件
*****************************************************************************
*@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)*/
#defineZF_TICK_PERIOD1

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

/*獲取系統(tǒng)時間(ms)*/
#defineZF_SYSTIME_MS()ZF_getSystemTimeMS()

/*系統(tǒng)延時(ms)*/
#defineZF_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_tZF_getSystemTick(void);

/*獲取系統(tǒng)時間(ms)*/
uint32_tZF_getSystemTimeMS(void);

/*系統(tǒng)延時*/
voidZF_delayTick(uint32_ttick);

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

#ifdef__cplusplus
}
#endif

#endif/*__ZF_TIME_H__*/

/********************************ENDOFFILE********************************/

六、最后

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

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5125

    文章

    19438

    瀏覽量

    313093
  • 定時器
    +關注

    關注

    23

    文章

    3272

    瀏覽量

    116711
  • 串口
    +關注

    關注

    14

    文章

    1580

    瀏覽量

    78338
  • 開發(fā)板
    +關注

    關注

    25

    文章

    5389

    瀏覽量

    100901
  • 環(huán)境搭建

    關注

    0

    文章

    54

    瀏覽量

    9177

原文標題:【嵌入式框架】搭建調(diào)試輸出、建立時間系統(tǒng)

文章出處:【微信號:工程師進階筆記,微信公眾號:工程師進階筆記】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    嵌入式框架Zorb Framework狀態(tài)機的實現(xiàn)

    Zorb Framework是一個基于面向對象的思想來搭建一個輕量級的嵌入式框架
    的頭像 發(fā)表于 11-29 09:33 ?1749次閱讀
    <b class='flag-5'>嵌入式</b><b class='flag-5'>框架</b><b class='flag-5'>Zorb</b> <b class='flag-5'>Framework</b>狀態(tài)機的實現(xiàn)

    嵌入式框架EFC是什么? 使用EFC的設計方案有哪些實例?

    什么是框架?如何設計框架?嵌入式框架EFC是什么?使用EFC的設計方案有哪些實例?
    發(fā)表于 04-27 06:23

    嵌入式框架

    1.overview 圖1-1 嵌入式框架嵌入式系統(tǒng)分為硬件以及軟件兩大部分,大多數(shù)人參與的是嵌入式軟件設計,更多的是接觸的是上層軟件系統(tǒng)部分,可以分為兩大類型
    發(fā)表于 10-27 08:26

    如何搭建嵌入式C語言單元測試自動化框架

    關于嵌入式C語言單元測試自動化框架搭建思路
    發(fā)表于 12-15 07:35

    如何搭建嵌入式Linux開發(fā)環(huán)境

    關于嵌入式Linux開發(fā)環(huán)境搭建,請參考以下帖子:嵌入式Linux開發(fā)環(huán)境搭建-(1)安裝VMware Workstation虛擬機嵌入式L
    發(fā)表于 12-16 08:31

    基于Nios II的嵌入式開發(fā)模式的搭建方案  

    介紹了Nios II的軟件開發(fā)環(huán)境,然后詳細闡述如何在Nios II平臺下搭建RTEMS嵌入式開發(fā)環(huán)境。 1.引言 隨著技術的不斷發(fā)展,嵌入式技術逐漸成為計算機技術的一個重要分支。由于嵌入式
    發(fā)表于 10-17 10:47 ?0次下載
    基于Nios II的<b class='flag-5'>嵌入式</b>開發(fā)模式的<b class='flag-5'>搭建</b><b class='flag-5'>方案</b>  

    嵌入式開發(fā)環(huán)境的搭建

    本文詳細介紹了嵌入式開發(fā)環(huán)境的搭建。這個教程在僅使用附帶的光盤鏡像文件里的資料的情況下,所搭建嵌入式 ARM 開發(fā)環(huán)境可以滿足 ARM 核為 ARM920T 及 CORTEX-A8
    的頭像 發(fā)表于 02-01 16:39 ?8725次閱讀
    <b class='flag-5'>嵌入式</b>開發(fā)環(huán)境的<b class='flag-5'>搭建</b>

    嵌入式應用框架EAF詳解

    EAF是Embedded Application Framework 的縮寫,即嵌入式應用框架嵌入式應用框架是 Application
    發(fā)表于 12-02 11:30 ?3076次閱讀

    關于嵌入式應用框架(EAF)的探索

    EAF是Embedded Application Framework 的縮寫,即嵌入式應用框架。
    發(fā)表于 12-10 14:28 ?963次閱讀

    關于嵌入式應用框架(EAF)的分析

    EAF是Embedded Application Framework 的縮寫,即嵌入式應用框架。嵌入式應用框架是 Application
    發(fā)表于 01-01 09:50 ?1690次閱讀

    嵌入式系統(tǒng)框架----硬件篇

    1.系統(tǒng)框架圖對于一個嵌入式系統(tǒng),最重要的當然是運算以及存儲單元,基本的嵌入式系統(tǒng)可以簡化成如下系統(tǒng)框架圖:
    發(fā)表于 10-20 11:51 ?3次下載
    <b class='flag-5'>嵌入式</b>系統(tǒng)<b class='flag-5'>框架</b>----硬件篇

    嵌入式系統(tǒng)移植-01嵌入式基本概念,嵌入式開發(fā)環(huán)境搭建,目標機搭建,TFTP服務搭建,NFS服務搭建

    文章目錄系統(tǒng)移植概述及環(huán)境搭建嵌入式基本概念嵌入式系統(tǒng)的應用領域什么是嵌入式系統(tǒng)用嵌入式系統(tǒng)硬件組成部分通用
    發(fā)表于 10-20 17:21 ?10次下載
    <b class='flag-5'>嵌入式</b>系統(tǒng)移植-01<b class='flag-5'>嵌入式</b>基本概念,<b class='flag-5'>嵌入式</b>開發(fā)環(huán)境<b class='flag-5'>搭建</b>,目標機<b class='flag-5'>搭建</b>,TFTP服務<b class='flag-5'>搭建</b>,NFS服務<b class='flag-5'>搭建</b>

    嵌入式系統(tǒng)框架----軟件篇

    1.overview 圖1-1 嵌入式框架嵌入式系統(tǒng)分為硬件以及軟件兩大部分,大多數(shù)人參與的是嵌入式
    發(fā)表于 10-20 19:21 ?5次下載
    <b class='flag-5'>嵌入式</b>系統(tǒng)<b class='flag-5'>框架</b>----軟件篇

    嵌入式linux安裝qt,嵌入式Linux版本Qt5.4快速部署

    摘要:Qt是一個領先的跨平臺應用和UI 開發(fā)框架(Framework),使用標準C++,適用于桌面,嵌入式和移動平臺。本文著重就利用Boot to Qt 軟件包來實現(xiàn)Qt5在嵌入式AR
    發(fā)表于 11-02 10:51 ?0次下載
    <b class='flag-5'>嵌入式</b>linux安裝qt,<b class='flag-5'>嵌入式</b>Linux版本Qt5.4快速部署

    嵌入式框架模板構建方案

    嵌入式框架模板構建方案關鍵內(nèi)容python3.xmakoyaml實戰(zhàn)演習main.pyimport yamlfrom mako.template import Templateimport
    發(fā)表于 12-29 19:00 ?2次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>框架</b>模板構建<b class='flag-5'>方案</b>