OpenEdv-开源电子网

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

关于实验53 UCOSII入门实验1-1-任务调度问题

[复制链接]

32

主题

190

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1183
金钱
1183
注册时间
2013-4-3
在线时间
221 小时
发表于 2015-6-16 00:35:30 | 显示全部楼层 |阅读模式
5金钱
int main(void)
 {
delay_init();     //???±??????  
NVIC_Configuration(); //?è??NVIC????·?×é2:2??????????????2???ì????????
LED_Init();   //????????LED??????????????
OSInit();   
  OSTaskCreate(start_task,(void *)0,(OS_STK *)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO );//???¨????????
OSStart();
 }

 
 
//????????
void start_task(void *pdata)
{
    OS_CPU_SR cpu_sr=0;
pdata = pdata; 
OSStatInit(); //??????????????.?????á???±1????×ó??
  OS_ENTER_CRITICAL(); //??????????(??·¨±??????ò??)    
  OSTaskCreate(led1_task,(void *)0,(OS_STK*)&LED1_TASK_STK[LED1_STK_SIZE-1],LED1_TASK_PRIO);   
  OSTaskCreate(led2_task,(void *)0,(OS_STK*)&LED2_TASK_STK[LED2_STK_SIZE-1],LED2_TASK_PRIO);   
OSTaskSuspend(START_TASK_PRIO); //????????????.
OS_EXIT_CRITICAL(); //??????????(????±??????ò??)
}

//LED1????
void led1_task(void *pdata)
{
while(1)
{
LED0=0;
delay_ms(300);
LED0=1;
delay_ms(300);
};
}

void led2_task(void *pdata)
{  
while(1)
{
LED1=0;
delay_ms(50);
LED1=1;
delay_ms(50);
};
}
//////////////////////
当start_task(void *pdata)任务刮起后并退出临界段后uCos就开始查询led1_task和led2_task两个任务中的哪个任务处于就绪状态吗? 还有这两个任务是怎样处于就绪状态的呢?还有就是只有在延时的时候cpu才会去查询哪些任务处于就绪状态并执行高优先级的就绪任务吗?比如led2_task()在开始延时50ms时就由运行状态变为等待状态,当50MS结束系统就自动把led2_task()任务变为就绪状态吗?

最佳答案

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

1、只要任务等待的事件发生了那么任务就会进入就绪态,比如任务延时结束,等到信号量或者消息队列等内核对象。 2、任务处于就绪态就是任务就绪表中任务对应的为置1,表示任务就绪。 3、不是只有在延时的时候才会执行高优先级任务的,只要调用了任务切换函数OSSched()就会发生任务切换,UCOS中调用OSSched()的其他API函数很多,其中延时函数就调用了,等待信号量和消息邮箱也调用了,也就说当你等待信号量或者消息邮箱的话(前提是超 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2015-6-16 00:35:31 | 显示全部楼层
1、只要任务等待的事件发生了那么任务就会进入就绪态,比如任务延时结束,等到信号量或者消息队列等内核对象。
2、任务处于就绪态就是任务就绪表中任务对应的为置1,表示任务就绪。
3、不是只有在延时的时候才会执行高优先级任务的,只要调用了任务切换函数OSSched()就会发生任务切换,UCOS中调用OSSched()的其他API函数很多,其中延时函数就调用了,等待信号量和消息邮箱也调用了,也就说当你等待信号量或者消息邮箱的话(前提是超时为0)也会引起任务调度的,还有其他很多的函数会引起任务调度,自己去看书吧。
4、延时完成后led0_task()就会被加入到就绪表中从而进入就绪态。
5、开发板教程里面限于篇幅原因,只是简单的介绍了以下UCOS,,如果想要深入的学习UCOS的话就买本关于UCOS的书看吧,推荐看任哲的那本书。
开往春天的手扶拖拉机
回复

使用道具 举报

32

主题

190

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1183
金钱
1183
注册时间
2013-4-3
在线时间
221 小时
 楼主| 发表于 2015-6-16 22:57:05 | 显示全部楼层
看了一下书,觉得都是白痴问题。还是非常感谢
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-1 14:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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