2018年3月15日

第二十一讲 任务的删除

摘要: 任务删除主要完成的事情: 1、从就绪列表,延时列表等里面删除。 2、任务释放占用的资源。 任务删除的方式有两种: 1、其他任务强制删除他。2、其他任务请求一个标志位,然后这个这个任务判断这个标志位是否有效,然后删除自己。 删除的时候通常会设置一个删除回调函数,具体的资源释放都工作会放在回调函数中。 阅读全文

posted @ 2018-03-15 11:34 nasduc 阅读(306) 评论(0) 推荐(0) 编辑

2018年3月14日

第二十讲 任务的挂起和恢复

摘要: 1、任务处于一系列的列表中,比如某个优先级的就绪列表等。任务挂起的时候,就是把任务的node从这些列表中删除。 2、任务可能会被多次挂起,所以需要定义一个挂起计数器。 3、处于delay状态中的函数不要挂起。 主要实现两个函数,挂起和唤醒。 阅读全文

posted @ 2018-03-14 22:19 nasduc 阅读(782) 评论(0) 推荐(0) 编辑

2018年3月7日

第十一讲、第十二讲 双任务时间片运行

摘要: 第十一讲 这是一个非常基本的例子,到了这个例子为止,MCU底层的设置都已经完成了。后续的开发,已经和芯片关系不大了,不会有新增的汇编代码了。 通过systick的中断,人为的切换任务。 第十二讲 这里引入了taskdelay,也就是任务1在delay的时候,可以让出时间给任务2运行。taskdela 阅读全文

posted @ 2018-03-07 16:56 nasduc 阅读(183) 评论(0) 推荐(0) 编辑

十九讲 同优先级时间片调度

摘要: 之前的设计中,每个优先级都只有1个任务,现在同一个优先级有一堆任务,任务用任务队列连接在一起。每次都取出队列中的第一个任务运行,然后把这个任务 移到这列表的末尾。 在实际的操作中,修改如下: 1、定义了一个时间片,以systick为基本单位,在任务初始化的时候对其赋值,然后把任务加到同优先级的队列中 阅读全文

posted @ 2018-03-07 13:55 nasduc 阅读(382) 评论(0) 推荐(0) 编辑

2018年3月6日

第十八讲 任务延时队列

摘要: 十七讲比较简单,就是介绍双向列表,就不介绍了。 问题引入:目前在systick的中断函数中,会扫描所有的32个任务,减去任务的延时。这样做有点浪费,因为进入延时的任务不多,所以设计一种方案,只扫描进入延时的任务,所以考虑设置一个延时任务队列。 延时任务队列有两种办法。方式一很容易理解,每个延时任务带 阅读全文

posted @ 2018-03-06 20:17 nasduc 阅读(270) 评论(0) 推荐(0) 编辑

2018年3月4日

第十六讲 任务优先级

摘要: 本讲就是利用上一讲的位图功能,用优先级对任务进行管理 阅读全文

posted @ 2018-03-04 16:37 nasduc 阅读(557) 评论(0) 推荐(0) 编辑

2018年3月3日

第十五讲 位图

摘要: 位图还是比较简单的,他要解决找第一个1的问题。 比如有一个32bit的数据,0xFF00000000,从低位开始,他的第一个1是在24位,那么返回值就是24,这个机制是用在任务优先级的某些机制上的。 这个怎么实现呢,循环移位其实是很容易实现的,但是太慢,因为这个机制会经常用到,所以要搞一个简单的方式 阅读全文

posted @ 2018-03-03 09:09 nasduc 阅读(240) 评论(0) 推荐(0) 编辑

第十四讲--调度锁

摘要: 从具体的例子中来看为啥引入调度锁机制。task1和task2,都对一个全局变量进行的了操作。 如果在task1中进行临界区保护的话,那么taskDelay也不会触发任务调度,task2就永远不会得到运行。 如果不进行临界区保护的话,task2对全局变量的操作就会被覆盖。其实这个例子不太好,task1 阅读全文

posted @ 2018-03-03 07:51 nasduc 阅读(294) 评论(0) 推荐(0) 编辑

2018年3月2日

第十三讲--临界区保护

摘要: 临界区保护,主要解决共享资源的问题。问题引入:比如一个普通的task中: 同样,在一个中断函数中,count=count+10,本意是希望中断和 task都能实现对count进行增加的操作。而现实有可能是这样的: 首先count的值为0,在 task中,看起来count++ 只是一个语句,但是其实有 阅读全文

posted @ 2018-03-02 14:42 nasduc 阅读(435) 评论(0) 推荐(0) 编辑

2018年3月1日

delay的几个函数说明

摘要: delay下面的主要函数是delay_init,delay_us和delay_ms。 非OS的时候,可以很简单 通过查询是systick计数器的寄存器状态,确认计数是否到了。 有OS的时候,要兼容OS和原本的delay_us函数。 和之间的非OS相比,reload在初始化被定义,并复制给LOAD。因 阅读全文

posted @ 2018-03-01 12:30 nasduc 阅读(8732) 评论(0) 推荐(0) 编辑

导航