完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#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);//清屏,并加入相应的颜色 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); } } 以上为源代码,帮忙看看吧,谢谢了 |
|
相关推荐
7个回答
|
|
执行完。退出主函数了?
|
|
|
|
我不是启动任务调度了吗?应该会跳到开始任务去执行呀
|
|
|
|
我说的是。主函数已经出栈了、、
|
|
|
|
主函数最后加 while(1);
|
|
|
|
不是加while(1)的原因,而是在main函数初始化的时候需要加上时间初始化提供心跳节拍与串口初始化(我现在是不能理解加上串口初始化的作用)根据发烧友的例程,但是去掉的话就是出现复位之后死机的情况。
|
|
|
|
err 野指针 不知道你发现没有
|
|
|
|
在开始任务中将开关中断的两条宏去掉试试。
|
|
|
|
只有小组成员才能发言,加入小组>>
772 浏览 0 评论
1148 浏览 1 评论
2527 浏览 5 评论
2858 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2709 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1061浏览 3评论
189浏览 2评论
453浏览 2评论
365浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
452浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-19 16:47 , Processed in 1.371856 second(s), Total 92, Slave 72 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号