当前位置:首页 > STM32CubeMX+FreeRTOS学习[5] 邮箱队列(Lu)
FreeRTOS学习之五:邮箱队列
前提:默认已经装好MDK V5和STM32CubeMX,并安装了STM32F1xx系列的支持包。 硬件平台:STM32F1xx系列。 目的:学习邮箱队列的使用。 如果队列存储的数据单元尺寸较大,那最好是利用队列来传递数据的指针而不是对 数据本身在队列上一字节一字节地拷贝进或拷贝出。传递指针无论是在处理速度上还是 内存空间利用上都更有效。这个实现方式就是邮箱队列,它传递的是数据的指针。 实际上,STM32Cube所使用的FreeRTOS已经在CMSIS标准接口文件cmsis_os.c实现了邮箱队列。当前STM32CubeMX版本V4.14,还不支持配置生成邮箱队列。但是可以参考STM32Cube提供的例程,学习使用邮箱队列。
本文例子使用STM32CubeMX配置创建两个任务,一个任务每隔一定时间发送一个消息到邮箱队列,另一个等待邮箱消息并根据消息的内容控制LED的闪烁次数。
Step1.打开STM32CubeMX,点击“New Project”,选择芯片型号,STM32F103RBTx。
Step2.配置时钟引脚。
Step3.配置PA8和PD2为Output,并把用户标签分别改为LED0,LED1。
Step4.将系统时基源改为TIM4。
Step5.使能FreeRTOS。
Step6.配置时钟树。8M输入时,通过PLL得到72M内部时钟。
Step7.配置FreeRTOS。
在Tasks and Queues选项卡,默认配置了一个名为defaultTask的任务,其优先级为普通,任务堆栈大小为128字,任务函数名为StartDefaultTask。 双击蓝色的地方,弹出对话框,将任务名修改为MailProducer,将任务函数名修改为MailProducerTask。
点击Add按钮,增加一个任务MailConsumer,优先级设置为Normal,函数名为MailConsumerTask。
注:其他的都使用默认参数。 Step8.生成代码。
等完成后直接打开工程。
工程基本组织结构如下图,其中Application/User组中的文件是用户可以修改的,而其他组中的文件一般不进行修改。
Step9.分析程序结构。
在进入main函数之前,先定义了几个变量,声明了几个函数。
再看main函数。将main函数整理,删除很多注释之后,得到下图所示内容。
其中第①部分,是硬件配置;第②部分,创建两个任务;第③部分,启动调度器。
共分享92篇相关文档