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

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

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

3天內不再提示

分享一個嵌入式編程模板

STM32嵌入式開發 ? 來源:STM32嵌入式開發 ? 2023-09-10 10:10 ? 次閱讀

輸入事件到狀態機

#include "stdio.h"
#define EXECUTE_VOID(func)  {if((func)!=NULL) (func());}


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]);
}

		

對應:

(1)條件A:status_index_e(2)條件B:event_index_e

(3)switch:

EXECUTE_VOID(select_machine[0][1] );

		當一個外部事件來的時候(比如按鍵輸入),通過一個全局的結構體變量(C語言中最常用的方法)引入當前的實時狀態,由條件導向各種狀態機。這里的實現是通過二維數組即兩個下標代表兩個條件,兩個條件的交點就是具體的狀態機。b73ebf7e-4f7d-11ee-a25d-92fbcf53809c.png

狀態機到面向過程

以上實現的是“輸入外部事件>>>>引流到>>>>狀態機”那如何實現“狀態機>>>>執行>>>>具體地操作”呢?狀態機有一個固定的執行流程(當然也有根據條件執行不同的運行流程的分支),其實這些個流程都是非常確定的執行過程。在開發過程中的經驗體現:就是對所有執行流程的精確完整的分析,然后將其全部羅列出來。“全部羅列出來”這個執行流程在程序中有兩種體現方式:1、把所有的執行流程以“空函數”的形式羅列出來。2、把所有的執行流程以“函數指針”的形式羅列出來:好處一:可以把軟件框架寫出來,具體邏輯流程已經做好。好處二:具體的函數的接口可以先空著(NULL),待寫好了函數就把函數名賦值給它(sys_api_func* = you_func ;)。好處三:

通用性更高,邏輯性更強。

void (sys_api_func1)(void);
void (sys_api_func2)(void);
void (sys_api_func3)(void);
...


void sys_api_init(void)
{
 sys_api_func1 = NULL;   // 還沒有寫好實現函數就先賦為NULL
 sys_api_func2 = NULL;
 sys_api_func3 = NULL;
 ...
}


// 狀態機1
void machine_1(void)
{
 execute_api_void(sys_api_func1);  // 狀態機:步驟一
 execute_api_void(sys_api_func2);  // 狀態機:步驟二
 ...                               // 狀態機:步驟....
}

	


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

    關注

    5087

    文章

    19158

    瀏覽量

    306450
  • C語言
    +關注

    關注

    180

    文章

    7614

    瀏覽量

    137252
  • 編程
    +關注

    關注

    88

    文章

    3634

    瀏覽量

    93857

原文標題:分享一個嵌入式編程模板

文章出處:【微信號:c-stm32,微信公眾號:STM32嵌入式開發】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    深入了解嵌入式編程

    能從PC機器編程去看嵌入式問題,那是第步;學會用嵌入式編程思想,那是第二步;用PC的思想和嵌入式
    的頭像 發表于 10-18 09:56 ?3684次閱讀

    你是如何理解嵌入式c編程

    嵌入式開發感興趣的童鞋不妨接著往下看。 、新手常常問的問題是c語言和嵌入式c編程有什么區別
    發表于 05-05 15:11

    什么是嵌入式編程

    《C嵌入式編程設計模式》第章 什么是嵌入式編程嵌入式系統的基本知識面向對象
    發表于 11-08 06:15

    嵌入式系統編程教學分析

    通過volatile關鍵字的使用、嵌入式系統工程設置、嵌入式系統的數據結構設計、嵌入式系統算法設計四方面的介紹,分析了嵌入式系統
    發表于 07-01 17:07 ?26次下載

    基于嵌入式SCADA系統的開關量信號采集模板設計

      O 引言   本文設計的開關量信號采集模板嵌入式SCADA系統的種插件,稱為智能數字量采集
    發表于 10-25 14:07 ?1259次閱讀
    基于<b class='flag-5'>嵌入式</b>SCADA系統的開關量信號采集<b class='flag-5'>模板</b>設計

    嵌入式c語言編程(由淺入深)

    本內容詳細介紹了嵌入式c語言編程的各項知識,包括嵌入式c語言編程嵌入式C語言開發、嵌入式C語言
    發表于 11-02 14:37 ?0次下載
    <b class='flag-5'>嵌入式</b>c語言<b class='flag-5'>編程</b>(由淺入深)

    嵌入式C編程

    嵌入式C編程,非常有用的資料,介紹嵌入式C語言編程
    發表于 12-29 17:29 ?0次下載

    C嵌入式系統編程

    C嵌入式系統編程
    發表于 10-23 16:27 ?14次下載

    什么是嵌入式編程

    什么是嵌入式編程?對于嵌入式系統,許多人很容易將它與單片機編程混淆。其實,嵌入式編程指的是在我們
    發表于 06-29 11:05 ?1.1w次閱讀
    什么是<b class='flag-5'>嵌入式</b><b class='flag-5'>編程</b>

    解析嵌入式軟件開發語言:嵌入式C編程

    解析嵌入式軟件開發語言:嵌入式C編程在我們初學嵌入式開發的時候,總會出現問題。那就是C語言和
    發表于 10-20 11:51 ?7次下載
    解析<b class='flag-5'>嵌入式</b>軟件開發語言:<b class='flag-5'>嵌入式</b>C<b class='flag-5'>編程</b>

    嵌入式linux報警,嵌入式Linux下LED報警燈驅動設計及編程.doc

    設計及編程.實驗目的理解驅動本質,掌握嵌入式Linux系統下驅動開發相關知識,包括端口寄存器訪問、接口函數編寫、和文件系統掛接、注冊及相關應用編程等知識點。二.實驗內容實驗5.1
    發表于 11-01 17:21 ?6次下載
    <b class='flag-5'>嵌入式</b>linux報警,<b class='flag-5'>嵌入式</b>Linux下LED報警燈驅動設計及<b class='flag-5'>編程</b>.doc

    視頻教程-嵌入式Linux多任務編程-嵌入式

    嵌入式Linux多任務編程 嵌入式工程師、嵌入式講師、10多年
    發表于 11-02 11:21 ?22次下載
    視頻教程-<b class='flag-5'>嵌入式</b>Linux多任務<b class='flag-5'>編程</b>-<b class='flag-5'>嵌入式</b>

    視頻教程-嵌入式Linux文件與串口編程-嵌入式

    嵌入式Linux文件與串口編程 嵌入式工程師、嵌入式講師、10多年
    發表于 11-02 15:06 ?15次下載
    視頻教程-<b class='flag-5'>嵌入式</b>Linux文件與串口<b class='flag-5'>編程</b>-<b class='flag-5'>嵌入式</b>

    《C嵌入式編程設計模式》讀書筆記

    《C嵌入式編程設計模式》第章 什么是嵌入式編程嵌入式系統的基本知識面向對象
    發表于 11-03 16:06 ?13次下載
    《C<b class='flag-5'>嵌入式</b><b class='flag-5'>編程</b>設計模式》讀書筆記

    嵌入式C++編程

    特點展示如何使用 C ++ 來構建利用可用硬件資源的強大并發系統。從嵌入式編程入門和 C ++ 17 的最新特性開始,帶您了解優秀編程的各個方面您將學習如何使用 C ++ 的并發性、內存管理和函數
    發表于 11-04 10:36 ?10次下載
    <b class='flag-5'>嵌入式</b>C++<b class='flag-5'>編程</b>
    主站蜘蛛池模板: 午夜在线影视| 色视频网址| 久久精品夜色国产| 亚洲人成影网站~色| 黄色网址网站在线观看| 人人干网站| 播五月婷婷| 精品伊人久久大线蕉色首页| 日剧天堂| 天堂资源在线观看| 综合网伊人| 日本不卡一| 4438x成人网最大色成网站| 黑粗硬大欧美视频| 日韩成人影院| 天天干天天透| 午夜看片免费| bt天堂bt在线网| 国产亚洲精品在天天在线麻豆| 琪琪午夜伦埋大全影院| 色婷婷久久综合中文久久蜜桃| 色在线视频观看| 日韩免费精品一级毛片| 四虎影永久在线观看精品| 性香港xxxxx免费视频播放| 亚洲香蕉毛片久久网站老妇人| 久久99久久99精品免观看| 亚洲男人天堂网址| 日本视频不卡| 亚洲成色在线综合网站| 五月婷婷激情五月| 亚洲福利秒拍一区二区| a资源在线| jlzz日本| 欧美成网站| 在线看片地址| 一级国产特黄aa大片| 三级特黄视频| 成人在线免费| 污夜影院| 1024你懂的国产日韩欧美|