輸入事件到狀態(tài)機(jī)
typedef void (*select_machine_t)(void);
typedef enum _event_index
{
event_index_1 = 0,
event_index_2,
event_index_3,
event_index_end
} event_index_e;
typedef enum _status_index
{
status_index_1 = 0,
status_index_2,
status_index_end
} status_index_e;
void machine_1(void);
void machine_2(void);
void machine_3(void);
void machine_4(void);
select_machine_t select_machine[event_index_end][status_index_end] =
{
{machine_1, machine_2},
{NULL, machine_3},
{machine_4, NULL}
};
void machine_1(void)
{
printf("machine_1
");
}
void machine_2(void)
{
printf("machine_2
");
}
void machine_3(void)
{
printf("machine_3
");
}
void machine_4(void)
{
printf("machine_4
");
}
int main(void)
{
EXECUTE_VOID(select_machine[0][1]);
}
對(duì)應(yīng):
(1)條件A:status_index_e(2)條件B:event_index_e(3)switch:
EXECUTE_VOID(select_machine[0][1] );
當(dāng)一個(gè)外部事件來的時(shí)候(比如按鍵輸入),通過一個(gè)全局的結(jié)構(gòu)體變量(C語言中最常用的方法)引入當(dāng)前的實(shí)時(shí)狀態(tài),由條件導(dǎo)向各種狀態(tài)機(jī)。這里的實(shí)現(xiàn)是通過二維數(shù)組即兩個(gè)下標(biāo)代表兩個(gè)條件,兩個(gè)條件的交點(diǎn)就是具體的狀態(tài)機(jī)。

狀態(tài)機(jī)到面向過程
以上實(shí)現(xiàn)的是“輸入外部事件>>>>引流到>>>>狀態(tài)機(jī)”那如何實(shí)現(xiàn)“狀態(tài)機(jī)>>>>執(zhí)行>>>>具體地操作”呢?狀態(tài)機(jī)有一個(gè)固定的執(zhí)行流程(當(dāng)然也有根據(jù)條件執(zhí)行不同的運(yùn)行流程的分支),其實(shí)這些個(gè)流程都是非常確定的執(zhí)行過程。在開發(fā)過程中的經(jīng)驗(yàn)體現(xiàn):就是對(duì)所有執(zhí)行流程的精確完整的分析,然后將其全部羅列出來?!叭苛_列出來”這個(gè)執(zhí)行流程在程序中有兩種體現(xiàn)方式:1、把所有的執(zhí)行流程以“空函數(shù)”的形式羅列出來。2、把所有的執(zhí)行流程以“函數(shù)指針”的形式羅列出來:好處一:可以把軟件框架寫出來,具體邏輯流程已經(jīng)做好。好處二:具體的函數(shù)的接口可以先空著(NULL),待寫好了函數(shù)就把函數(shù)名賦值給它(sys_api_func* = you_func ;)。好處三:通用性更高,邏輯性更強(qiáng)。
void (sys_api_func1)(void);
void (sys_api_func2)(void);
void (sys_api_func3)(void);
...
void sys_api_init(void)
{
sys_api_func1 = NULL; // 還沒有寫好實(shí)現(xiàn)函數(shù)就先賦為NULL
sys_api_func2 = NULL;
sys_api_func3 = NULL;
...
}
// 狀態(tài)機(jī)1
void machine_1(void)
{
execute_api_void(sys_api_func1); // 狀態(tài)機(jī):步驟一
execute_api_void(sys_api_func2); // 狀態(tài)機(jī):步驟二
... // 狀態(tài)機(jī):步驟....
}
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
-
嵌入式
+關(guān)注
關(guān)注
5198文章
20449瀏覽量
334088 -
C語言
+關(guān)注
關(guān)注
183文章
7644瀏覽量
145603 -
編程
+關(guān)注
關(guān)注
90文章
3716瀏覽量
97191
原文標(biāo)題:分享一個(gè)嵌入式編程模板
文章出處:【微信號(hào):c-stm32,微信公眾號(hào):STM32嵌入式開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
熱點(diǎn)推薦
深入了解嵌入式編程
能從PC機(jī)器編程去看嵌入式問題,那是第一步;學(xué)會(huì)用嵌入式編程思想,那是第二步;用PC的思想和嵌入式
什么是嵌入式編程
《C嵌入式編程設(shè)計(jì)模式》第一章 什么是嵌入式編程嵌入式系統(tǒng)的基本知識(shí)面向?qū)ο?/div>
發(fā)表于 11-08 06:15
嵌入式系統(tǒng)編程教學(xué)分析
通過volatile關(guān)鍵字的使用、嵌入式系統(tǒng)工程設(shè)置、嵌入式系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)、嵌入式系統(tǒng)算法設(shè)計(jì)四個(gè)方面的介紹,分析了嵌入式系統(tǒng)
發(fā)表于 07-01 17:07
?26次下載
基于嵌入式SCADA系統(tǒng)的開關(guān)量信號(hào)采集模板設(shè)計(jì)
O 引言
本文設(shè)計(jì)的開關(guān)量信號(hào)采集模板是一款嵌入式SCADA系統(tǒng)的一種插件,稱為智能數(shù)字量采集
發(fā)表于 10-25 14:07
?1648次閱讀
嵌入式c語言編程(由淺入深)
本內(nèi)容詳細(xì)介紹了嵌入式c語言編程的各項(xiàng)知識(shí),包括嵌入式c語言編程,嵌入式C語言開發(fā)、嵌入式C語言
發(fā)表于 11-02 14:37
?0次下載
什么是嵌入式編程
什么是嵌入式編程?對(duì)于嵌入式系統(tǒng),許多人很容易將它與單片機(jī)編程混淆。其實(shí),嵌入式編程指的是在我們
發(fā)表于 06-29 11:05
?1.2w次閱讀
【嵌入式】基于ARM的嵌入式Linux開發(fā)總結(jié)
前言嵌入式知識(shí)點(diǎn)復(fù)習(xí)一嵌入式知識(shí)點(diǎn)復(fù)習(xí)二 --體系結(jié)構(gòu)嵌入式知識(shí)點(diǎn)復(fù)習(xí)三 --ARM-LINUX嵌入式開發(fā)環(huán)境
發(fā)表于 10-19 18:32
?28次下載
解析嵌入式軟件開發(fā)語言:嵌入式C編程
解析嵌入式軟件開發(fā)語言:嵌入式C編程在我們初學(xué)嵌入式開發(fā)的時(shí)候,總會(huì)出現(xiàn)一個(gè)問題。那就是C語言和
發(fā)表于 10-20 11:51
?7次下載
嵌入式linux報(bào)警,嵌入式Linux下LED報(bào)警燈驅(qū)動(dòng)設(shè)計(jì)及編程.doc
設(shè)計(jì)及編程一.實(shí)驗(yàn)?zāi)康睦斫怛?qū)動(dòng)本質(zhì),掌握嵌入式Linux系統(tǒng)下驅(qū)動(dòng)開發(fā)相關(guān)知識(shí),包括端口寄存器訪問、接口函數(shù)編寫、和文件系統(tǒng)掛接、注冊(cè)及相關(guān)應(yīng)用編程等知識(shí)點(diǎn)。二.實(shí)驗(yàn)內(nèi)容實(shí)驗(yàn)5.1
發(fā)表于 11-01 17:21
?6次下載
《C嵌入式編程設(shè)計(jì)模式》讀書筆記
嵌入式C++編程
特點(diǎn)展示如何使用 C ++ 來構(gòu)建利用可用硬件資源的強(qiáng)大并發(fā)系統(tǒng)。從嵌入式編程入門和 C ++ 17 的最新特性開始,帶您了解優(yōu)秀編程的各個(gè)方面您將學(xué)習(xí)如何使用 C ++ 的并發(fā)性、內(nèi)存管理和函數(shù)
發(fā)表于 11-04 10:36
?11次下載
分享一個(gè)嵌入式編程模板
評(píng)論