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);  // 状态机:步骤二
 ...                               // 状态机:步骤....
}

	


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5045

    文章

    18816

    浏览量

    298470
  • C语言
    +关注

    关注

    180

    文章

    7575

    浏览量

    134032
  • 编程
    +关注

    关注

    88

    文章

    3521

    浏览量

    93266

原文标题:分享一个嵌入式编程模板

文章出处:【微信号:c-stm32,微信公众号:STM32嵌入式开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    深入了解嵌入式编程

    能从PC机器编程去看嵌入式问题,那是第步;学会用嵌入式编程思想,那是第二步;用PC的思想和嵌入式
    的头像 发表于 10-18 09:56 3554次阅读

    什么是嵌入式编程

    《C嵌入式编程设计模式》第章 什么是嵌入式编程嵌入式系统的基本知识面向对象
    发表于 11-08 06:15

    嵌入式系统编程教学分析

    通过volatile关键字的使用、嵌入式系统工程设置、嵌入式系统的数据结构设计、嵌入式系统算法设计四方面的介绍,分析了嵌入式系统
    发表于 07-01 17:07 26次下载

    基于嵌入式SCADA系统的开关量信号采集模板设计

      O 引言   本文设计的开关量信号采集模板嵌入式SCADA系统的种插件,称为智能数字量采集
    发表于 10-25 14:07 1184次阅读
    基于<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编程与ATmelAVR

    嵌入式C编程与ATmelAVR 非常好的资源
    发表于 12-29 17:56 0次下载

    C嵌入式系统编程

    C嵌入式系统编程
    发表于 10-23 16:27 14次下载

    什么是嵌入式编程

    什么是嵌入式编程?对于嵌入式系统,许多人很容易将它与单片机编程混淆。其实,嵌入式编程指的是在我们
    发表于 06-29 11:05 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 5次下载
    <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 12次下载
    《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>