完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
FreeRTOS是一个迷你的实时操作系统内核.。作为一个轻量级的操作系统,功能包括:.任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等,可基本满足较小系统的需要。一、利用FreeRTOS程序完成多任务功能 本过程主要执行完成三个周期性task 1. 创建FreeRTOS内核环境
/* FreeRTOS头文件 */ #include "FreeRTOS.h" #include "task.h" /* 开发板硬件BSP头文件 */ #include "bsp_led.h" #include "bsp_usart.h" /****************************任务句柄********************************/ /* 创建任务句柄 */ static TaskHandle_t AppTaskCreate_Handle = NULL; /* LED1任务句柄 */ static TaskHandle_t LED1_Task_Handle = NULL; /* LED2任务句柄 */ static TaskHandle_t AHT20_Task_Handle = NULL; static TaskHandle_t Usart_Task_Handle = NULL; /* ************************************************************************* * 函数声明 ************************************************************************* */ static void AppTaskCreate(void);/* 用于创建多任务 */ static void LED1_Task(void* pvParameters);/* LED1_Task 任务实现*/ static void AHT20_Task(void* pvParameters);/* AHT20_Task任务实现 */ static void Usart_Task(void* pvParameters);/* Usart_Task任务实现*/ static void BSP_Init(void);/* 用于初始化板载资源 */ int main(void) { BaseType_t xReturn = pdPASS;/* 定义一个创建信息返回值,默认为pdPASS */ /* 开发硬件初始化 */ BSP_Init(); //printf("FreeRTOS-动态创建多任务!rn"); /* 创建AppTaskCreate任务 */ xReturn = xTaskCreate((TaskFunction_t )AppTaskCreate, (const char* )"AppTaskCreate", (uint16_t )512, (void* )NULL, (UBaseType_t )1, (TaskHandle_t* )&AppTaskCreate_Handle); /*启动任务调度*/ if(pdPASS == xReturn) vTaskStartScheduler(); else return -1; while(1); } static void AppTaskCreate(void) { BaseType_t xReturn = pdPASS; taskENTER_CRITICAL(); /* 创建LED_TASK任务 */ xReturn = xTaskCreate((TaskFunction_t )LED1_Task, (const char* )"LED1_Task", (uint16_t )512, (void* )NULL, (UBaseType_t )2, (TaskHandle_t* )&LED1_Task_Handle); if(pdPASS == xReturn); /* 创建AHT20_TASK */ xReturn = xTaskCreate((TaskFunction_t )AHT20_Task, (const char* )"AHT20_Task", (uint16_t )512, (void* )NULL, (UBaseType_t )3, (TaskHandle_t* )&AHT20_Task_Handle); if(pdPASS == xReturn); /* 创建USART_TASK */ xReturn = xTaskCreate((TaskFunction_t )Usart_Task, (const char* )"Usart", (uint16_t )512, (void* )NULL, (UBaseType_t )4, (TaskHandle_t* )&Usart_Task_Handle); if(pdPASS == xReturn); vTaskDelete(AppTaskCreate_Handle); taskEXIT_CRITICAL(); } static void LED1_Task(void* parameter) { while (1) { LED1_ON; vTaskDelay(500); LED1_OFF; vTaskDelay(500); } } static void Usart_Task(void* parameter) { while (1) { vTaskDelay(2000); Usart_SendString( DEBUG_USARTx," helloworld!nn"); } } static void AHT20_Task(void* parameter) { while (1) { LED2_ON; vTaskDelay(5000); LED2_OFF; vTaskDelay(5000); } } static void BSP_Init(void) { NVIC_PriorityGroupConfig( NVIC_PriorityGroup_4 ); LED_GPIO_Config(); USART_Config(); } 从代码中我们可以看到,我们创建了三个任务LED灯闪烁,字符串的发送,以及AHT20模块的实现。其中我们利用之前的模板进行修改,添加了一个用于发送的库。 二、运用串口助手进行窗口调试
本次学习了FreeRTOS多程序的编写实现,在整个过程中主要是代码需要进行完善,以及一些库的添加还有启动文件的变换,这次学习了解了FreeRTO的用法,很不错。 |
|
|
|
只有小组成员才能发言,加入小组>>
3277 浏览 9 评论
2950 浏览 16 评论
3454 浏览 1 评论
8983 浏览 16 评论
4044 浏览 18 评论
1092浏览 3评论
564浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
561浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2297浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1854浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-19 13:13 , Processed in 1.015320 second(s), Total 81, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号