一、前言
在前面介绍了FRDM-K32L3A6开发板的硬件接口资源,以及上电点RGB灯,遇上十一国庆与中秋假期,今天来分享一下在该开发板上进行的FreeRTOS多线程任务。
二、概况
根据原本的计划,在FreeRTOS上,运行三个线程。
线程一:主要任务负责RGB灯的变化,代表设备在线运行。
线程二:串口1发送数据线程,可作为反馈PC端的串口调试工具发送过来数据后的响应结果
线程三:串口1接收数据线程,可接收来自PC端的串口调试工具发过来的数据包,后续接入蓝牙串口模块后,相当于接收来自手机端的数据包。数据解析后再实现对PWM的输出控制。
三、参考例程
前面也提到了,该开发板是双核架构,如果单独运行”cm0plus”中的例程会提示下载地址错误,程序运行不起来,因此建议采用“cm4”文件夹下的例程进行参考设计。此次借助SDK目录下的”SDK_25_06_00_FRDM-K32L3A6\boards\frdmk32l3a6\freertos_examples”例程,该原始程序比较简单,就创建了一个线程,从microUSB的串口0输出一段“Hello world.”字符就进入睡眠状态。
主程序源码如下:
/* FreeRTOS kernel includes. */
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"
#include "timers.h"
/* Freescale includes. */
#include "fsl_device_registers.h"
#include "fsl_debug_console.h"
#include "board.h"
#include "app.h"
/*******************************************************************************
* Definitions
******************************************************************************/
/* Task priorities. */
#define hello_task_PRIORITY (configMAX_PRIORITIES - 1)
/*******************************************************************************
* Prototypes
******************************************************************************/
static void hello_task(void *pvParameters);
/*******************************************************************************
* Code
******************************************************************************/
/*!
* @brief Application entry point.
*/
int main(void)
{
/* Init board hardware. */
BOARD_InitHardware();
if (xTaskCreate(hello_task, "Hello_task", configMINIMAL_STACK_SIZE + 100, NULL, hello_task_PRIORITY, NULL) !=
pdPASS)
{
PRINTF("Task creation failed!.\r\n");
while (1)
;
}
vTaskStartScheduler();
for (;;)
;
}
/*!
* @brief Task responsible for printing of "Hello world." message.
*/
static void hello_task(void *pvParameters)
{
for (;;)
{
PRINTF("Hello world.\r\n");
vTaskSuspend(NULL);
}
}
将工程编译后,在Keil中勾选下载后自动重启,下载完毕后,串口0打印输出如下:
由于发帖内容对图片有限制,精彩内容请见下篇帖子。

