基于时间片+状态机的裸机框架学习总结

概述

在工作和学习中,我们对单片机的裸机开发使用不需要快速响应,只需要每隔一段时间执行一次程序时,我们就可以考虑这种基于时间片+状态机的裸机框架进行软件开发。

时间片

通过系统滴答定时器设定每隔一段时间产生滴答中断,然后有几个任务设置几个软件定时器,达到一段时间就将任务运行状态值1。

状态机

通俗的话讲,就是设置不同的状态,达到什么状态的执行什么指令。这里引用ChatGPT的解释:

状态机(State machine)是一种数学模型,也是一种计算机编程中常用的工具,用于描述对象在不同状态下的行为。
一个状态机通常由一组状态、一组输入事件和一组输出动作组成。在任何时刻,状态机都处于其中一个状态,当发生某个输入事件时,状态机会根据当前状态以及输入事件来执行某个输出动作,并切换到一个新的状态。
一个简单的例子是一个自动售货机。在这个状态机中,可能有以下几种状态:等待,接受硬币,选择产品,出售产品等。输入事件可以是硬币的投入,产品的选择等,输出动作可以是产品的出售,硬币的退回等。
状态机可以用来描述许多计算机系统中的行为,例如编译器、网络协议、游戏等。在编程中,状态机通常被实现为一个状态转移表或者状态转移图,用来控制程序的行为。
使用状态机的好处包括代码结构清晰、易于理解和调试,同时可以避免复杂的 if/else 嵌套结构。

框架介绍

我学习的是B站上嵌入式阿勇的方法,还是比较清晰的,在此基础上做出了一定的修改。
整体文件框架如图,用的是STM32F103芯片。
在这里插入图片描述
CORE文件夹内存放系统文件、启动文件、软件接口标准文件
Libraries文件夹内放标准外设文件
SYSTICK文件夹内放系统滴答定时器的头文件和函数文件
BSP文件夹内放硬件驱动,比如LED、按键等
APP内放各种软件驱动,比如IIC、CAN、串口等
USER文件夹内存放主函数、中断函数、任务函数

程序架构如图
请添加图片描述

主函数

主函数代码如下:

/*
	******************  STM32F10x  ******************
	*@文件名	:main.c
	*@作者		:
	*@库版本	:V3.5.0
	*@文件版本	:V1.0
	*@日期		:2023.04.24
	*@摘要		:
	*************************************************
*/
/*------------------------------------------------
	更新日志:
	2023.04.24	V1.0	初始版本
------------------------------------------------*/
/********************包含的头文件**********************/
#include "stm32f10x.h"                  // Device header
#include "bsp.h"    
#include "app.h"    
#include "task.h"    
/************************************************
函数名:main			形参:无				返回值:无
功能说明:主函数
************************************************/
int main(void)
{
   
	bsp_Init();
	app_Init();
	while(1)
	{
   
		task_run();
	}
}

硬件初始化bsp相关函数

硬件初始化程序如下,bsp就是板级支持包,所有硬件相关初始化函数在这个文件下调用。

/*
	******************  STM32F10x  ******************
	*@文件名	:bsp.c
	*@作者		:GeHaiGuang
	*@库版本	:V3.5.0
	*@文件版本	:V1.0
	*@日期		:2023.04.24
	*@摘要		:bsp源文件
	*************************************************
*/
/*------------------------------------------------
	更新日志:
	2023.04.24	V1.0	初始版本
------------------------------------------------*/
/********************包含的头文件**********************/
#include "bsp.h"                  
#include "systick.h"
#include "bsp_key.h"   
  • 7
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值