完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
#include "includes.h"
OS_STK startup_task_stk[STARTUP_TASK_STK_SIZE]; OS_STK task1_stk[TASK1_STK_SIZE]; OS_STK task2_stk[TASK2_STK_SIZE]; OS_EVENT *pmsgqueue; //指向创建的事件块 void *msgqueue[4]; //指向队列数组的指针,各成员指向具体的信息 int main(void) { //由于使用UCOS,注意一下的初始化虽然可以在OS运行之前运行,但注意别使能任何中断.也就是说不能用systick_init(); BSP_Init(); /*初始化外设*/ OSInit(); /* 初始化相依的系统变量*/ OSTaskCreate(start_task,(void*)0,&startup_task_stk[STARTUP_TASK_STK_SIZE-1],STARTUP_TASK_PRIO); OSStart(); /* 启动任务系统 */ return 0; } void start_task(void *p_arg) { (void)p_arg; systick_init(); //初始化时钟 OSTaskCreate(task1,(void*)0,&task1_stk[TASK1_STK_SIZE-1],TASK1_PRIO); OSTaskCreate(task2,(void*)0,&task2_stk[TASK2_STK_SIZE-1],TASK2_PRIO); OSTaskDel(OS_PRIO_SELF); //删除任务自己 } /*发送消息到一个对列的队尾*/ void task1(void *p_arg) { INT8U i; int buffer[4]; //4个消息内容分别一个对应的灯 buffer[0]=0; buffer[1]=1; buffer[2]=2; buffer[3]=3; (void)p_arg; pmsgqueue=OSQCreate(msgqueue,1); //创建一个消息队列,消息队列的数组大小为4 while(1) { if(OSQPost(pmsgqueue,&buffer[i])==OS_NO_ERR) //判断是否发送成功 { i++; if(i==4)i=0; OSTimeDlyHMSM(0,0,2,0); }//if // OSTimeDlyHMSM(0,0,1,0); // OSQFlush(pmsgqueue); }//while } //读取队列中的信息 void task2(void *p_arg) { INT8U err; char *buffer; (void)p_arg; while (1) { buffer=OSQPend(pmsgqueue,100,&err); //读出邮箱信息 if(err==OS_NO_ERR) { led_on(*buffer++); OSTimeDlyHMSM(0,0,1,0); led_off(*buffer++); OSTimeDlyHMSM(0,0,1,0); } //if }//while } |
|
相关推荐
2个回答
|
|
注意任务1,2的优先级
|
|
|
|
学习了,ucos不太懂呢。
|
|
|
|
只有小组成员才能发言,加入小组>>
UCOSII中断中添加OSSemPost(Sem);程序无法运行
5010 浏览 1 评论
在BC5.0上编译uC/OS-II出现"eeror writing object file",怎样处理???
3224 浏览 1 评论
598浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-27 00:56 , Processed in 0.476170 second(s), Total 46, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号