初级会员
- 积分
- 79
- 金钱
- 79
- 注册时间
- 2017-4-6
- 在线时间
- 13 小时
|
楼主 |
发表于 2017-8-29 07:44:01
|
显示全部楼层
谢谢了 代码如下
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "FreeRTOS.h"
#include "task.h"
#include "timer.h"
#include "key.h"
#include "queue.h"
/************************************************
ALIENTEK 精英STM32F103开发板 FreeRTOS实验2-1
FreeRTOS移植实验-库函数版本
技术支持:www.openedv.com
淘宝店铺:http://eboard.taobao.com
关注微信公众平台微信号:"正点原子",免费获取STM32资料。
广州市星翼电子科技有限公司
作者:正点原子 @ALIENTEK
************************************************/
/////////////////start_configure///////////////////
#define start_Stack 150 //设置堆栈大小
#define start_Pro 1 //设置优先级
TaskHandle_t start_Handle; //设置句柄
void start_task(void *pvParameters); //初始化函数
/////////////////led1_configure///////////////////
#define led1_Stack 25 //设置堆栈大小
#define led1_Pro 8 //设置优先级
TaskHandle_t led1_Handle; //设置句柄
void led1_task(void *pvParameters); //初始化函数
/////////////////LED2_configure///////////////////
#define led2_Stack 25 //设置堆栈大小
#define led2_Pro 7 //设置优先级
TaskHandle_t led2_Handle; //设置句柄
void led2_task(void *pvParameters); //初始化函数
/////////////////KEY1_configure///////////////////
#define key1_Stack 25 //设置堆栈大小
#define key1_Pro 6 //设置优先级
TaskHandle_t key1_Handle; //设置句柄
void key1_task(void *pvParameters); //初始化函数
/////////////////KEY0_configure///////////////////
#define key0_Stack 25 //设置堆栈大小
#define key0_Pro 5 //设置优先级
TaskHandle_t key0_Handle; //设置句柄
void key0_task(void *pvParameters); //初始化函数
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//设置系统中断优先级分组4
delay_init(); //延时函数初始化
uart_init(115200); //初始化串口
LED_Init();
key_init();
//任务句柄
xTaskCreate( (TaskFunction_t) start_task,
(const char * ) "start_task",
(uint16_t ) start_Stack,
(void * ) NULL,
(UBaseType_t ) start_Pro,
(TaskHandle_t *) &start_Handle );
vTaskStartScheduler(); //开启任务调度
}
void start_task(void *pvParameters)
{
taskENTER_CRITICAL();
xTaskCreate((TaskFunction_t) led1_task,
(const char * ) "led1_task",
(uint16_t ) led1_Stack,
(void * ) NULL,
(UBaseType_t ) led1_Pro,
(TaskHandle_t *) &led1_Handle );
xTaskCreate((TaskFunction_t) led2_task,
(const char * ) "led2_task",
(uint16_t ) led2_Stack,
(void * ) NULL,
(UBaseType_t ) led2_Pro,
(TaskHandle_t *) &led2_Handle );
xTaskCreate((TaskFunction_t) key1_task,
(const char * ) "key1_task",
(uint16_t ) key1_Stack,
(void * ) NULL,
(UBaseType_t ) key1_Pro,
(TaskHandle_t *) &key1_Handle );
xTaskCreate((TaskFunction_t) key0_task,
(const char * ) "key0_task",
(uint16_t ) key0_Stack,
(void * ) NULL,
(UBaseType_t ) key0_Pro,
(TaskHandle_t *) &key0_Handle );
vTaskDelete( start_Handle );
taskEXIT_CRITICAL();
}
void led1_task(void *pvParameters)
{
while(1)
{
LED0=~LED0;
vTaskDelay(1000);
}
}
void led2_task(void *pvParameters)
{
while(1)
{
LED1=~LED1;
vTaskDelay(500);
}
}
void key1_task(void *pvParameters)
{
u8 key;
while(1)
{
key=PressKey(0);
if(key==Key1OK)
{
vTaskSuspend(led1_Handle);
}
}
}
void key0_task(void *pvParameters)
{
u8 key;
while(1)
{
key=PressKey(0);
if(key==Key0OK)
{
vTaskResume(led1_Handle);
}
}
}
|
|