OpenEdv-开源电子网

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

多任务时各任务是如何都能得到执行的

[复制链接]

3

主题

5

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2018-6-13
在线时间
2 小时
发表于 2018-6-13 17:06:48 | 显示全部楼层 |阅读模式
3金钱
我的程序在两个任务中都设置了led亮
为啥都没有反应

具体源代码看我附件

//LED0任务
void led0_task(void *pdata)
{                
        while(1)
        {
                receive_485();
                LED0=0;
                delay_ms(500);
        };
}

//LED1任务
void led1_task(void *pdata)
{          
        while(1)
        {
                sim900a_test();
                if(mode_system==1)
                        send_485();
                LED1=0;
                delay_ms(300);
        };
}


还有就是 是什么机制保证 我创建的每个任务都能够得到执行

扩展实验4 ATK-SIM900A GSM模块测试实验.rar

9.95 MB, 下载次数: 23

最佳答案

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

延时函数用错了,实现调度器轮询,需要使用操作系统的延时函数,使用常规的DELAY函数,就进入阻塞态了。 另外主程序里开启任务调度器
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

29

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
249
金钱
249
注册时间
2018-5-12
在线时间
56 小时
发表于 2018-6-13 17:06:49 | 显示全部楼层
延时函数用错了,实现调度器轮询,需要使用操作系统的延时函数,使用常规的DELAY函数,就进入阻塞态了。
另外主程序里开启任务调度器
回复

使用道具 举报

3

主题

5

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2018-6-13
在线时间
2 小时
 楼主| 发表于 2018-6-13 17:07:35 | 显示全部楼层
如果有大神能帮我修改好代码 请发我邮箱915368256@qq.com
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2018-6-13 23:00:20 | 显示全部楼层
不同优先级抢占,相同优先级时间片轮换(用不完可以主动交出cpu使用权)
回复

使用道具 举报

31

主题

265

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
413
金钱
413
注册时间
2018-1-9
在线时间
65 小时
发表于 2018-6-14 08:30:31 | 显示全部楼层
你这个程序灯根本不会闪啊??
回复

使用道具 举报

31

主题

265

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
413
金钱
413
注册时间
2018-1-9
在线时间
65 小时
发表于 2018-6-14 08:31:34 | 显示全部楼层
jinfeihan57 发表于 2018-6-14 08:30
你这个程序灯根本不会闪啊??

任务切换的条件是,发起了任务调度。具体发起任务调度的条件有很多。你搜一下就都出来。
回复

使用道具 举报

10

主题

67

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
430
金钱
430
注册时间
2017-5-16
在线时间
64 小时
发表于 2018-6-14 08:48:22 | 显示全部楼层
admvip 发表于 2018-6-14 08:23
延时函数用错了,实现调度器轮询,需要使用操作系统的延时函数,使用常规的DELAY函数,就进入阻塞态了。
...

4楼正解
回复

使用道具 举报

4

主题

346

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3657
金钱
3657
注册时间
2016-2-21
在线时间
542 小时
发表于 2018-6-14 09:10:57 | 显示全部楼层
所谓的任务调度就是进到中断里,整个栈的信息,以及当前寄存器的信息,任务PC指针,全部压进任务堆栈里,然后,从另一个任务堆栈里把他的堆栈恢复到当初的状态,并且重新设置PC指针,完事,返回。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-26 11:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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