请选择 进入手机版 | 继续访问电脑版
查看: 484|回复: 1

关于任务的while(1)块中的时间延迟的问题

[复制链接]

21

主题

32

帖子

100

积分

勇闯江湖

Rank: 2

积分
100
发表于 2018-6-8 15:32:49 | 显示全部楼层 |阅读模式
我测试了任务的while(1)块中的时间延迟函数。但是我发现了一些难以理解的奇怪结果。测试如下所示:

环境:WICED6.1 + CYW94307 + ThreadX

我创建了两个任务,即任务1和任务2,具有相同或不同的优先级。每项任务的代码如下:

void thread1_main(uint32_t arg)
{
    uint32_t temp = arg;
    而(1)
    {
        printf(“This thread 111111 \ r \ n”);
        wiced_rtos_delay_milliseconds(1);
    }
    WICED_END_OF_CURRENT_THREAD();
}

结果粘贴在这里:

优先级设置
延迟时间(以毫秒为单位)
结果
task1:7,task2:7
1或更长
两项任务都可以正常运行
task1:7,task2:8
1
只有task1可以正常运行
task1:7,task2:8
2或更长
两项任务都可以正常运行

所以,我的第一个问题是:
1,当优先级设置不同时,为什么只有当延迟时间为1ms时task1正常运行,但延迟时间较长时两个任务都运行?

另一个问题是:
2,当我用wiced_rtos_delay_microseconds(1000)或wiced_rtos_delay_microseconds(1000000)替换wiced_rtos_delay_milliseconds(1)时,只会运行具有较高优先级的任务。为什么wiced_rtos_delay_microseconds()函数不会导致任务调度?

回复

使用道具 举报

13

主题

22

帖子

60

积分

勇闯江湖

Rank: 2

积分
60
发表于 2018-6-8 15:33:31 | 显示全部楼层
Q1,当优先级设置不同时,为什么只有当延迟时间为1ms时task1正常运行,但是当延迟时间较长时两个任务都运行?

答:看起来原因是:代码执行时间:printf(“This thread 111111 \ r \ n”); 另外线程切换时间大于1ms且小于2ms。所以情况:task1:7,task2:8,delay(1ms)的开关逻辑是:切换到Task1-> Printf(“This thread 1111111 \ r \ n”) - >挂起Task1-1ms->切换到任务2-> Printf(“ This thread 22222 \ r \ n ”); 但是这不会完全执行(就像只打印“T”),因为任务1在1ms->切换到任务1-> Printf(“此线程1111111 \ r \ n”)后被触发。尝试使用此printf(“1 \ n \ r”); 或更大的延迟时间。



Q2。当我用wiced_rtos_delay_microseconds(1000)或wiced_rtos_delay_microseconds(1000000)替换wiced_rtos_delay_milliseconds(1)时,只会运行具有较高优先级的任务。为什么wiced_rtos_delay_microseconds()函数不会导致任务调度?

答:wiced_rtos_delay_miliseconds包含可以设置任务挂起的tx_thread_sleep,但wiced_rtos_delay_microseconds不包含tx_thread_sleep。说:wiced_rtos_delay_microseconds只包含延迟功能,不包括RTOS挂起功能
回复

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /1 下一条

快速回复 返回顶部 返回列表
  • 站内导航
  • 用户指南
  • 王国概况
  • 科技资讯
  • 小程序
  • 公众号
客服电话 :   400-830-1818 公司地址 :   深圳市南山区英唐大厦六楼
粤Copyright2018-2020 / 闯客网 版权所有 粤ICP备17106242号-1