884|9

1976

帖子

4

TA的资源

纯净的硅(高级)

 

FreeRTOS (1)简单线程&消息队列 [复制链接]

FreeRTOS (1)简单线程&消息队列

因为工作需后续可能要用上那啥,趁现在赶紧学起来。

搞个LED线程:

//LED 任务 句柄,可以用来删除任务之类
TaskHandle_t Tled;
// 任务Function 不能有返回值
void vTaskLed1(void *pvParameters)
{
/* 任务都是一个无限,不能返回 */
while(1)
{
HAL_GPIO_WritePin(LED_GREEN_GPIO_Port,LED_GREEN_Pin,GPIO_PIN_RESET);
/* 阻塞延时,单位ms */
vTaskDelay( 500 );
HAL_GPIO_WritePin(LED_GREEN_GPIO_Port,LED_GREEN_Pin,GPIO_PIN_SET);
vTaskDelay( 500 );
}
}
//第一个参数是function的名字,第二个参数是备注,第三个参数是堆栈大小,
// 第4个参数是引用pvParameters,第5个参数是优先级 第6个参数是任务句柄 xTaskCreate(vTaskLed1,"Green led",512,NULL,1,&Tled);
// 直接运行结果是闪灯

其他创建线程也是同样的道理。

任务之间消息传递需要消息队列

整一个任务发,整一个任务收。

// 消息队列 句柄
QueueHandle_t xQueue;
//创建消息队列 ,消息队列长度为10,每个消息的大小用byte表示
xQueue = xQueueCreate( 10, sizeof( char ) );
// 任务Function 不能有返回值
void vTaskLed1(void *pvParameters)
{
int32_t i=0;
/* 任务都是一个无限,不能返回 */
while(1)
{
HAL_GPIO_WritePin(LED_GREEN_GPIO_Port,LED_GREEN_Pin,GPIO_PIN_RESET);
/* 阻塞延时,单位ms */
vTaskDelay( 500 );
HAL_GPIO_WritePin(LED_GREEN_GPIO_Port,LED_GREEN_Pin,GPIO_PIN_SET);
vTaskDelay( 500 );
//1s发送一次i
i++;
//发送消息,消息内容是i,如果消息队列满了等0 ticks 继续发送
xQueueSendToBack( xQueue, &i, 0 );
}
}
void vTaskLed2(void *pvParameters)
{
int32_t lReceivedValue=0;
const TickType_t xTicksToWait = pdMS_TO_TICKS( 100 );
while(1)
{
vTaskDelay( 500 );
// 接收消息队列 接收值存在1RecivedValue里面,如果消息队列空了,等待x 个ticks
xQueueReceive( xQueue, &lReceivedValue, xTicksToWait );
//判断接收值是啥
if(lReceivedValue>=200)
{
HAL_GPIO_WritePin(LED_RED_GPIO_Port,LED_RED_Pin,GPIO_PIN_RESET);
}
else
{
HAL_GPIO_WritePin(LED_RED_GPIO_Port,LED_RED_Pin,GPIO_PIN_SET);
}
}
}

效果是,LED闪,闪了一会后另外一个灯灭。

211334k44tmeicssi4y6zy.png

实物图1

参考文档:

FreeRTOS Reference manual

Mastering the FreeRTOS

此帖出自stm32/stm8论坛

最新回复

STM32H723ZG High-performance and DSP with DP-FPU, Arm Cortex-M7 MCU with 1 MByte Flash, 564 KB RAM, 550 MHz CPU, L1 cache, external memory interface, subset of peripherals   这就是所谓的“一级缓存”吗?   详情 回复 发表于 2023-6-5 17:41
个人签名

希望做一些大家觉得好用的东西!

 

回复

1524

帖子

0

TA的资源

五彩晶圆(初级)

 

 

先马住楼主的FreeRTOS (1)简单线程&消息队列

应该还有FreeRTOS (2)

此帖出自stm32/stm8论坛

点评

慢慢整  详情 回复 发表于 2023-5-29 11:21
 
 

回复

5065

帖子

4

TA的资源

版主

 

感谢分享消息队列在线程间或中断到线程间安全传递消息很好用。

此帖出自stm32/stm8论坛

点评

刚开始整,也不知道对不对  详情 回复 发表于 2023-5-29 11:21
 
 

回复

1976

帖子

4

TA的资源

纯净的硅(高级)

 
火辣西米秀 发表于 2023-5-27 08:42   先马住楼主的FreeRTOS (1)简单线程&消息队列 应该还有FreeRTOS (2)

慢慢整

此帖出自stm32/stm8论坛
 
个人签名

希望做一些大家觉得好用的东西!

 
 

回复

1976

帖子

4

TA的资源

纯净的硅(高级)

 
damiaa 发表于 2023-5-29 11:04 感谢分享消息队列在线程间或中断到线程间安全传递消息很好用。

刚开始整,也不知道对不对

此帖出自stm32/stm8论坛
 
个人签名

希望做一些大家觉得好用的东西!

 
 

回复

6577

帖子

2

TA的资源

五彩晶圆(中级)

 

谢谢分享,期待后续!

此帖出自stm32/stm8论坛
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复

219

帖子

0

TA的资源

一粒金砂(高级)

 

这是ST哪块板子,感觉芯片挺高配的

之前学习过程中,怀疑FreeRTOS有些功能若资源低了跑不起来

此帖出自stm32/stm8论坛

点评

723zg  详情 回复 发表于 2023-6-5 10:04
 
 
 

回复

1976

帖子

4

TA的资源

纯净的硅(高级)

 
starcat123 发表于 2023-6-3 15:35 这是ST哪块板子,感觉芯片挺高配的 之前学习过程中,怀疑FreeRTOS有些功能若资源低了跑不起来

723zg

此帖出自stm32/stm8论坛

点评

STM32H723ZG High-performance and DSP with DP-FPU, Arm Cortex-M7 MCU with 1 MByte Flash, 564 KB RAM, 550 MHz CPU, L1 cache, external memory interface, subset of peripherals   这就是所谓的  详情 回复 发表于 2023-6-5 17:41
 
个人签名

希望做一些大家觉得好用的东西!

 
 

回复

219

帖子

0

TA的资源

一粒金砂(高级)

 

STM32H723ZG

High-performance and DSP with DP-FPU, Arm Cortex-M7 MCU with 1 MByte Flash, 564 KB RAM, 550 MHz CPU, L1 cache, external memory interface, subset of peripherals

 

这就是所谓的“一级缓存”吗?

此帖出自stm32/stm8论坛

点评

对,是一级缓存  详情 回复 发表于 2023-6-7 10:41
 
 
 

回复

1976

帖子

4

TA的资源

纯净的硅(高级)

 
starcat123 发表于 2023-6-5 17:41 STM32H723ZG High-performance and DSP with DP-FPU, Arm Cortex-M7 MCU with 1 MByte Flash, 564 KB ...

对,是一级缓存

此帖出自stm32/stm8论坛
 
个人签名

希望做一些大家觉得好用的东西!

 
 

回复
您需要登录后才可以回帖 登录 | 注册

猜你喜欢
随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2023 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表