0 多任务还是单任务 - 英飞凌MCU技术论坛 - 21ic电子技术开发论坛
打印

多任务还是单任务

[复制链接]
726|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
bboo|  楼主 | 2016-1-31 17:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
所谓"单任务系统"是指该系统不能支持多任务并发操作,宏观串行地执行一个任务。而多任务系统则可以宏观并行(微观上可能串行)地"同时"执行多个任务
沙发
bboo|  楼主 | 2016-1-31 17:04 | 只看该作者
多任务的并发执行通常依赖于一个多任务操作系统(OS),多任务OS的核心是系统调度器,它使用任务控制块(TCB )来管理任务调度功能。TCB 包括任务的当前状态、优先级、要等待的事件或资源、任务程序码的起始地址、初始堆栈指针等信息。调度器在任务被激活时,要用到这些信息。此外,TCB 还被用来存放任务的"上下文"(context )。任务的上下文就是当一个执行中的任务被停止时,所要保存的所有信息。通常,上下文就是计算机当前的状态,也即各个寄存器的内容。当发生任务切换时,当前运行的任务的上下文被存入TCB ,并将要被执行的任务的上下文从它的TCB 中取出,放入各个寄存器中。

使用特权

评论回复
板凳
engao| | 2016-1-31 17:04 | 只看该作者
嵌入式多任务OS的典型例子有Vxworks 、ucLinux等。嵌入式OS并非遥不可及的神坛之物,我们可以用不到 1000 行代码实现一个针对 80186 处理器的功能最简单的OS内核,作者正准备进行此项工作,希望能将心得贡献给大家。

使用特权

评论回复
地板
bboo|  楼主 | 2016-1-31 17:04 | 只看该作者
究竟选择多任务还是单任务方式,依赖于软件的体系是否庞大。例如,绝大多数 手机程序都是多任务的,但也有一些小灵通的协议栈是单任务的,没有操作系统,它们的主程序轮流调用各个软件模块的处理程序,模拟多任务环境。

使用特权

评论回复
5
engao| | 2016-1-31 17:05 | 只看该作者
单任务程序典型架构

  (1 )从CPU 复位时的指定地址开始执行;

  (2 )跳转至汇编代码startup 处执行;

  (3 )跳转至用户主程序main 执行,在main 中完成:

使用特权

评论回复
6
bboo|  楼主 | 2016-1-31 17:05 | 只看该作者
a. 初试化各硬件设备;  
b. 初始化各软件模块;
c. 进入死循环(无限循环),调用各模块的处理函数

使用特权

评论回复
7
engao| | 2016-1-31 17:06 | 只看该作者
  用户主程序和各模块的处理函数都以C 语言完成。用户主程序最后都进入了一个死循
环,其首选方案是:
while(1)
{
}

使用特权

评论回复
8
bboo|  楼主 | 2016-1-31 17:06 | 只看该作者
  有的程序员这样写:
for(;;)
{
}

使用特权

评论回复
9
engao| | 2016-1-31 17:06 | 只看该作者
这个语法没有确切表达代码的含义,我们从for(;;) 看不出什么,只有弄明白for(;;) 在C语言中意味着无条件循环才明白其意。

使用特权

评论回复
10
bboo|  楼主 | 2016-1-31 17:07 | 只看该作者
下面是几个"著名"的死循环:

  (1 )操作系统是死循环;

  (2 )WIN32 程序是死循环;

  (3 )嵌入式系统软件是死循环;

  (4 )多线程程序的线程处理函数是死循环。

使用特权

评论回复
11
bboo|  楼主 | 2016-1-31 17:07 | 只看该作者
你可能会辩驳,大声说: "凡事都不是绝对的,2 、3 、4 都可以不是死循环"。Ye s,you are right ,但是你得不到鲜花和掌声。实际上,这是一个没有太大意义的牛角尖,因为这个世界从来不需要一个处理完几个消息就喊着要OS杀死它的WIN32程序,不需要一个刚开始RUN就自行了断的嵌入式系统,不需要莫名其妙启动一个做一点事就干掉自己的线程。有时候,
过于严谨制造的不是便利而是麻烦。君不见,五层的TCP/IP协议栈超越严谨的ISO/OSI 七层协议栈大行其道成为事实上的标准?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

38

主题

364

帖子

1

粉丝