由于项目需求,需要使用FREERTOS搭载轻量系统,因此写此博客给大家提供一个快速搭建RTOS系统的方法,通过cubemx快速生成。
FreeRTOS是一个迷你的实时操作系统内核。作为一个轻量级的操作系统,功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等,可基本满足较小系统的需要。
任务调度机制是嵌入式实时操作系统的一个重要概念,也是其核心技术。对于可剥夺型内核,优先级高的任务一旦就绪就能剥夺优先级较低任务的CPU使用权,提高了系统的实时响应能力。不同于μC/OS-II,FreeRTOS对系统任务的数量没有限制,既支持优先级调度算法也支持轮换调度算法,因此FreeRTOS采用双向链表而不是采用查任务就绪表的方法来进行任务调度。
stm32通过FREERTOS创建2个任务,而每个任务分别控制自己的LED灯闪烁,实现多任务处理。LED灯通过拉高点亮,拉低熄灭,通过程序语句HAL_GPIO_WritePin(GPIOF, LED0_Pin, GPIO_PIN_RESET)与HAL_GPIO_WritePin(GPIOF, LED0_Pin, GPIO_PIN_SET)来控制拉高和拉低。而HAL_Delay() 实现延迟效果,故可以看到灯闪烁。设置两个标志位VALUE1、VALUE2来控制2个LED灯闪烁的间隔,同时分别在两个任务中创建一个按键,通过HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_2)==0,检测按键口电位的高低,改变标志位的值,从而分别使两个灯按照预定延时规律闪烁切换。
之后生成keil代码,打开并编辑
#define led3_off HAL_GPIO_WritePin(GPIOG, LED3_Pin, GPIO_PIN_RESET)
#define led3_on HAL_GPIO_WritePin(GPIOG, LED3_Pin, GPIO_PIN_SET)
#define led2_off HAL_GPIO_WritePin(GPIOG, LED2_Pin, GPIO_PIN_RESET)
#define led2_on HAL_GPIO_WritePin(GPIOG, LED2_Pin, GPIO_PIN_SET)
#define led1_off HAL_GPIO_WritePin(GPIOG, LED1_Pin, GPIO_PIN_RESET)
#define led1_on HAL_GPIO_WritePin(GPIOG, LED1_Pin, GPIO_PIN_SET)
void StartDefaultTask(void const * argument)
{
/* USER CODE BEGIN StartDefaultTask */
/* Infinite loop */
for(;;)
{
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200501130250901.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01yYWluX0dBR0E=,size_16,color_FFFFFF,t_70)
led1_on;
osDelay(500);
led1_off;
osDelay(500);
}
/* USER CODE END StartDefaultTask */
}
void StartTask02(void const * argument)
{
/* USER CODE BEGIN StartTask02 */
/* Infinite loop */
for(;;)
{
led2_on;
osDelay(500);
led2_off;
osDelay(500);
}
/* USER CODE END StartTask02 */
}
void StartTask03(void const * argument)
{
/* USER CODE BEGIN StartTask03 */
/* Infinite loop */
for(;;)
{
led3_on;
osDelay(500);
led3_off;
osDelay(500);
}
/* USER CODE END StartTask03 */
}
**将代码烧录到stm32单片机上后,每个灯都能独立运行闪烁,实现freertos的多任务处理效果。
使用嵌入式操作系统编程的优缺点:感觉FREERTOS最大的好处是多任务处理,曾经以前做比赛的时候,我们写代码一般都是放在while循环里,常常要多个任务放在一起,因此任务执行有先后顺序,这样效率不高。通过操作系统,可以实现循迹和避障一起执行的效果,所以总体来说效率提升了不少。但是FREERTOS本身也会占用系统内存,因此需要的时候打开就行了。程序设计时,也要考虑设计的效率,若一个办法可以更快的运行,则可以采用这种方法提高运行整体效果。
坚持成就梦想。