PX5 RTOS是一种专为资源受限的嵌入式设备设计的实时操作系统(RTOS),该实时操作系统可在大多数微处理器上实现亚微秒级上下文切换和API调用,从而提供超高的性能。
PX5原生实现POSIX pthread标准的API,可实现与嵌入式Linux及其他POSIX实时操作系统(RTOS)的兼容性,使该RTOS成为使用最简单的系统之一。通过可选扩展功能,它成为深度嵌入式实时应用的最佳选择。
本文将基于Nucleo-L496ZG开发板,参考文档,将PX5 RTOS添加到项目STM32Cube\Repository\STM32Cube_FW_L4_V1.18.2\Projects\NUCLEO-L496ZG\Examples\GPIO\GPIO_IOToggle中。
步骤1:添加RTOS源文件
在EWARM v9.50.1中,将PX5调度器实现文件(px5.c)和Cortex-M架构实现文件(px5_binding.S)添加到项目。
设置工程Options->C/C++ Compiler->Preprocessor指向PX5的源文件目录,
由于PX5使用了PendSV机制,需修改stm32f4xx_it.c文件,注释掉裸机应用提供中的PendSV_Handler处理函数。
构建项目,PX5 RTOS成功编译。
步骤2:启动调度器
在main.c中添加POSIX线程头文件:
#include <pthread.h>
然后调用px5_pthread_start()初始化RTOS:
px5_pthread_start(0,NULL,0);
与许多RTOS的启动序列不同,PX5 RTOS中,px5_pthread_start()在调度器初始化完成后会返回。从此时起,main()函数成为由PX5 RTOS管理的一个POSIX线程。这是PX5设计中一个较为有趣的特点。
运行该应用,LED闪烁行为与裸机应用一致。
步骤3:添加系统节拍
使用时间相关的服务,需在节拍定时器处理函数SysTick_Handler()中调用px5_timer_interrupt_process(),函数位于stm32l4xx_it.c,按如下方式对其进行修改:
在文件顶部添加#include <pthread.h>
修改SysTick_Handler,增加px5_timer_interrupt_process()。
步骤4:验证RTOS已正确添加到
裸机环境中
验证定时器服务是否正常运行,修改main线程中的while循环,将HAL_Delay替换为:
px5_pthread_tick_sleep(10);
在PX5 RTOS多任务环境中,线程运行使用PSP堆栈,因此,还需设置并初始化PSP堆栈。
修改工程的startup_stm3l496xx.s启动文件,初始化PSP栈。
修改stm32l496xx_flash.icf文件,
构建工程,LED闪烁,定时器服务正常运行,调度器与系统滴答协同工作。我们以一个已运行的STM32裸机应用为基础,成功添加了PX5 RTOS。之后便可逐步演化为多线程设计,每个线程负责单一任务。
麦克泰技术是PX5 RTOS的合作伙伴和代理商,长期致力于嵌入式安全操作系统的市场与技术服务工作,欢迎联系info@bmrtech.com咨询相关信息。
PX5文章推荐
产品购买(麦克泰)
产品购买(贝尼思)
线上课程(网校)
欢迎关注微信公众号【麦克泰技术】,回复 “加群” 按提示可加入技术交流群
产品咨询:
北京:010-62975900
上海:021-62127690
深圳:0755-82977971
分享、在看与点赞,至少我要拥有一个吧
点森科技 - 科技资讯_数码产品_互联网观察_智能硬件


