OpenEdv-开源电子网

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

关于μcos的问题 有会的好心人进来下

[复制链接]

2

主题

11

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2014-10-9
在线时间
0 小时
发表于 2014-10-23 20:23:52 | 显示全部楼层 |阅读模式
5金钱
A任务创建了B和C 那么A的任务优先级是最低的 。 但是我把A任务改成高优先级 结果运行出来一样的效果。用到的实验是 原子大神的 任务调度实验。
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "includes.h"






#define START_TASK_PRIO       5 
#define START_STK_SIZE   64
OS_STK START_TASK_STK[START_STK_SIZE];

void start_task(void *pdata);
    


#define LED1_TASK_PRIO       7 

#define LED1_STK_SIZE       64
OS_STK LED1_TASK_STK[LED1_STK_SIZE];

void led1_task(void *pdata);




#define LED2_TASK_PRIO       6 

#define LED2_STK_SIZE   64

OS_STK LED2_TASK_STK[LED2_STK_SIZE];

void led2_task(void *pdata);


 int main(void)
 {
delay_init();     
NVIC_Configuration(); 
LED_Init();
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(); 
  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();
}


void led1_task(void *pdata)
{
while(1)
{
LED0=0;
delay_ms(80);
LED0=1;
delay_ms(920);
};
}


void led2_task(void *pdata)
{  
while(1)
{
LED1=0;
delay_ms(300);
LED1=1;
delay_ms(300);
};
}


最佳答案

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

卧槽   优先级又没说,以后不运行,你早吃一分钟,晚吃一分钟,最后还是吃了,有啥区别???!!!!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13138
金钱
13138
注册时间
2012-11-26
在线时间
3814 小时
发表于 2014-10-23 20:23:53 | 显示全部楼层
卧槽   优先级又没说,以后不运行,你早吃一分钟,晚吃一分钟,最后还是吃了,有啥区别???!!!!
学无止境
回复

使用道具 举报

2

主题

11

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2014-10-9
在线时间
0 小时
 楼主| 发表于 2014-10-23 20:24:04 | 显示全部楼层
求解答啊!!!
回复

使用道具 举报

2

主题

11

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2014-10-9
在线时间
0 小时
 楼主| 发表于 2014-10-23 20:27:21 | 显示全部楼层
快来人!!!
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
发表于 2014-10-23 20:36:39 | 显示全部楼层
来了。。。。
小小蜗牛
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
发表于 2014-10-23 20:36:56 | 显示全部楼层
你想牵我去干吗?
小小蜗牛
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
发表于 2014-10-23 20:40:13 | 显示全部楼层
起始任务,我也不明白他为什么弄最低。我的安富莱开发板是最高的优先级。
个人认为,起始任务优先级无所谓,创建了任务就没用了,不用抢占cpu,不用执行什么了。使命就是创建其他任务,使命完了,就歇了。
小小蜗牛
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
发表于 2014-10-23 20:53:15 | 显示全部楼层
其实我对μcos只懂一点点。就是想看看你想牵着蜗牛干嘛去
小小蜗牛
回复

使用道具 举报

2

主题

11

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2014-10-9
在线时间
0 小时
 楼主| 发表于 2014-10-23 20:56:37 | 显示全部楼层
哈哈哈 我就是想牵着你去散步
回复

使用道具 举报

2

主题

11

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2014-10-9
在线时间
0 小时
 楼主| 发表于 2014-10-23 21:02:11 | 显示全部楼层
我刚问了老师 已经明确了 谢谢 蜗牛
回复

使用道具 举报

2

主题

11

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2014-10-9
在线时间
0 小时
 楼主| 发表于 2014-10-23 22:26:06 | 显示全部楼层
回复【10楼】jermy_z:
---------------------------------
受教了
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
发表于 2014-10-24 08:06:30 | 显示全部楼层
回复【11楼】牵着蜗牛去散步丶:
---------------------------------
不用把头像换成这样吧,眼神那么吊想干嘛
小小蜗牛
回复

使用道具 举报

9

主题

1385

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
12086
金钱
12086
注册时间
2013-3-8
在线时间
1285 小时
发表于 2014-10-24 09:50:15 | 显示全部楼层
回复【2楼】牵着蜗牛去散步丶:
---------------------------------
OSTaskSuspend(START_TASK_PRIO);
这个语句就是挂起A任务。
那你优先极高低还有什么影响。最终都只有B,C任务运行。

OSTaskSuspend() :无条件挂起一个任务(任务优先级)
无条件挂起一个任务。调用此函数的任务也可以传递参数 OS_PRIO_SELF,挂起调用任务本身。当前任务挂起后,只有其他任务才能唤醒被挂起的任务。任务挂起后,系统会重新进行任务调度,运行下一个优先级最高的就绪任务。唤醒挂起任务需要调用函数OSTaskResume()。
任务的挂起是可以叠加到其他操作上的。例如,任务被挂起时正在进行延时操作,那么任务的唤醒就需要两个条件:延时的结束以及其他任务的唤醒操作。又如,任务被挂起时正在等待信号量,当任务从信号量的等待队列中清除后也不能立即运行,而必须等到被唤醒后。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-10-24 23:12:15 | 显示全部楼层
回复【12楼】jiutianshenjian:
---------------------------------
你们这是情侣装啊...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
发表于 2014-10-25 08:11:27 | 显示全部楼层
回复【14楼】正点原子:
---------------------------------
明显一个联盟一个部落。
小小蜗牛
回复

使用道具 举报

3

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2014-9-16
在线时间
0 小时
发表于 2014-10-25 14:36:42 | 显示全部楼层
按照原子的写法   无论起始任务的优先级高还是低   启动系统后都会运行起始任务(因为别的任务还没创建)   在起始任务里创建新的任务   然后挂起自己运行新任务    即使新任务比起始任务优先级高   但由于创建新任务是在临界区里进行的   中断关闭了  因此也不会切换到新任务  只有当起始任务挂起自己  打开中断后   才会运行新任务
回复

使用道具 举报

2

主题

11

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2014-10-9
在线时间
0 小时
 楼主| 发表于 2014-10-26 08:19:41 | 显示全部楼层
回复【13楼】augustedward:
---------------------------------
谢啦
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-29 21:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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