这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 一种STM32框架,实现RTOS的部分功能

共11条 1/2 1 2 跳转至

一种STM32框架,实现RTOS的部分功能

高工
2022-04-11 08:19:43     打赏
介绍

一种无OS的STM32实用软件框架,包括任务轮询管理,命令管理器、低功耗管理、环形缓冲区等实用模块。系统中广泛利用自定义段技术减少各个模块间的耦合关系,大大提供程序的可维护性。

主要功能
  • 支持模块自动化管理,并提供不同优先等级初始化声明接口。

  • 支持任务轮询管理,通过简单的宏声明即可实现,不需要复杂的声明调用。

  • 支持低功耗管理,休眠与唤醒通知。

  • 支持命令行解析,命令注册与执行。

  • blink设备支持,统一管理LED、震动马达、蜂鸣器

使用说明


MCU:STM32F401RET6

IDE:IAR 7.4或者Keil MDK 4.72A

任务初始化及任务轮询管理(module)

使用此模块前需要系统提供滴答定时器,用于驱动任务轮询作业。(参考platform.c)

image.png

注册初始化入口及任务(参考自key_task.c)

image.png

命令管理器(cli)

适用于在线调试、参数配置等(参考使用cli_task.c),用户可以通过串口输出命令行控制设备行为、查询设备状态等功能。

命令格式

cli支持的命令行格式如下:

<cmd name> < param1> < param2> < paramn> < \r\n > <cmd name> ,< param1>, < param2>, < paramn>, < \r\n >

每行命令包含一个命令名称+命令参数(可选),命令名称及参数可以通过空格或者','进行分隔。

系统默认命令

cli系统自带了2条默认命令,分别是"?"与"help"命令,输入他们可以列出当前系统包含的命令列表,如下所示:

image.png

适配命令管理器

完整的例子可以参考cli_task.c.

image.png

命令注册

以复位命令为例(参考cmd_devinfo.c):

image.png

低功耗管理器(pm)

控制间歇运行,降低系统功耗。其基本的工作原理是通过轮询系统中各个模块是否可以允许系统进入低功耗。实际上这是一种判决机制,所有模块都具有有****否决权,即只要有一个模块不允许休眠,那么系统就不会进入休眠状态。pm模块在休眠前会统计出各个模块会返回最小允许休眠时长,并以最小休眠时长为单位进行休眠。

如何适配

使用前需要通过pm_init进行初始化适配,并提供当前系统允许的最大休眠时间,进入休眠的函数接口,基本的接口定义如下:

image.png

完成的使用例子可以参考platform-lowpower.c,默认情况下是禁用低功耗功能的,读者可以去除工程中原来不带低功耗版本的platform.c,并加入platform-lowpower.c文件进行编译即可使用。

注册低功耗设备

以按键扫描为例,正常情况下,如果按键没有按下,那么系统休眠可以进入休眠状态,对按键功能是没有影响的。如果按键按下时,那么系统需要定时唤醒并轮询按键任务。

所以在一个低功耗系统下,为了不影响按键实时性需要处理好两个事情:

  1. 系统休眠状态下,如果有按键按下,那系统系统应立即唤醒,以便处理接下来的扫描工作。

  2. 如果按键按下时,系统可以进入休眠,但需要定时唤醒起来轮询按键任务。

对于第一种情况,将按键配置为边沿中断唤醒即可,以STM32F4为例(参考key_task.c),它支持外部中断唤醒功能。

image.png

对于第二种情况,可以通过pm_dev_register来处理,当系统请求休眠时,如果此时按键按下,则返回下次唤醒时间即可,如下面的例子所示。

image.png

blink模块

具有闪烁特性(led, motor, buzzer)的设备(led, motor, buzzer)管理

使用步骤:

  • 需要系统提供滴答时钟,blick.c中是通过get_tick()接口获取,依赖module模块

  • 需要在任务中定时进行轮询

或者通过"module"模块的任务注册来实现

image.png

LED驱动

image.png

按键管理模块

类似blink模块,使用之前有两个注意事项:

  • 需要系统提供滴答时钟,key.c中是通过get_tick()接口获取,依赖module模块

  • 需要在任务中定时进行轮询





关键词: STM32     框架     模块    

专家
2022-04-11 08:24:30     打赏
2楼

学习


专家
2022-04-11 08:26:06     打赏
3楼

谢谢分享


院士
2022-04-11 09:22:01     打赏
4楼

只是一个非抢占式的OS嘛


专家
2022-04-11 09:29:34     打赏
5楼

谢谢分享


工程师
2022-04-11 10:24:20     打赏
6楼

学习一下


工程师
2022-04-11 10:28:18     打赏
7楼

感谢楼主分享


工程师
2022-04-11 10:32:50     打赏
8楼

感谢楼主分享


工程师
2022-04-11 10:36:40     打赏
9楼

谢谢分享


工程师
2022-04-11 10:40:00     打赏
10楼

感谢楼主分享


共11条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]