色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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);  // 狀態機:步驟二
 ...                               // 狀態機:步驟....
}

	


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

    關注

    5103

    文章

    19268

    瀏覽量

    310026
  • C語言
    +關注

    關注

    180

    文章

    7618

    瀏覽量

    138662
  • 編程
    +關注

    關注

    88

    文章

    3649

    瀏覽量

    94346

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

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

收藏 人收藏

    評論

    相關推薦

    深入了解嵌入式編程

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

    你是如何理解嵌入式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 ?1282次閱讀
    基于<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>
    主站蜘蛛池模板: 九色PORNY真实丨国产免费 | 和搜子的日子 在线观看 | 亚洲AV久久久久久久无码 | a视频在线看 | 娇喘嗯嗯 轻点啊视频福利 娇喘高潮教室h | 亚洲一区成人 | 97人妻久久久精品系列A片 | 亚洲精品乱码久久久久久中文字幕 | 99视频在线观看免费视频 | 亚洲黄色在线 | 在线亚洲中文精品第1页 | 亚洲欧美一级久久精品 | 精品性影院一区二区三区内射 | 色多多涩涩屋下载软件 | 国产午夜亚洲精品理论片八戒 | 少妇第一次交换 | 翁公吮她的花蒂和奶水 | 无码人妻99久久密AV | 成人短片迅雷下载 | 美国特级成人毛片 | 欧美亚洲日韩欧洲不卡 | 久久久无码AV精品亚洲A片软件 | 亚洲高清一区二区三区电影 | 国产亚洲AV精品无码麻豆 | 无码人妻丰满熟妇啪啪网不卡 | 777午夜精品久久AV蜜臀 | 亚洲精品成人无码区一在线观看 | 好紧小嫩嫩水的10p 好紧好湿太硬了我太爽了小说 | RUNAWAY韩国动漫免费官网版 | 狠狠色狠狠色综合系列 | 日韩高清一区二区三区不卡 | 拍床戏被肉高H纯肉H在水 | 国产高清视频免费最新在线 | 狠狠啪在线香蕉 | 午夜剧场1000 | 国产九九熟女在线视频 | 最近中文字幕高清中文 | 亚洲欧美日韩高清中文在线 | 国产AV果冻传奇麻豆 | 久久频这里精品99香蕉久网址 | 午夜福利免费院 |