STM32CubeMX学习笔记——FreeRTOS_任务挂起与继续

2019-07-18来源: eefocus关键字:STM32CubeMX  FreeRTOS_  任务挂起

Github

https://github.com/HaHaHaHaHaGe/Planof2019_half/tree/master/Course_Project/FreeRTOS/Class02_SuspendResume


简介

任务挂起与继续的作用,用于暂停运行某些任务与继续运行某些任务。就像用视频播放器看电影的播放按键与暂停按键一样简单。


在STM32CubeMX上配置FreeRTOS非常的简单,几乎不需要做任何操作,只需要勾选

在这里插入图片描述

移植FreeRTOS就成功了,关于在非Cube上的RTOS配置文件内的相关内容,也在下方的Configuration栏中给好了

在这里插入图片描述

所有的配置都可以在这里完成


任务创建

有别于在没有使用Cube下的创建方式,在Cube中它专门提供了可视化的创建方式,并且增加了中间文件cmsis_os.c将freertos中提供的方法进行了再一次的封装(猜测可能是为了支持更多的OS吧)


可视化创建方式

在这里插入图片描述

在Tasks and Queues中可以点击Add按钮添加新的任务

在这里插入图片描述

1、任务名字

2、任务优先级(因为增加了一个层级结构,导致不再是以数字来决定优先级了)

3、栈大小

4、函数名(有别于第一条,第一条是字符串格式的,这条是定义代码中的函数名字)

5、代码生成设置(生成与否?还是生成弱函数——希望自行编写函数的选As External,希望自动生成的选Default)

6、传入的数据/指针,一般为NULL,有希望传入的数据可以修改

7、创建方式(动态或静态,一般动态,很少使用静态方式)


代码创建方式

osThreadId LED_Blink2Handle;

osThreadDef(LED_Blink2, Blink_PB1, osPriorityNormal, 0, 128);

LED_Blink2Handle = osThreadCreate(osThread(LED_Blink2), NULL);


代码创建也很简单,实际上osThreadCreate对xTaskCreate进行了封装,而osThreadDef与osThread都是宏定义,用于描述初始化变量的,通过预编译器巧妙的生成了函数名(字符串)与相关初始化变量赋给了函数osThreadCreate


LED_Blink2:希望生成的中间结构体名称也会被预编译器生成同名的字符串

Blink_PB1:真实的函数名称

osPriorityNormal:优先级

0:最大实例化个数(估计是以后会用到,目前这个变量还没什么作用,默认0就好)

128:栈空间


任务挂起与继续

/* USER CODE BEGIN Header_blink01 */

/**

* @brief Function implementing the Blink_PB0 thread.

* @param argument: Not used

* @retval None

*/

/* USER CODE END Header_blink01 */

void blink01(void const * argument)

{

  /* USER CODE BEGIN blink01 */

int i = 0;

  /* Infinite loop */

  for(;;)

  {

if(i == 10)

vTaskSuspend(Blink_PB1Handle);

if(i == 20)

vTaskResume(Blink_PB1Handle);

HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_1);

    osDelay(500);

i++;

  }

  /* USER CODE END blink01 */

}


/* USER CODE BEGIN Header_blink02 */

/**

* @brief Function implementing the Blink_PB1 thread.

* @param argument: Not used

* @retval None

*/

/* USER CODE END Header_blink02 */

void blink02(void const * argument)

{

  /* USER CODE BEGIN blink02 */

  /* Infinite loop */

  for(;;)

  {

HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_0);

    osDelay(1000);


  }

  /* USER CODE END blink02 */

}


真的是很简单,直接调用vTaskSuspend用于挂起某个任务,调用vTaskResume用于继续某个任务


关键字:STM32CubeMX  FreeRTOS_  任务挂起 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic468421.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:STM32 RTOS系统 学习笔记(一)
下一篇:stm32 FreeRTOS中如何创建任务

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

使用STM32CubeMX,生成STM32F103ZE SPI3 HAL 工程
1,选择芯片型号为STM32F103ZET6,开始工程,引脚配置如下:主要是RCC,SPI3,和SYS三个模块2,时钟配置,可按下图进行:3,SPI3配置,如下图,配完这一步其它可以不管,直接生成工程。4,生成工程,打开工程手动输入红框中内容。运行:成功输出波形。
发表于 2019-10-18
使用STM32CubeMX,生成STM32F103ZE SPI3 HAL 工程
STM32CubeMX 软件使用学习笔记1
1:CubeMX是ST公司开发的一款软件,旨在通过图形化的配置MCU方式,来减轻开发人员的工作量,让大家更轻松,快乐。用户使用图形化工具配置MCU后,CubeMX可以根据用户选择的IDE,来生成对应的工程文件(包含了初始化代码),下文将介绍。可以在ST的官网上查看CubeMX的功能介绍,并下载CubeMX. https://www.st.com/en/development-tools/stm32cubemx.html2:CubeMX下载完成后,在安装时,会提示安装java sdk, 按提示安装即可。3:安装完成后,打开软件,界面如下。4:手动安装MCU软件包。菜单栏“Help”->“manage embedde
发表于 2019-10-08
STM32CubeMX 软件使用学习笔记1
stm32 CubeMx falsh应用
STM32CubeMx工具没有配置Flash应用。需用户调用库函数实现FLASH的擦除、读、写操作。具体FLASH的擦除、读、写流程及具体配置详情需查看STM32 FLASH编程文档。现贴出基于STM32CubeMX工具MDK建立的工程文档,实现的FLASH操作代码。//读取指定地址的半字(16位数据)//faddr:读地址(此地址必须为2的倍数!!)//返回值:对应数据.uint16_t STMFLASH_ReadHalfWord(uint32_t faddr){return *(uint16_t*)faddr; }//从指定地址开始读出指定长度的数据//ReadAddr:起始地址//pBuffer:数据指针
发表于 2019-10-08
关于由CubeMx 生成stm32f4+freertos,不正常分析之堆栈大小设置
freertos官方手册上有说,移植中出现的问题大多数是由堆栈设置不合理造成的,今天结合自身遇到问题分析一下1.任务堆栈设置过小,很容易造成硬件溢出,跳转到void HardFault_Handler(void);调试方法,可以通过调用函数,UBaseType_t uxTaskGetStackHighWaterMark( TaskHandle_t xTask );来跟踪剩余堆栈,不过在CubeMx中的Configuration->FreeRtos->Include parameters中使能uxTaskGetStackHighWaterMark函数;2.整体设置过小,TOTAL_HEAP_SIZE
发表于 2019-09-30
STM32F4 CubeMX HAL CAN 使用步骤
(这仅仅是一个最简单的CAN示例Demo程序,仅作参考。最新的HAL库CAN的部分有所改变,不能直接使用该文方法。)STM32CubeMX版本:固件库版本:第一步分:CubeMX软件配置。0、工程配置以及芯片选择这里就不再赘述了,最好是勾选为每个外设生成独立的.c源文件。1、打开CAN外设。2、配置芯片时钟树。这里我使用了芯片内部HSI RC,主时钟配置为168MHz。3、CAN配置。3.1配置波特率为1Mb/s。计算方法:42M/2/(14+6+1)==1M3.2、使能RX0接收中断。到这里配置已经完成了,这里我们只配置了部分选项,其余大部分都是采用的默认配置。点击工具栏中齿轮图标,生成代码。第二部分:代码修改。1、打开
发表于 2019-09-30
STM32F4 CubeMX HAL CAN 使用步骤
stm32CubeMx CAN 发送数据
平台  STM32F429软件  STM32CubeMx 5.0.0固件库  STM32Cube_FW_F4_V1.23.0 目的: 实现 CAN 的发送 一  简介  CAN是控制器局域网络(Controller Area Network, CAN)的简称,是由研发和生产汽车电子产品著称的德国BOSCH公司开发了的,并最终成为国际标准(ISO11898)。是国际上应用最广泛的现场总线之一。 在北美和西欧,CAN总线协议已经成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线,并且拥有以CAN为底层协议专为大型货车和重工机械车辆设计的J1939协议
发表于 2019-09-30
stm32CubeMx CAN 发送数据
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved