高级会员
- 积分
- 717
- 金钱
- 717
- 注册时间
- 2016-6-10
- 在线时间
- 191 小时
|
1金钱
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "includes.h"
#include "LCD.h"
//UCOSIII中以下优先级用户程序不能使用,ALIENTEK
//将这些优先级分配给了UCOSIII的5个系统内部任务
//优先级0:中断服务服务管理任务 OS_IntQTask()
//优先级1:时钟节拍任务 OS_TickTask()
//优先级2:定时任务 OS_TmrTask()
//优先级OS_CFG_PRIO_MAX-2:统计任务 OS_StatTask()
//优先级OS_CFG_PRIO_MAX-1:空闲任务 OS_IdleTask()
/****start_task******/
//任务优先级
#define START_TASK_PRIO 3
//任务堆栈大小(字节)
#define START_STK_SIZE 128
//任务控制块
OS_TCB StartTaskTCB;
//任务堆栈
CPU_STK START_TASK_STK[START_STK_SIZE];
//任务函数
void start_task(void *p_arg);
/****tesk1_tesk******/
#define TASK1_TASK_PRIO 4
#define TASK1_STK_SIZE 128
OS_TCB TASK1TaskTCB;
CPU_STK TASK1_TASK_STK[TASK1_STK_SIZE];
void task1_task(void *p_arg);
int main(void)
{
OS_ERR *err;//错误类型报告
CPU_SR_ALLOC();//定义并将CPU的状态写为0(大概在进入临界区之前都要定义)
//初始化外设部分
delay_init();
LED_Init();
LCD_Init();
OSInit(err);//ucos初始化
//进入临界区
OS_CRITICAL_ENTER();
//创建第一个任务
OSTaskCreate( (OS_TCB * )&StartTaskTCB, //任务控制块
(CPU_CHAR * )"start task", //任务名字(字符串)
(OS_TASK_PTR )start_task, //任务函数
(void * )0, //传递给任务函数的参数
(OS_PRIO )START_TASK_PRIO, //任务优先级
(CPU_STK * )&START_TASK_STK[0],//任务堆栈基地址
(CPU_STK_SIZE)START_STK_SIZE/10, //任务堆栈深度限位
(CPU_STK_SIZE)START_STK_SIZE, //任务堆栈大小
(OS_MSG_QTY )0, //任务内部消息队列能够接收的最大消息数目,为0时禁止接收消息
(OS_TICK )0, //当使能时间片轮转时的时间片长度,为0时为默认长度,
(void * )0, //用户补充的存储区
(OS_OPT )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR, //任务选项
(OS_ERR * )err); //存放该函数错误时的返回值
//退出临界区
OS_CRITICAL_EXIT();
OSStart(err);//启动操作系统
}
//起始任务(创建其他任务)
void start_task(void *p_arg)
{
OS_ERR *err;//错误类型报告
CPU_SR_ALLOC();
p_arg = p_arg;
CPU_Init();
LCD_ShowString(30,30,200,16,16,"UCOSIII Examp 6-3");
OS_CRITICAL_ENTER();
//创建第二个任务
OSTaskCreate( (OS_TCB * )&TASK1TaskTCB, //任务控制块
(CPU_CHAR * )"task1 task", //任务名字(字符串)
(OS_TASK_PTR )task1_task, //任务函数
(void * )0, //传递给任务函数的参数
(OS_PRIO )TASK1_TASK_PRIO, //任务优先级
(CPU_STK * )&START_TASK_STK[0],//任务堆栈基地址
(CPU_STK_SIZE)TASK1_STK_SIZE/10, //任务堆栈深度限位
(CPU_STK_SIZE)TASK1_STK_SIZE, //任务堆栈大小
(OS_MSG_QTY )0, //任务内部消息队列能够接收的最大消息数目,为0时禁止接收消息
(OS_TICK )0, //当使能时间片轮转时的时间片长度,为0时为默认长度,
(void * )0, //用户补充的存储区
(OS_OPT )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR, //任务选项
(OS_ERR * )err); //存放该函数错误报告
OS_CRITICAL_EXIT();
OSTaskDel((OS_TCB*)0,err); //删除start_task任务自身
}
//task1_task任务,使显示屏每一秒刷一次屏
void task1_task(void *p_arg)
{
OS_ERR *err;//错误类型报告
char i=2;
unsigned int color[]={0xFFFF,0x0000,0x001F};
while(1)
{
LCD_Clear(color[i]);//清屏,并加入相应的颜色
LCD_ShowString(30,30,200,16,16,"UCOSIII Examp 6-3");
i++;
if(i==3)i=0;
//任务延时500ms
OSTimeDly(500,OS_OPT_TIME_HMSM_STRICT,err);
}
}
以上为源代码,帮忙看看吧,谢谢了
|
|