初级会员
- 积分
- 191
- 金钱
- 191
- 注册时间
- 2016-3-13
- 在线时间
- 36 小时
|
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)
2)------------>当在task1中加入 os_wait(K_IVL,15,0); 波形不规整(黄色)如图
os_wait(K_IVL,15,0)
三,懂的朋友帮忙给点指点,另外我也搜索网络了,网络的资料很少,大部分内容都是重复的,
千万篇一律,如果我的问题表述不清楚,请在下面留言讨论,让我们大家一起进步,谢谢。
|
最佳答案
查看完整内容[请看2#楼]
其实os_wait();函数收到K_TMO或者K_IVL信号后并不会立即执行,而是等到其他任务轮询时间用尽后才开始执行,而当其他任务过重时os_wait信号被屏蔽了。--------------------------------------------------->看下图
|