嵌入式ucos ii 消息队列设计,我的代码出了些问题,求指点 ,只有20财富都给了

想达到的效果是一个位置打印每5秒random的100,另一个位置如果按下回车,打印一次临时的random的100。设计是主任务①申请消息队列,时限到时,发信号采样②申请消... 想达到的效果是一个位置打印每5秒random的100,另一个位置如果按下回车,打印一次临时的random的100。设计是主任务①申请消息队列,时限到时,发信号采样②申请消息队列,申请到消息时,发信号采样。TASK2(临时采样):如果按下回车键发消息到消息队列实现立刻采样。TASK3(持续采样):生成100内随即数。 我的代码老师说乱,无法控制,打印的不对,两个打印的语句要怎样写、写在哪才能实现我的预期?请高手赐教如何编写,尽量按照任务的设计编写!

/************************任务Task1*******************************/
void Task1 (void *pdata)
{
char *msg;
INT8U err;

pdata = pdata;
for (;;) {
msg = OSQPend(MsgQueue, 1000, &err);

OSSemPost(Sem); /* 发送信号量给采样任务,使采样任务运行 */

PC_DispStr(10, 10, "is getting", DISP_FGND_YELLOW + DISP_BGND_BLUE);
OSTimeDlyHMSM(0, 0, 2, 100);
}
}
/************************任务Task2******************************/
void Task2 (void *pdata)
{
char *msg;
INT16S key;
INT16S x;

pdata = pdata;

for (;;) {
if (PC_GetKey(&key))
/* See if key has been pressed */
if (key == 0x0D)
{ /* Yes, see if it's the ENTER key */
*msg = 1;
OSQPost(MsgQueue, (char *)msg);
}
OSTimeDlyHMSM(0, 0, 2, 200);

}

}

/************************任务Task3******************************/

void Task3 (void *pdata)
{
INT16S x;
INT8U err;

char *msg;
pdata = pdata;

for (;;) {
OSSemPend(Sem, 0, &err); //请求信号量
x = random(100);
sprintf(msg,"%d",x);
PC_DispStr(70, 13, msg, DISP_FGND_YELLOW + DISP_BGND_BLUE);
}
}
展开
 我来答
_Tomoyo
2012-04-17 · TA获得超过148个赞
知道小有建树答主
回答量:250
采纳率:0%
帮助的人:181万
展开全部
就如你老是所说,乱!
像任务的优先级没给出来,Sem的初始值也没给出来,系统多少ticks每秒也没给
random等这些依赖于平台的函数注释也不给个,靠别人猜么,OSSemPend这种大家都懂的函数写个注释不是多余么,不知道OSTimeDlyHMSM(0, 0, 2, 200)延时2.2s干啥?

我的想法:
(1)写成2个任务,task1优先级高于task2,task1 OSQPend(MsgQueue, 0, &err)或者pend消息邮箱,然后打印数据
(2)task2生成随机数据,并周期性(比如20ms)检查按键输入,如果有那么打印数据;然后每隔250个周期往消息队列或者邮箱扔数据
追问
额。。你说那些都在前面我没写上来,优先级都有的,sem初值是0,系统200ticks每秒。。请问一下周期性检查按键输入的语句怎么写呀。。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式