OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2759|回复: 1

UCOSIII编程

[复制链接]

9

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2015-9-27
在线时间
23 小时
发表于 2016-8-16 20:47:23 | 显示全部楼层 |阅读模式
1金钱
UCOSIII+STemWin移植做的界面如下,我建立了一个任务main_task来判断选择了哪一个应用程序,现在有两种想法
1,main_task一直在执行,不停的判断最近一次按下ENTER时对应的应用,执行不同的动作
void main_task(void *p_arg)
{
    ......
    while (1)
    {
        switch (flag)
       {
            case 1:
                //要做的事
            ........
       }
    }
}

2,ENTER按下时给main_task发信号量,main_task根据应用标志来给对应的任务发送信号量/消息,或者挂起/恢复对应的任务
void main_task(void *p_arg)
{
    ......
    while (1)
    {
       OSTaskSemPend(....);
        switch (flag)
       {
            case 1:
                OSTaskSemPost(&TASK1_TCB, ......);
                break;
            case 2:
                 OSTaskSemPost(&TASK2_TCB, ......);
                break;
            ........
       }
    }
}

第一个只要建立一个main_task任务就好,具体每个应用要干什么用一个函数来封装放在switch里边,第二个要建立很多的任务,基本上有几个应用就要建立几个任务,请教这两个哪个更好一些?

QQ图片20160816203045.jpg
生死看淡,低头猛干
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

19

主题

430

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1341
金钱
1341
注册时间
2016-4-22
在线时间
187 小时
发表于 2016-8-17 08:54:25 | 显示全部楼层
第一种方案不好。第二种switch (flag)开始可以照办第一种的。至于具体怎么弄要看你在执行操作具体时间多长,如果是长是否能被打断。。。。等因素考虑。
伤情最是晚凉天,憔悴斯人不堪怜。
邀酒摧肠三杯醉,寻香惊梦五更寒。
钗头凤斜卿有泪,荼蘼花了我无缘。
小楼寂寞新雨月,也难如钩也难圆。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-1 20:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表