什么是stm32多任务处理理?

【图文】04-多任务处理_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
04-多任务处理
大小:259.00KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢122被浏览16062分享邀请回答/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html413 条评论分享收藏感谢收起8添加评论分享收藏感谢收起查看更多回答什么叫多任务编程?德国CEO讲解,代码工艺-嵌入C ++:多任务
什么叫多任务编程?德国CEO讲解,代码工艺-嵌入C ++:多任务
科技的翅膀
更多内容,C/C++学习交流群 8群 我们今天习惯于多任务计算机系统。我们的桌面运行电子邮件,几个浏览器在不同的工作区,一个文字处理器和一些其他的应用程序,显然是一下子。使用系统监视器或任务管理器程序在幕后展示了许多其他支持我们活动的程序。当然,任何给定的CPU一次最多运行一个程序。多任务只是在活动过程之间切换的速度足以给出同时性的错觉。多方面的根源走回去。早期的时候,当电脑花费了大笔钱的时候,一个闲置的系统的想法就是一种愤怒。电子邮件IO与处理器相比较慢,并且处理器等待空闲,读卡器在下一张卡片中出现尴尬。时间的大师努力填补这个空闲时间的生产性工作。最终导致一次运行多个程序的系统,最终导致程序中更细粒度的多任务处理。现代多任务取决于操作系统底层API的支持。每个操作系统都使用自己的技术,难以编写可移植的代码。C ++ 2011标准通过向标准模板库(STL)添加并发例程来增加语言的可移植性。这些例程使用操作系统的API。例如,Linux版本使用POSIX线程库pthread。结果是在以后的标准中建立的最小但有用的能力。C ++ 2017标准开发活动包括并行和并发工作。在本文中,我将通过C ++编写线程代码来处理一些设施和陷阱。更多资料和视频讲解,C/C++学习交流群 8群 创建线程要在单个程序中实现多任务,代码将分解为同时运行的多个任务或线程。声明和运行一个线程很简单。硬件部分在管理它们并处理线程之间的相互作用时会稍后进行。线程是从任何东西创建的callable。这意味着一个函数或类,通常是一种operator()方法。下面是一个示例,其中创建了三个不同的可调用对象作为线程和一些管理技术。这些功能或类没有什么特别之处。它们可以在程序中用作函数或类实例。当传递给类的构造thread函数和函数或operator()方法所需的任何参数时,它们将成为独立的线程。thread的类是一个可变参数模板类与typenames的可变长数。此功能允许类构造函数将参数转发到函数或类方法。现在线程正在运行,你如何阻止它?不幸的是没有提供方法thread。但是很容易创造出一种方式。我使用的一种技术是作为引用传递的简单的全局布尔标志:线程检查run变为false并退出。我们稍后会看到为什么std::atomic_bool被使用。参数可以通过值或指针传递,就像调用常规函数一样。经过参考需要使用的std::ref,与表现出run.使用线程创建线程后,main()执行其余部分。当main()退出情况变得有趣的时候。运行的线程会发生什么?他们可能分配的资源,如打开的文件或串行端口会发生什么?还要考虑你可以在任何函数中启动一个线程,而不仅仅是main(),如果fa()创建另一个线程然后退出呢?那个新线程会发生什么?本标准规定的处理这种情况有两种方法:thread::join()和thread::detach()。当函数调用时,join()它保持直到线程完成。在示例中,这是在main()退出之前完成的。分离的线程独立于程序的其余部分运行。一般来说,detach()线程创建后应尽快进行调用。当创建函数退出时,线程继续运行,甚至超出结束main()。如果使用某些技术(run如上所示)不会停止分离的线程,则会抛出异常。这将使程序资源处于不确定状态。一个既不连接也不分离的线程是一个 可连接的线程。这可以通过测试thread::joinable()。尝试加入脱机线程会引发异常。如果线程的状态不确定,应通过调用来检查joinable()。如果一个线程抛出一个未捕获的异常会怎么样?std::terminate()调用标准指定,调用std::abort结束程序。您可以通过捕获异常或指定一个来避免这种情况std::terminate_handler。这些细节可以在C ++参考站点或书中找到。如果合适,需要加入一个线程,需要类似于资源管理(例如文件或内存)的努力。通过同样的方法来解决,这是基于类的存在的一个原因:资源分配初始化(RAII)。类构造函数执行初始化,包括资源获取,而析构函数释放资源。处理线程的一个简单的类(参见末尾的注释)是:该类thread_guard是一个派生类thread。该using thread::thread告诉编译器使用所有的线程的方法,无需创建一个构造函数thread_guard,因为我们只需要提供一个析构函数。析构函数测试线程是否可以连接,即它是否被分离,并且如果允许,则连接。这提供了两个功能。创建线程的函数不再需要显式加入线程,尽管它可以在函数退出之前安全地使用。如果有事情中断了创建功能,就像异常一样,析构函数将会执行连接。在示例代码中this_thread,通过调用来演示命名空间this_thread::sleep_for()。这个命名空间提供了三个用于控制线程时序的例程。如图所示,您可以睡一段时间,睡到一段特定的时间,或者简单地屈服。命名空间中的第四个例程获取线程的标识号。它的外观main()指出,它也是一个线程。该chrono头部是非常值得研究,因为它提供了方便的工具来钟,在特定时间点,和持续时间的形式与时间值的工作。赛车线程让我们回到头文件中atomic_bool定义的atomic原型版本和许多标准类型。需要原子变量来防止变量的竞争条件。有时候需要数百个处理器周期来读取或写入变量,甚至是布尔值或字符小的处理器周期。在此期间,可能会发生中断或为当前任务交换新任务。如果这个新执行的代码读取或写入相同的变量,变量的状态将被破坏。例如,32位整数包含四个字节。第一个任务读取两个字节,中断,新例程写入所有四个字节,当第一个任务重新启动时,它读取最后两个字节。它读取的原始前两个字节现在无效。原子操作可以防止这种情况发生。尝试访问资源时会发生其他竞争条件。如果示例中的任务发送输出到cerr这样的比赛会发生。一个任务可以开始输出文本,被任务交换中断,新任务也开始写入,cerr使其输出混合。用于处理这种情况的长期技术是互斥的,缩写为 互斥。当任务想要访问资源时,互斥锁被锁定,并且在完成任务时被解锁。这是一个快速和廉价的操作。如果另一个任务请求互斥体,任务将保持,直到互斥体释放。使用多个互斥可能会导致死锁情况。任务A按顺序请求互斥体X和Y。任务B请求Y,然后X,每个可以获得他们的第一个互斥体,但也不能获得第二个。该标准提供lock(X, Y, …)等待直到参数列表中的所有锁可用的功能。该mutex头提供了更多的类和函数来处理竞争条件因此使用线程时,值得认真研究偷看窗帘后面它在多任务处理方面有助于了解窗帘后面发生的一些事情。在Windows或Linux上,我们正在使用 抢占式 多任务,与合作 多任务相反 。在前者中,系统由定时器中断驱动,使用调度算法在系统中运行的任务之间进行切换。合作多任务系统依赖于自愿放弃控制的任务,因此可以安排其他任务最简单的抢占式调度器是时间分片,每个任务允许运行一段特定的时间。如果任务产生IO,等待互斥体或自愿,则允许下一个任务继续进行。更复杂的算法,即使使用协作多任务,也可以执行优先级调度,高优先级任务获得更多时间。在实时系统中,标记为实时的任务可能需要尽可能多的时间。通过优先多任务处理,开发人员必须确保所有任务都有足够的时间。当高优先级任务消耗所有处理时,它们可能不会是一个原因,因此使优先级较低的任务不足。 当低优先级任务抓住互斥锁,防止更高优先级的任务运行时,可能会发生称为优先级倒置的问题。多任务成本多任务消耗时间和内存资源。当发生任务交换时,任务所使用的处理器寄存器被推到堆栈上。下一个任务的寄存器从该任务的堆栈弹出,以启动它的运行。这显然需要时间和内存,因为每个任务必须分配一个堆栈。设置堆栈大小几乎是一门艺术。必须为最坏情况下的函数调用和本地,基于栈的变量分配足够的空间。另外,当处理外部事件发生中断时,说串行端口接收一个字符,中断需要堆栈空间。Arduino生态系统通常不支持这些多任务形式,因为处理器没有多个任务所需的堆栈的内存。有可用于Arduinos的调度器技术是合作的,但不保存任务的状态,将该负担推送到任务本身。C ++并发库不可用,因为没有底层系统提供多任务API。Arduino社区已经开发了大量的调度程序库来在这些系统上使用。包起来多任务是保持处理器繁忙的有用技术。必须记住,它不是灵丹妙药,并且一如既往地应该进行测试,以确保多任务处理的开销不会超过它提供的成本。另一个考虑因素是对代码组织的影响。将程序划分为逻辑部分作为单独的任务可以使创建,测试和调试代码更容易。个别开发人员可以在代码的不同部分更轻松,更独立地工作。即使是像我一样的个人,也可以轻松地集中在特定任务的代码上,而忽略其他进程。我只涉及创建多任务系统的复杂要求。还有许多其他C ++功能可用于处理任务,包括安全协调其活动并在其间传输数据。一旦您开始使用更大的代码库进行黑客攻击,将代码分解成多个任务可能对您的系统和理性有益。更多内容,C/C++学习交流群 8群
本文仅代表作者观点,不代表百度立场。系作者授权百家号发表,未经许可不得转载。
科技的翅膀
百家号 最近更新:
简介: 关注互联网运营小窍门
作者最新文章}

我要回帖

更多关于 多任务处理能力的例子 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信