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

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

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

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

嵌入式框架Zorb Framework搭建方案

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

一、Zorb簡介

Zorb Framework是一個基于面向?qū)ο蟮乃枷雭泶罱ㄒ粋€輕量級的嵌入式框架。

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

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

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、任務(wù)功能zf_task

前6個功能,就可以實現(xiàn)純事件驅(qū)動的程序,基本可以滿足中小型嵌入式應(yīng)用程序開發(fā)的需求。加上任務(wù)功能,是為了滿足部分程序?qū)崟r性要求較高的需求。當(dāng)然,也可以將前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

關(guān)于硬件環(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ā)過程中,在關(guān)鍵地方進行一些斷言,可以方便定位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)

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

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

現(xiàn)在時間系統(tǒng)提供的功能比較基礎(chǔ),只有系統(tǒng)滴答計數(shù)和系統(tǒng)死等待延時,后面我們開發(fā)定時器功能和任務(wù)功能的時候會重新擴展時間系統(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)的功能比較基礎(chǔ),但是整個框架開發(fā)的根基,后面所有擴展的功能都需要在此環(huán)境下進行開發(fā)。搭建良好的調(diào)試輸出環(huán)境,可以幫我們快速定位bug的所在,從而提高開發(fā)效率。

審核編輯:湯梓紅

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

    關(guān)注

    5121

    文章

    19418

    瀏覽量

    312623
  • 定時器
    +關(guān)注

    關(guān)注

    23

    文章

    3271

    瀏覽量

    116523
  • 串口
    +關(guān)注

    關(guān)注

    14

    文章

    1579

    瀏覽量

    78270
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    5374

    瀏覽量

    100573
  • 環(huán)境搭建
    +關(guān)注

    關(guān)注

    0

    文章

    54

    瀏覽量

    9175

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

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

收藏 人收藏

    評論

    相關(guān)推薦

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

    Zorb Framework是一個基于面向?qū)ο蟮乃枷雭?b class='flag-5'>搭建一個輕量級的嵌入式框架
    的頭像 發(fā)表于 11-29 09:33 ?1719次閱讀
    <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的設(shè)計方案有哪些實例?

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

    嵌入式框架

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

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

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

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

    關(guā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.引言 隨著技術(shù)的不斷發(fā)展,嵌入式技術(shù)逐漸成為計算機技術(shù)的一個重要分支。由于嵌入式
    發(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 ?8708次閱讀
    <b class='flag-5'>嵌入式</b>開發(fā)環(huán)境的<b class='flag-5'>搭建</b>

    嵌入式應(yīng)用框架EAF詳解

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

    關(guān)于嵌入式應(yīng)用框架(EAF)的探索

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

    關(guān)于嵌入式應(yīng)用框架(EAF)的分析

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

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

    1.系統(tǒng)框架圖對于一個嵌入式系統(tǒng),最重要的當(dā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)境搭建,目標(biāo)機搭建,TFTP服務(wù)搭建,NFS服務(wù)搭建

    文章目錄系統(tǒng)移植概述及環(huán)境搭建嵌入式基本概念嵌入式系統(tǒng)的應(yīng)用領(lǐ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>,目標(biāo)機<b class='flag-5'>搭建</b>,TFTP服務(wù)<b class='flag-5'>搭建</b>,NFS服務(wù)<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是一個領(lǐng)先的跨平臺應(yīng)用和UI 開發(fā)框架(Framework),使用標(biāo)準(zhǔn)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快速部署

    嵌入式框架模板構(gòu)建方案

    嵌入式框架模板構(gòu)建方案關(guān)鍵內(nèi)容python3.xmakoyaml實戰(zhàn)演習(xí)main.pyimport yamlfrom mako.template import Templateimport
    發(fā)表于 12-29 19:00 ?2次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>框架</b>模板構(gòu)建<b class='flag-5'>方案</b>
    主站蜘蛛池模板: 特黄特色三级在线播放 | 黄色网址 在线播放 | 欧美高清一区二区三 | 欧美亚洲在线 | 亚洲国产成人成上人色 | 色视频在线免费 | 久久久久久免费播放一级毛片 | 天天做天天爰夜夜爽 | 成人国产一区二区三区 | 性夜影院午夜看片 | 又黄又爽又猛午夜性色播在线播放 | 国产一级特黄毛片 | 狠狠色噜噜狠狠狠狠黑人 | 成人三级毛片 | 国外免费一级 | 亚洲91| 亚洲夜夜骑 | 日韩精品无码一区二区三区 | 国产精品国产三级国产在线观看 | 中文字幕亚洲天堂 | 欧美肥妇性 | 一二三区视频 | 久草丁香| 无夜精品久久久久久 | 久久黄色一级片 | 性生生活三级视频在线观看 | 77788色淫网站女女免费视频 | 亚洲xx站| 午夜精品久久久 | 性欧美大胆高清视频 | 狠狠色狠狠色综合日日32 | 亚洲成a人片在线观看中 | 国产精品久久久久久久免费大片 | 玖玖爱这里只有精品 | 国产精品欧美激情在线播放 | 啪啪黄色 | 天天爽天天干天天操 | 十三以下岁女子毛片免费播放 | 天天摸夜夜爽 | 97菊爱网| 亚洲欧美日韩特级毛片 |