女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

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

嵌入式框架Zorb Framework搭建方案

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

一、Zorb簡介

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

搭建Zorb Framework的目的是為在不能運(yùn)行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)機(jī)功能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個功能裁剪出來,然后運(yùn)行在現(xiàn)有的嵌入式系統(tǒng)上面,這樣子也可以滿足實時性的需求。

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

采用STM32F429開發(fā)板作為硬件運(yùn)行環(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ī)可以根據(jù)不同等級進(jìn)行高亮提示:

/**
*****************************************************************************
*@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)鍵地方進(jì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,然后每次進(jìn)入中斷為我們的框架計數(shù)即可。

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

現(xiàn)在時間系統(tǒng)提供的功能比較基礎(chǔ),只有系統(tǒng)滴答計數(shù)和系統(tǒng)死等待延時,后面我們開發(fā)定時器功能和任務(wù)功能的時候會重新擴(kuò)展時間系統(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ā)的根基,后面所有擴(kuò)展的功能都需要在此環(huán)境下進(jì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)注

    5140

    文章

    19524

    瀏覽量

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

    關(guān)注

    23

    文章

    3287

    瀏覽量

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

    關(guān)注

    14

    文章

    1582

    瀏覽量

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

    關(guān)注

    25

    文章

    5499

    瀏覽量

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

    關(guān)注

    0

    文章

    54

    瀏覽量

    9204

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

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

收藏 人收藏

    評論

    相關(guān)推薦
    熱點推薦

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

    Zorb Framework是一個基于面向?qū)ο蟮乃枷雭?b class='flag-5'>搭建一個輕量級的嵌入式框架。
    的頭像 發(fā)表于 11-29 09:33 ?1962次閱讀
    <b class='flag-5'>嵌入式</b><b class='flag-5'>框架</b><b class='flag-5'>Zorb</b> <b class='flag-5'>Framework</b>狀態(tài)機(jī)的實現(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虛擬機(jī)嵌入式L
    發(fā)表于 12-16 08:31

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

    介紹了Nios II的軟件開發(fā)環(huán)境,然后詳細(xì)闡述如何在Nios II平臺下搭建RTEMS嵌入式開發(fā)環(huán)境。 1.引言 隨著技術(shù)的不斷發(fā)展,嵌入式技術(shù)逐漸成為計算機(jī)技術(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)境的搭建

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

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

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

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

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

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

    1.系統(tǒng)框架圖對于一個嵌入式系統(tǒng),最重要的當(dāng)然是運(yùn)算以及存儲單元,基本的嵌入式系統(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)機(jī)搭建,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)機(jī)<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>