第7章 任务管理 对于初学者,特别是对于没有RTOS基础的同学来说,了解RTX的任务管理非常重要,了解任务管理的目的就是让初学者从裸机的,单任务编程过渡到带OS的,多任务编程上来。搞清楚了这点,那么RTX学习就算入门了。 本章教程配套的例子含Cortex-M3内核的STM32F103和Cortex-M4内核的STM32F407。 7.1 单任务系统 7.2 多任务系统 7.3 任务设置 7.4 任务栈设置 7.5 系统栈设置 7.6 栈溢出检测 7.7 RTX初始化和启动 7.9 任务删除 7.10 空闲任务 7.11实验例程说明 7.12 总结 7.1 单任务系统 学习多任务系统之前,我们先来回顾下单任务系统的编程框架,即裸机时的编程框架。裸机编程主要是采用超级循环(super-loops)系统,又称前后台系统。应用程序是一个无限的循环,循环中调用相应的函数完成相应的操作,这部分可以看做后台行为,中断服务程序处理异步事件,这部分可以看做是前台行为。后台也可以叫做任务级,前台也叫作中断级。 图7.1 单任务系统 对于前后台系统的编程思路主要有以下两种方式: 7.1.1 查询方式 对于一些简单的应用,处理器可以查询数据或者消息是否就绪,就绪后进行处理,然后再等待,如此循环下去。对于简单的任务,这种方式简单易处理。但大多数情况下,需要处理多个接口数据或者消息,那就需要多次处理,如下面的流程图所示: 用查询方式处理简单的应用,效果比较好,但是随着工程的复杂,采用查询方式实现的工程就变的很难维护,同时,由于无法定义查询任务的优先级,这种查询方式会使得重要的接口消息得不到及时响应。比如程序一直在等待一个非紧急消息就绪,如果这个消息后面还有一个紧急的消息需要处理,那么就会使得紧急消息长时间得不到执行。 7.1.2 中断方式 对于查询方式无法有效执行紧急任务的情况,采用中断方式就有效的解决了这个问题,下面是中断方式简单的流程图: 采用中断和查询结合的方式可以解决大部分裸机应用,但随着工程的复杂,裸机方式的缺点就暴露出来了 1. 必须在中断(ISR)内处理时间关键运算: (1)ISR 函数变得非常复杂,并且需要很长执行时间。 (2)ISR 嵌套可能产生不可预测的执行时间和堆栈需求。 2. 超级循环和ISR之间的数据交换是通过全局共享变量进行的: (1)应用程序的程序员必须确保数据一致性。 3. 超级循环可以与系统计时器轻松同步,但: (1)如果系统需要多种不同的周期时间,则会很难实现。 (2) 超过超级循环周期的耗时函数需要做拆分。 (3)增加软件开销,应用程序难以理解。 4. 超级循环使得应用程序变得非常复杂,因此难以扩展: (1)一个简单的更改就可能产生不可预测的副作用,对这种副作用进行分析非常耗时。 (2)超级循环 概念的这些缺点可以通过使用实时操作系统 (RTOS) 来解决。 |
续7.11.2
7.11.1 STM32F103开发板实验
7.11.2 STM32F407开发板实验
7.4 任务栈设置
此教程是一个系列的吧,最好有个帖子罗列下不同的章节 现在不知道去哪里找第1 ,2 ,3, 4。。。等章