一种无OS的MCU实用软件框架
内容提要
这是一个无操作系统的微控制器实用软件框架,包括任务轮询管理、命令管理器、低功耗管理、环形缓冲区等实用模块。支持模块自动化管理、任务轮询管理、低功耗管理、命令行解析和blink设备管理。使用STM32F401RET6微控制器和IAR 7.4或Keil MDK 4.72A集成开发环境。
延伸解读
自定义段技术降低模块耦合
该框架广泛使用自定义段技术来减少模块间的耦合关系。通过将初始化函数和任务注册到特定段中,系统可以自动收集并执行这些函数,无需显式调用。这种设计提高了程序的可维护性,也使得模块的添加和删除更加灵活。
低功耗管理的否决机制
低功耗管理器采用轮询判决机制,所有注册模块都有否决权:只要有一个模块不允许休眠,系统就不会进入低功耗状态。休眠前,管理器会统计各模块返回的最小允许休眠时长,并以最小值为单位进行休眠。这要求模块在休眠通知中准确反馈自身状态。
命令行管理器的调试便利性
命令管理器适用于在线调试和参数配置,用户可通过串口输入命令控制设备行为或查询状态。系统自带help和?等默认命令,并支持命令注册。命令格式灵活,参数可用空格或逗号分隔,便于快速扩展自定义命令。
任务轮询依赖滴答定时器
任务轮询管理和按键、blink等模块均依赖系统滴答定时器提供时基。使用前需在platform.c中配置SysTick中断,并调用systick_increase增加节拍。任务通过宏声明注册,并指定轮询周期,实现简单高效的任务调度。
Q&A
这个无OS的MCU软件框架主要包含哪些功能模块?
该框架包含任务轮询管理、命令管理器、低功耗管理、环形缓冲区、blink设备管理、按键管理模块等实用模块。
如何注册一个任务并设置轮询周期?
使用driver_register宏注册任务,例如driver_register("key", key_scan, 20)表示每20ms轮询一次key_scan函数。
低功耗管理模块的工作原理是什么?
低功耗管理器通过轮询各个模块是否允许进入低功耗,所有模块具有一票否决权,只要有一个模块不允许休眠,系统就不会进入休眠。休眠前会统计各模块返回的最小允许休眠时长,并以该时长为单位进行休眠。
命令管理器支持哪些命令格式?
每行命令包含一个命令名称和可选参数,命令名称及参数可以通过空格或逗号分隔。系统默认自带'?'和'help'命令,用于列出当前命令列表。
blink模块用于管理哪些设备?如何使用?
blink模块统一管理LED、震动马达、蜂鸣器等具有闪烁特性的设备。使用前需要系统提供滴答时钟,并在任务中定时轮询,例如通过task_register("blink", blink_dev_process, 50)每50ms轮询一次。
适配低功耗管理器需要提供哪些接口?
需要通过pm_init初始化适配,并提供当前系统允许的最大休眠时间(max_sleep_time)和进入休眠的函数接口(goto_sleep),goto_sleep函数需要处理喂看门狗和补偿系统滴答时钟。