OpenEdv-开源电子网

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

懂RTX51 Tiny的进来看看

[复制链接]

6

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
191
金钱
191
注册时间
2016-3-13
在线时间
36 小时
发表于 2017-4-6 15:29:08 | 显示全部楼层 |阅读模式
10金钱
一,代码如下--------------------------------------------------------------/*********************************************************************/
其中配置定时中断间隔=5ms,TIMESHARING =   5


void setsys_task(void)_task_ 0
{
        SetBit(P5M,0,1);
        SetBit(P5M,1,1);
        SetBit(P4M,6,1);
        LED1        =        0;
        LED2        =        0;
        LED3        =        0;
        os_create_task(1);
        os_create_task(2);
        os_create_task(3);
        os_delete_task(0);
}

void blinkled1_task(void)_task_ 1
{
         while(1)
         {
                 LED1        =        ~LED1;
                os_wait(K_TMO,15,0);        
         //     os_wait(K_IVL,15,0);
            
         }
}

void blinkled2_tsak(void)_task_ 2
{
        while(1)                 
         {
                LED2        =                ~LED2;
         }
}

void blinkled3_tsak(void)_task_ 3
{
         while(1)                 
         {
                LED3        =                ~LED3;              
         }
        
}

--------------------------------------------------------------/*********************************************************************/

二,用示波器观察LED1波形变化
1)------------>当在task1中加入 os_wait(K_TMO,15,0); 波形规整(黄色)如图
LED1每隔100ms闪烁一次,而我认为应该间隔15*5ms+25ms+25ms闪动一次。

os_wait(K_TMO,15,0)

os_wait(K_TMO,15,0)



2)------------>当在task1中加入 os_wait(K_IVL,15,0); 波形不规整(黄色)如图

os_wait(K_IVL,15,0)

os_wait(K_IVL,15,0)


三,懂的朋友帮忙给点指点,另外我也搜索网络了,网络的资料很少,大部分内容都是重复的,
千万篇一律,如果我的问题表述不清楚,请在下面留言讨论,让我们大家一起进步,谢谢。


最佳答案

查看完整内容[请看2#楼]

其实os_wait();函数收到K_TMO或者K_IVL信号后并不会立即执行,而是等到其他任务轮询时间用尽后才开始执行,而当其他任务过重时os_wait信号被屏蔽了。--------------------------------------------------->看下图
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
191
金钱
191
注册时间
2016-3-13
在线时间
36 小时
 楼主| 发表于 2017-4-6 15:29:09 | 显示全部楼层
本帖最后由 givemefive 于 2017-4-7 09:41 编辑

其实os_wait();函数收到K_TMO或者K_IVL信号后并不会立即执行,而是等到其他任务轮询时间用尽后才开始执行,而当其他任务过重时os_wait信号被屏蔽了。--------------------------------------------------->看下图<------------------------------------------




tasklist

tasklist


/******************************************************************/

每个任务的Timer=0时就处于timeout状态,也就是处于ready状态等待运行,当其他任务重时需要频繁运行而且又采用轮询的方式运行时就会出现这样的情况。
-----假如运行task2时,task1已经处于ready状态,但是task2运行完后还要运行task3,这就导致task1还需要等待task3的时间片耗完才能运行,因此就会出现周期不规整的情况。


回复

使用道具 举报

6

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
191
金钱
191
注册时间
2016-3-13
在线时间
36 小时
 楼主| 发表于 2017-4-6 17:26:26 | 显示全部楼层
无人敢答?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 22:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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