打印

如何实现多任务?

[复制链接]
720|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
peace555|  楼主 | 2015-8-26 09:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如何实现多任务?
沙发
zb0830| | 2015-8-26 09:06 | 只看该作者
只有一个 CPU, 如何在同一时间实现多个独立程序的运行? 要实现多任务, 条件是每个任务互相独立。 人如何才能独立,有自己的私有财产。 任务也一样, 如果一个任务有自己的 CPU, 堆栈, 程序代码,数据存储区, 那这个任务就是一个独立的任务。

使用特权

评论回复
板凳
zb0830| | 2015-8-26 09:06 | 只看该作者
首先是程序代码, 每个任务的程序代码与函数一样, 与 51 的裸奔程序一样, 每个任
务都是一个大循环。
void task ( )
{
        //initialize
         while(1)
          {
                //your code
           }
}

使用特权

评论回复
地板
没有六一了| | 2015-8-26 09:44 | 只看该作者
如果一个任务正在运行某个公共函数时(如 Printf), 被另一个高优先级的任务抢占,那么当这个高优先级的任务也调用同一个公共函数时, 极有可能破坏原任务的数据。因为两个任务可能共用一套数据。为了防止这种情况发生, 常采用两种措施:可重入设计和互斥调用。
可重入函数中所有的变量均为局部变量, 局部变量在调用时临时分配空间, 所以不同的任务在不同的时刻调用该函数时, 它们的同一个局部变量所分配的存储空间并不相同(任务私有栈中), 互不干扰。 另外, 如果可重入函数调用了其他函数, 则这些被调用的函数也必须是可重入函数。
互斥调用稍后说明。

使用特权

评论回复
5
没有六一了| | 2015-8-26 09:44 | 只看该作者
然后是数据存储区, 由于全局变量是系统共用的, 各个任务共享,不是任务私有,所以这里的数据存储区是指任务的私有变量, 如何变成私有? 局部变量也。 编译器是把局部变量保存在栈里的, 所以好办,只要任务有个私有的栈就行。

使用特权

评论回复
6
上山砍老虎| | 2015-8-26 10:42 | 只看该作者
有专门的调度器,进行调度可以实现多任务,或者裸奔的中断其实也是多任务

使用特权

评论回复
7
关小波522| | 2015-8-26 10:43 | 只看该作者
对,中断就是一种多任务

使用特权

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

本版积分规则

89

主题

620

帖子

2

粉丝