码农学freeRTOS

          这是我第一次写博客,为啥想起写这篇文章呢。起因是这样的,我大部分时间的单片机开发是用裸机来实现。在做项目的时候,写过android的驱动以及app,以及一些常用的电脑辅助工具。他们都具备操作系统,操作系统让程序变得简单,也比较容易使用的。前两天,突然有人问我会freeRTOS么。我说了解过,应该很简单。那么今天我就以一个编程老鸟的身份带领大家玩玩freeRTOS。

          1:为啥用操作系统,啥时候用。

          小伙伴们一看到这个论题的时候,可能心里都有这种答案。有人说你作为编程老鸟,你咋看待这个问题。下面我就给大家说说。如果系统任务较少,大部分时间是做数据处理。而且处理速度要求比较快,又经常接收发送数据,数据量较大,这种情况下,不推荐用操作系统。这种情况裸机处理较为灵活,因为单片机本身没啥多余的资源给系统调度,维护RTOS的运行。为了不丢数据,时间需要非常紧迫。常见的比如将can等信号通过uart转发给其他处理单元。Uart的带宽比can小很多,只是数据量是突发的,我们转发的时候把突发数据缓存慢慢的发送到其他单元。这个时候为了保证带宽,操作系统就显得多余。不用操作系统基本除了中断和收发数据的时候需要做保护数据机制外,没有额外开销,中断执行力较强,延时较低,采用RTOS必然会多出任务切换等更多的中断保护机制,中断延时较高,可能会导致数据的丢失。另外一种场景是这样的。比如一个通信器件要求你给它弄一个上电复位,先上电,然后300ms电源稳定后,拉下复位100ms,100ms后拉高复位脚,然后再通信。做这个过程可能发生在我们系统运行的任何时刻,我们为了不让这个时间耽搁我们完成其他任务,我们必须使用状态机机制来实现。在等待的时候,直接跳出该任务,去执行其他不等待的任务。状态机无疑让我们多写了代码。友好性变低,效率当然还是极高的。但如果有操作系统,我们调用xTaskDelay()函数的时候,他会去完成其他任务。就避免了像大学里学的for来延时的尴尬。写法又简单,又可以不耽误其他任务,这就是操作系统的好处。这一过程只是增加点ram和上下文切换时间消耗,对现在处理器来说这点资源不算啥了。

          2: 着手freeRTOS

         平常我用stm32裸机比较多,身边到处是stm32的产品,学习freeRTOS就不用买开发板了,随便找了一块板,上面有2颗灯,芯片是stm32f103c8的,不错,有灯,freeRTOS的简单任务演示就可以开始了。硬件平台有了,如何动工呢,先去找一个FreeRTOS下来。当然这里去stm32官网下载一个开发板软件包。在Utilities文件夹下有个Third_Party文件夹,里面放了第三方软件,有lwip网络协议,fat文件系统,还有我们需要的FreeRTOS_v6.1.0。进去后后看到4个c文件,然后老鸟花了4个小时看完了这点代码。

list.c主要是一些链表的操作,queue.c主要是一些邮箱操作。用来发送数据啥的,类似于裸机自己实现的fifo序列,不过他是分块的而已。task.c主要是任务调度的一些实现,croutine.c一看也是任务调度,和task差不多,不过一看就很简单,任务调度基本就是注册函数指针,调用函数指针来实现,和我们状态机差不多,所以这个调度方式不是我们需要的,这个文件还在代码里,主要是因为他消耗更低,代码保护措施更少,更像裸机,当然这个调度方式我们后面会屏蔽。

           3:移植freeRTOS

           注意我们这里用的是自己的平台,不是开发板,有以前的产品代码,而且老鸟的个人习惯是不用库函数,网上下载别人移植好的,基本都是库函数操作。这里我们自己实现移植。第一步我们把4个c文件拷贝到以前的工程文件夹里面。这4个c文件说明白了就是核心,同时把include里面的头文件也复制过来。复制过来之后,复制来的代码与我们本身的代码是没有交集。在读4个c的时候发现task的切换实际上用了portable里面的接口。我使用的keil4的编译器。所以就把MDK-ARM/ARM_CM3/下的两个文件拷贝进工程。这两个文件主要是和具体mcu相关的,这里文件是符合stm32的,为啥呢,因为老鸟在stm32官网下的嘛。

              4:编译freeRTOS

            在工程里加入拷贝来的额外代码(上面提到的操作系统文件)。加入后如下图,这里只是新加入部分,以前项目的文件没截图,和移植关系不大:

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值