在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

嵌入式框架Zorb Framework搭建方案

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

一、Zorb簡介

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

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

Zorb Framework的初步設計功能有:

1、時間系統功能zf_time

2、環形緩沖區功能zf_buffer

3、列表功能zf_list

4、狀態機功能zf_fsm

5、事件功能zf_event

6、定時器功能zf_timer

7、任務功能zf_task

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

二、嵌入式環境搭建

采用STM32F429開發板作為硬件運行環境,硬件資源用到串口1和systick,其中串口1提供調試打印功能,systick提供系統時間計數功能。

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

關于硬件環境的搭建不多說,可以參照開發板提供的例程來搭建,板級初始化完成了調試串口和systick的初始化。

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

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

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

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

}

三、調試輸出

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

/**
*****************************************************************************
*@filezf_debug.h
*@authorZorb
*@versionV1.0.0
*@date2018-06-28
*@brief調試輸出的頭文件
*****************************************************************************
*@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/*定義調試功能*/
#defineZF_DEBUG_ONtrue/*啟用調試功能*/

#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********************************/

四、實現斷言

在開發過程中,在關鍵地方進行一些斷言,可以方便定位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*/

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

#ifdef__cplusplus
}
#endif

#endif/*__ZF_ASSERT_H__*/

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

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

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

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

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

while(1);
}

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

五、建立時間系統

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

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

現在時間系統提供的功能比較基礎,只有系統滴答計數和系統死等待延時,后面我們開發定時器功能和任務功能的時候會重新擴展時間系統。

/**
*****************************************************************************
*@filezf_time.h
*@authorZorb
*@versionV1.0.0
*@date2018-06-28
*@brief系統時間的頭文件
*****************************************************************************
*@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"

/*系統滴答周期(ms)*/
#defineZF_TICK_PERIOD1

/*獲取系統滴答數*/
#defineZF_SYSTICK()ZF_getSystemTick()

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

/*系統延時(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)

/*獲取系統滴答數*/
uint32_tZF_getSystemTick(void);

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

/*系統延時*/
voidZF_delayTick(uint32_ttick);

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

#ifdef__cplusplus
}
#endif

#endif/*__ZF_TIME_H__*/

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

六、最后

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

審核編輯:湯梓紅

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

    關注

    5082

    文章

    19126

    瀏覽量

    305200
  • 定時器
    +關注

    關注

    23

    文章

    3248

    瀏覽量

    114800
  • 串口
    +關注

    關注

    14

    文章

    1554

    瀏覽量

    76516
  • 開發板
    +關注

    關注

    25

    文章

    5050

    瀏覽量

    97471
  • 環境搭建
    +關注

    關注

    0

    文章

    53

    瀏覽量

    9057

原文標題:【嵌入式框架】搭建調試輸出、建立時間系統

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

收藏 人收藏

    評論

    相關推薦

    嵌入式框架Zorb Framework狀態機的實現

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

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

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

    嵌入式框架

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

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

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

    如何搭建嵌入式Linux開發環境

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

    基于Nios II的嵌入式開發模式的搭建方案  

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

    嵌入式開發環境的搭建

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

    嵌入式應用框架EAF詳解

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

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

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

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

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

    嵌入式系統框架----硬件篇

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

    嵌入式系統移植-01嵌入式基本概念,嵌入式開發環境搭建,目標機搭建,TFTP服務搭建,NFS服務搭建

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

    嵌入式系統框架----軟件篇

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

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

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

    嵌入式框架模板構建方案

    嵌入式框架模板構建方案關鍵內容python3.xmakoyaml實戰演習main.pyimport yamlfrom mako.template import Templateimport
    發表于 12-29 19:00 ?2次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>框架</b>模板構建<b class='flag-5'>方案</b>
    主站蜘蛛池模板: 亚洲一区二区三区免费看| 青青热久免费精品视频在线观看 | 亚1州区2区3区4区产品乱码| 亚洲迅雷| 性配久久久| 亚洲国产日韩精品怡红院 | 天天爽夜夜爽一区二区三区| 欧美深夜福利| 欧洲另类一二三四区| 精品热99| 四虎a级欧美在线观看| 欧美午夜小视频| 成人三级在线观看| 免费永久视频| 亚洲精品亚洲人成毛片不卡| 午夜视频日本| 久久综合五月婷婷| 夜夜操夜夜爽| 国产一级一级片| 日本一区视频| 日韩一级生活片| 国产美女流出白浆在线观看| 日本特黄特色视频| 亚洲一卡2卡3卡4卡5卡乱码| 日本免费a级片| a理论片| 国产精品好好热在线观看| 美女扒开尿口给男的桶个爽| 色多多18免费观看| 国产成人精品日本亚洲语言| 美女bbbb视频| 狠狠干网站| 好色999| 国产真实乱在线更新| 亚偷熟乱区视频在线观看| 伊人网在线免费视频| 黄色大视频| 天堂色网| 91黄色影院| 国产女人小便视频| 男人的天堂一区二区视频在线观看|