微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI WIFI设计交流 > CC3200的多任务。

CC3200的多任务。

时间:10-02 整理:3721RD 点击:

看过SYS/BIOS (TI-RTOS Kernel) v6.45 User's Guide后,对task和Semapore有了一定的了解。现在有个疑问

假如CC3200有两个task:task1、task2,以下这两个task的优先级相同,

情况一:task1先于task2创建,那么运行时应该是task1先运行完了,再运行task2,还是task1先运行一段时间然后task2再运行一段时间,交替运行。

情况二:task1先于task2创建,先运行的task1被Semapore_pend所阻塞(这里Semapore被初始化为0了),接下来task2运行,期间它向task1进行了Semapore_post操作,此时task2是继续先运行完了,再运行task1?还是先运行taks1再运行taks2?(如果taks1的优先级高,肯定毫无疑问是先运行taks1,但优先级相同,task1先于task2创建这种情况,我就不知道了)

按照手册,相同优先级是FIFO的模式,即先到先得。所以,情况一,task1不pend,将一直运行。情况二则是task2继续运行,直到task2 pend。

这个做几个实验应该是可以看出这个规则的。

我建了两个任务,一个就是sdk的demo中的wlan_ap,优先级为15,另外还建了一个任务,优先级只有1,按理说应该把demo中的wlan_ap运行完了,再运行另外一个任务,可是怎么wlan_ap任务每次走到ConfigureSimpleLinkToDefaultState函数的里面时,都会去执行另外一个任务呢(因为我在另外一个任务的开头是打印信息,所以一下就能看出进了任务2中),而且就执行了很短的两句话,马上就回到任务1的wlan_ap中,然后就在这里正常执行了,有点儿搞不明白究竟在ConfigureSimpleLinkToDefaultState里发生了什么导致它往低优先级的任务中走?并且很短时间后就又回来了(我也没有使用Semaphores这类的东西啊,搞不懂)。

那个函数里面有调用osi_Sleep(),不就放弃运行了吗?

好像还真是这样,刚才查了一下,里面调用了一个函数sl_WlanPolicySet,有这么个参数SL_POLICY_PM, defines a power management policy for Station mode only:看来确实隐含了osi_Sleep(),非常感谢,谢谢。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top