| 
 
高级会员 
 
	积分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);
 }
 }
 
 以上为源代码,帮忙看看吧,谢谢了
 
 
 | 
 |