【RTX操作系统教程】第13章 事件标志组(下)

标签:
cosiiiemwinrtxstm32f407安富莱 |
分类: RTX及其中间件 |
第13章
事件标志组
前面的章节我们已经讲解了任务管理和时间管理,从本章节开始讲解任务间的通信和同步机制。首先讲解任务间的通信和同步机制之一,事件标志组。
本章教程配套的例子含Cortex-M3内核的STM32F103和Cortex-M4内核的STM32F407。
13.1 事件标志组
13.2 事件标志组API函数
13.3 实验例程说明(任务间通信)
13.4 实验例程说明(中断方式通信)
13.5
13.4 实验例程说明(中断方式通信)
13.4.1 STM32F103 开发板实验
配套例子:
V4-410_RTX实验_事件标志组(中断方式)
实验目的:
1.
实验内容:
1.
2.
3.
4.
5.
AppTaskUserIF任务
AppTaskLED任务
AppTaskMsgPro任务 :消息处理,等待定时器中断发来的事件标志。
AppTaskStart任务
RTX配置:
RTX配置向导详情如下:
u
l
允许创建4个任务,实际创建了如下四个任务
l
创建的4个任务都是采用自定义堆栈方式。
RTX任务调试信息:
u
u
程序设计:
u
static uint64_t
AppTaskUserIFStk[512/8];
static uint64_t
AppTaskLEDStk[256/8];
static uint64_t
AppTaskMsgProStk[512/8];
static uint64_t
AppTaskStartStk[512/8];
将任务栈定义成uint64_t类型可以保证任务栈是8字节对齐的,8字节对齐的含义就是数组的首地址对8求余等于0。如果不做8字节对齐的话,部分C语言库函数,浮点运算和uint64_t类型数据运算会出问题。
u
u
int main (void)
{
}
u
static void AppTaskCreate (void)
{
}
u
__task void AppTaskUserIF(void)
{
件标志\r\n");
件标志\r\n");
}
__task void AppTaskLED(void)
{
}
__task void AppTaskMsgPro(void)
{
}
__task void AppTaskStart(void)
{
}
u
定时器中断的初始化和中断函数在bsp_timer.c文件中实现,这个不是教程的重点,故不作介绍。这里主要关心RTX的事件标志函数在中断服务程序中的使用方法。
static void TIM_CallBack1(void)
{
}
static void TIM_CallBack2(void)
{
}
13.4.2 STM32F407开发板实验
配套例子:
V5-410_RTX实验_事件标志组(中断方式)
实验目的:
1.
实验内容:
1.
2.
3.
4.
5.
AppTaskUserIF任务
AppTaskLED任务
AppTaskMsgPro任务 :消息处理,等待定时器中断发来的事件标志。
AppTaskStart任务
RTX配置:
RTX配置向导详情如下:
u
l
允许创建4个任务,实际创建了如下四个任务
l
创建的4个任务都是采用自定义堆栈方式。
RTX任务调试信息:
u
u
程序设计:
u
static uint64_t
AppTaskUserIFStk[512/8];
static uint64_t
AppTaskLEDStk[256/8];
static uint64_t
AppTaskMsgProStk[512/8];
static uint64_t
AppTaskStartStk[512/8];
将任务栈定义成uint64_t类型可以保证任务栈是8字节对齐的,8字节对齐的含义就是数组的首地址对8求余等于0。如果不做8字节对齐的话,部分C语言库函数,浮点运算和uint64_t类型数据运算会出问题。
u
u
int main (void)
{
}
u
static void AppTaskCreate (void)
{
}
u
__task void AppTaskUserIF(void)
{
件标志\r\n");
件标志\r\n");
}
__task void AppTaskLED(void)
{
}
__task void AppTaskMsgPro(void)
{
}
__task void AppTaskStart(void)
{
}
u
定时器中断的初始化和中断函数在bsp_timer.c文件中实现,这个不是教程的重点,故不作介绍。这里主要关心RTX的事件标志函数在中断服务程序中的使用方法。
static void TIM_CallBack1(void)
{
}
static void TIM_CallBack2(void)
{
}
13.5总结
本章节就为大家讲解了任务间的通信和同步机制之一,事件标志组,初学者要稍花些时间将其掌握。