武汉嵌入式培训
达内武汉民大中心

15827352908

热门课程

嵌入式浅析协程

  • 时间:2018-01-31 15:48
  • 发布:达内
  • 来源:互联网

    不知道大家对协程熟悉不熟悉,在阿圆看来,协程的简单理解就是在嵌入式领域,在无 OS的情况下也可以获得线程的模拟,通过模拟出多个线程,来达到系统组件之前的解耦。
    通常在写单片机小程序时,我们一般都使用一个超级循环while(1),在其中添加自己的函数。比如要做一个读取温度并显示的小程序,就在超级循环中添加ReadTemperature(),LEDShowNumer()这样的函数,这么做一点儿也没有问题,有问题的是当需要再往这个超级循环中添加新的功能,如串口命令控制,按键等功能时,越来越多的功能会塞到这个超级循环当中,让代码越来越难看,后期的维护也会越来越棘手,可能过个一小段时间,自己也搞不清是怎么回事。协程作为多线程任务处理的先驱,可以让我们在一个循环中实现多线程,进而实现任务的解耦。
    在头条里,我不希望放过多的代码,毕竟头条的阅读是极其碎片化,我自己也是偶尔刷一刷,看到什么好玩的,再自己去查找资料(嗯,无聊刷一刷头条就能学到一些设计的想法,不吃亏)。
    要使用协程,首先当然要知道哪里去找协程库,百度一下?这次不用了,因为在FreeRTOS里面就有协程的实现。不过,FreeRTOS的协程实现有点复杂,并不利于我们理解其背后的思想,这样阿圆我就找来了嵌入式领域的大哥Adam Dunkels写的Protothreads.
    Protothreads的文件少得可怜,我们只需要5个头文件就可以实现协程,不得不佩服下Adam Dunkels.

    最后让我们来看下协程的好处

武汉软件测试培训

    1、不需要使用RTOS,就可以获得类似RTOS TASK的抽象。
    2、相对RTOS的TASK实现,资源占用少
    3、可以将异步代码转化为,至少看起来是同步代码实现,更符合思维的顺序
    4、代码模块间的解耦,让代码在语义上看起来更加清晰
    坏处就是
    1、协程内部不能使用阻塞的函数,
    2、代码不好写,需要使用蹩脚的宏来实现

    3、在协程里用户需要主动YIELD,让出运行时间片,增加了编码的复杂程度

更多武汉嵌入式培训相关资讯,请扫描下方二维码

武汉软件测试培训

上一篇:武汉嵌入式培训:老司机单片机学习之旅
下一篇:嵌入式安全利器——JTAG

武汉嵌入式培训:嵌入式Linux技术精讲

武汉嵌入式培训:嵌入式Linux学习漫谈

武汉嵌入式培训:FPGA的嵌入式系统

达内荣获“全国IT职业教育信息化教学联盟理事单位”殊荣

选择城市和中心
贵州省

广西省

海南省