基于uCOS-II系统的stm32物联网套件(温湿度传感器)开发—— 多任务LED闪烁
编写多任务应用程序,实现任务1控制LED1每500ms闪烁1次,任务2控制LED2 每1秒闪烁1次,任务3控制LED3每2秒闪烁1次,任务4控制LED4每4秒闪烁一次。
#include "includes.h"
//分别定义四个LED闪烁任务的栈
static OS_STK LED1_task_stk1[TASK_STK_SIZE];
static OS_STK LED2_task_stk2[TASK_STK_SIZE];
static OS_STK LED3_task_stk3[TASK_STK_SIZE];
static OS_STK LED4_task_stk4[TASK_STK_SIZE];
int main(void)
{
BSP_Init(); //初始化uCOS-II系统的板上时钟
OSInit(); //uCOS-II系统初始化
//创建四个LED闪烁任务
OSTaskCreate(Task_LED1,(void *)0,
&LED1_task_stk1[TASK_STK_SIZE-1], TASK_PRIO4);
OSTaskCreate(Task_LED2,(void *)0,
&LED2_task_stk2[TASK_STK_SIZE-1], TASK_PRIO5);
OSTaskCreate(Task_LED3,(void *)0,
&LED3_task_stk3[TASK_STK_SIZE-1], TASK_PRIO6);
OSTaskCreate(Task_LED4,(void *)0,
&LED4_task_stk4[TASK_STK_SIZE-1], TASK_PRIO7);
OSStart(); //uCOS-II系统启动函数
return 0;
}
#ifndef __APP_CFG_H__
#define __APP_CFG_H__
/*******************设置任务优先级*******************/
#define TASK_PRIO4 4
#define TASK_PRIO5 5
#define TASK_PRIO6 6
#define TASK_PRIO7 7
/************设置栈大小(单位为 OS_STK )************/
#define TASK_STK_SIZE 80
#endif
#include "includes.h"
int i=0;
void led_set(int num,int sta) //num为LED灯号,sta为设置灯的状态
{
if(sta==1)
{
switch(num)
{
case 1 :
GPIO_ResetBits(GPIOB,GPIO_Pin_4); //管脚复位函数
break;
case 2 :
GPIO_ResetBits(GPIOB,GPIO_Pin_5);
break;
case 3 :
GPIO_ResetBits(GPIOB,GPIO_Pin_6);
break;
case 4 :
GPIO_ResetBits(GPIOB,GPIO_Pin_7);
break;
default :
break;
}
}
else
{
switch(num)
{
case 1 :
GPIO_SetBits(GPIOB,GPIO_Pin_4); //管脚置位函数
break;
case 2 :
GPIO_SetBits(GPIOB,GPIO_Pin_5);
break;
case 3 :
GPIO_SetBits(GPIOB,GPIO_Pin_6);
break;
case 4 :
GPIO_SetBits(GPIOB,GPIO_Pin_7);
break;
default :
break;
}
}
}
//将四个LED灯全部熄灭
void led_init(void)
{
for(i=1;i<5;i++)
{
led_set(i,0); //设置LED状态函数
}
}
//LED1闪烁函数
void Task_LED1(void *p_arg)
{
led_init(); //LED初始化函数
while(1)
{
led_set(1,1); //设置LED状态函数
OSTimeDlyHMSM(0, 0, 0,250); //任务延时函数250ms
led_set(1,0);
OSTimeDlyHMSM(0, 0, 0,250);
}
}
//LED2闪烁函数
void Task_LED2(void *p_arg){
led_init(); //LED初始化函数
while(1)
{
led_set(2,1); //设置LED状态函数
OSTimeDlyHMSM(0, 0, 0,500); //任务延时函数500ms
led_set(2,0);
OSTimeDlyHMSM(0, 0, 0,500);
}
}
//LED3闪烁函数
void Task_LED3(void *p_arg){
led_init(); //LED初始化函数
while(1)
{
led_set(3,1); //设置LED状态函数
OSTimeDlyHMSM(0, 0, 1,0); //任务延时函数1s
led_set(3,0);
OSTimeDlyHMSM(0, 0, 1,0);
}
}
//LED4闪烁函数
void Task_LED4(void *p_arg){
led_init(); //LED初始化函数
while(1)
{
led_set(4,1); //设置LED状态函数
OSTimeDlyHMSM(0, 0, 2,0); //任务延时函数2s
led_set(4,0);
OSTimeDlyHMSM(0, 0, 2,0);
}
}
#ifndef _APP_H_
#define _APP_H_
/**************** 用户任务声明 *******************/
void Task_LED1(void *p_arg);
void Task_LED2(void *p_arg);
void Task_LED3(void *p_arg);
void Task_LED4(void *p_arg);
#endif //_APP_H_
学识有限,如有错误欢迎指正。