[mw_shl_code=c,true]#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "key.h"
#include "lcd.h"
#include "includes.h"
/////////////////////////UCOSII任务堆栈设置///////////////////////////////////
//START 任务
//设置任务优先级
#define START_TASK_PRIO 10 //开始任务的优先级设置为最低
//设置任务堆栈大小
#define START_STK_SIZE 128
//创建任务堆栈空间
OS_STK START_TASK_STK[START_STK_SIZE];
//任务函数接口
void start_task(void *pdata);
//LED1任务
//设置任务优先级
#define LED1_TASK_PRIO 5
//设置任务堆栈大小
#define LED1_STK_SIZE 64
//创建任务堆栈空间
OS_STK LED1_TASK_STK[LED1_STK_SIZE];
//任务函数接口
void led1_task(void *pdata);
//LED2任务
//设置任务优先级
#define LED2_TASK_PRIO 4
//设置任务堆栈大小
#define LED2_STK_SIZE 64
//创建任务堆栈空间
OS_STK LED2_TASK_STK[LED2_STK_SIZE];
//任务函数接口
void led2_task(void *pdata);
//KEY任务
//设置任务优先级
#define KEY_TASK_PRIO 2
//设置任务堆栈大小
#define KEY_STK_SIZE 64
//创建任务堆栈空间
OS_STK KEY_TASK_STK[KEY_STK_SIZE];
//任务函数接口
void key_task(void *pdata);
//LCD显示任务
//设置任务优先级
#define LCD_TASK_PRIO 3
//设置任务堆栈大小
#define LCD_STK_SIZE 64
//创建任务堆栈空间
OS_STK LCD_TASK_STK[KEY_STK_SIZE];
//任务函数接口
void lcd_task(void *pdata);
int main(void)
{
SystemInit();
delay_init(); //延时初始化
NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(9600);
LED_Init(); //初始化与LED连接的硬件接口
KEY_Init();
LCD_Init();
OSInit();
OSTaskCreate(start_task,(void *)0,(OS_STK *)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO );//创建起始任务
OSStart();
}
//开始任务
void start_task(void *pdata)
{
OS_CPU_SR cpu_sr=0;
pdata = pdata;
OSStatInit(); //初始化统计任务.这里会延时1秒钟左右
OS_ENTER_CRITICAL(); //进入临界区(无法被中断打断)
OSTaskCreate(led1_task,(void *)0,(OS_STK*)&LED1_TASK_STK[LED1_STK_SIZE-1],LED1_TASK_PRIO);
OSTaskCreate(led2_task,(void *)0,(OS_STK*)&LED2_TASK_STK[LED2_STK_SIZE-1],LED2_TASK_PRIO);
OSTaskCreate(key_task,(void *)0,(OS_STK*)&KEY_TASK_STK[KEY_STK_SIZE-1],KEY_TASK_PRIO);
OSTaskCreate(lcd_task,(void *)0,(OS_STK*)&LCD_TASK_STK[LCD_STK_SIZE-1],LCD_TASK_PRIO);
OSTaskSuspend(START_TASK_PRIO); //挂起起始任务.
OS_EXIT_CRITICAL(); //退出临界区(可以被中断打断)
}
//LED1任务
void led1_task(void *pdata)
{
while(1)
{
LED0=!LED0;
// delay_ms(300);
POINT_COLOR=RED;
LCD_ShowString(30,90,200,16,16,"led0 task on");
OSTimeDlyHMSM(0,0,0,300);
}
}
//LED2任务
void led2_task(void *pdata)
{
while(1)
{
LED1=!LED1;
// delay_ms(300);
POINT_COLOR=RED;
LCD_ShowString(30,110,200,16,16,"led1 task on");
OSTimeDlyHMSM(0,0,0,300);
}
}
//KEY任务
void key_task(void *pdata)
{
u8 key;
while(1)
{
key = KEY_Scan(0);
if(key == 1)
{
OSTaskSuspend(LED1_TASK_PRIO);
OSTaskSuspend(LED2_TASK_PRIO);
POINT_COLOR=RED;
LCD_ShowString(30,150,200,16,16,"TASK1");
}
else if(key == 2)
{
OSTaskResume(LED1_TASK_PRIO);
OSTaskResume(LED2_TASK_PRIO);
POINT_COLOR=RED;
LCD_ShowString(30,170,200,16,16,"TASK2");
}
OSTimeDlyHMSM(0,0,0,10);
}
}
//LCD显示任务
void lcd_task(void *pdata)
{
while(1)
{
// LCD_Clear(WHITE);
POINT_COLOR=RED;
LCD_ShowString(30,130,200,16,16,"yys_ucos");
OSTimeDlyHMSM(0,0,0,10);
}
}
[/mw_shl_code]
|