您的位置:首页 > 其它

RTOS实时操作系统uCOS-III向STM32F103移植过程

2018-02-02 16:08 435 查看
本人是一名大三学生,在前一段时间曾陷入了对未来的焦虑和恐慌,比如经常会想未来该走哪一个方向,真的就靠打工安安稳稳的过了这最有激情的青春吗?也顺便利用此段低沉平静的心情好好思考了一下人生,最终确定下来我要不止步于单片机,而是要向嵌入式、操作系统进攻。操作系统大体上分为两大类:一个是实时操作系统,另一个则是非实时操作系统(具体的区别简单的说就是前者是对实时性有硬性要求的,但性能却远低于后者,后者能处理的事情和任务都可以比前者复杂的多,例如航天器的推力系统,用的肯定是RTOS啦,而手机或电脑肯定使用的是非实时操作系统啦,各有各的优势吧)。我首当其冲的就想到了实时操作系统,因为大名鼎鼎的”好奇号火星车“所搭载的就是一款基于“VxWorks”的实时操作系统,而且实时操作系统也相对好上手一些,对未来了解Linux能有一些帮助吧。

好了闲话不说多,让我们来开启RTOS实时操作系统uCOS的大门吧!

要进入uCOS的第一道大关,当然就是向自己熟悉的开发板移植啦,只有移植了并且运行起来我们才可以通过现象看效果,有利于我们的学习和深入。于是我向我玩了两年的STM32,也是比较经典的一块芯片开始做移植工作。

首先我们先去Micrium 公司官方网站(http://micrium.com/),点击“Downloads”选项卡进入下载页面(国外网站,耐心点等待网页出来),具体步骤截屏看下图操作。



由于STM32系列芯片是属于ST公司,所以在”Brouse by MCU Manufacturer“栏目展开”STMicroelectronics“,这里根据自己的芯片选型,如果在这里没有找到你的芯片型号,例如RCT6,C8T6等,就单击“View all STMicroelectronics”,在里面做出选型。



但是进入之后我们发现,这里并没有STM32F103所有系列,再看多一眼,是F103的编译器还都没有MDK的!!!所以我们干脆把选择STM32F107系列的吧,这里提供了两个选择,如果你的编译器是MDK5的话,就选下面那一个吧,否则就选上面的那个。



OK!下载好以后我们打开这个”神秘“的文件夹,可以看到这里只有四个子文件夹(看起来好像很干净的样子,实际上第一次自己移会感叹“我 X,这是什么,xxx文件又在哪里!”但是后面会觉得,还真的是很干净,什么文件都有标志很好找到)



接下来移植我们有两条路可以走,第一个是完全自己建立搭建新的工程(Project),第二就是在已有的模板工程下来进行uCOS-III的移植。为了方便我选择了第二条路,并且选择一个串口示例模板工程文件来进行移植。



然后直接简单粗暴的将官方下载下来的源码中有uC开头的文件夹都直接Copy到目标文件夹里和创建“APP”“BSP”两个文件夹,再将“keilkill.bat” Windows批处理文件“README.TXT”文件删除,(这里的”keilkill.bat”文件其实是我们写的一个脚本,点击之后可以删除工程编译过程产生的一些中间文件,让工程变得干净)。



完成之后就像现在上图那样,接下来进入到“uC-CPU”“uC-LIB”“uCOS-III”“Ports”“ARM-Cortex-M3”子文件夹内,看到下图“GNU”,”IAR”“RealView”三个文件夹,将“GNU”“IAR”两个文件夹删掉(因为我们用的Keil MDK-5仅使用到RealView编译器,所以这两个无编译器的文件可以删掉)。如下图所示:



然后我们在官方下载下来的文件夹里按照下图的路径进入此文件夹下,并且将红色框框内的uCOS-III源码Copy到我们的目标文件夹里的“APP”文件夹下





跟上图同样的步骤,在官方下载下来的文件夹里按照下图的路径进入此文件夹下,并且将红色框框内的uCOS-III的”bsp”源码Copy到我们的目标文件夹里的“BSP”文件夹下



然后再进入“OS”文件夹里的“uCOS-III”文件夹里,将“bsp_os.c”“bsp_os.h”两个文件Copy到我们目标文件夹里的“BSP”文件夹下,如下图所示:



到这一步为止源码文件应该是差不多都Copy到我们的目标文件夹下了,接下来我们用MDK-5打开工程,打开工程后我们“Manage Project items”里创建几个组,分别是“APP”,”BSP”,”uC-CPU”,”uC-LIB”,”uCOS-III”,再对它们添加上对应的Files文件。





如上图在刚刚创建的APP目录下将所有文件全部添加进来(其实“.h”文件不需要添加进来,但是为了后期方便找到这里将其暂时先添加进来,也不影响工程)。下面就依此步骤,对“BSP”,”uC-CPU”,”uC-LIB”,”uCOS-III”这四个组分别添加其各文件夹下的所有文件。如下图所示:

对”BSP”组:



对”uC-CPU”组:



对”uC-LIB”组:



对”uCOS-III”组:



将以上的组和其对应的Files文件都添加完之后我们继续在“Options for Target”下的C/C++添加它们的头文件,如下图所示:



添加完头文件之后我们将在工程里将USER下的main.c文件删除(因为刚刚添加了一个app.c),如下图所示:



接下来直接打开APP目录下的app.c,点击”Rebuild”编译全部工程,编译之后发现全是” cannot open source input file “stm32f10x_lib.h”: No such file or directory”这样的错误。



那么这是什么原因什么问题导致的呢?原来“stm32f10x_lib.h”这个头文件是2.0的ST库函数头文件,属于老版本了,在V3.5版本之后统一使用”stm32f10x.h”这一个头文件,这里我们使用的是Keil-MDK5版本,所以当然找不到”stm32f10x_lib.h”这一个头文件啦,所以我们要做的就是将”stm32f10x_lib.h”全部替换成”stm32f10x.h”这个文件。

如下图所示,在“bsp.h”“includes.h”两个文件下分别修改这个错误:



再重新编译一次!



编译完之后我们发现了更多的新的”Errors”,一定位才发现原来全部都是在bsp.c下的函数未定义的问题。由于bsp.c里一般都是放我们自己要实现的功能和要求写的驱动程序,所以我们这里将bsp.c内的BSP_Init()函数里的全部内容删掉,改为我们的LED和串口初始化函数,如下图所示:



再次重新编译!



终于……“0 Errors”了,1个Warning是因为函数声明了,但没有引用过,不算什么问题。至此移植算是成功了一半了,接下来还得根据自己的板子来调试代码是否能够正常工作。这里我的开发板选用的是“原子哥”的Stm32f103RCT6 V3.3版本的mini开发板来做移植实验。

总结一下个人经验:其实会移植了之后会发现uCOS-III的移植真的是非常非常的简单,我们在移植过程中,首先先得把移植工
8ed2
作和遇到的错误尝试自己解决,而不是看网上看别人的一步一步照搬然后成功了就以为自己会了而不再继续自己尝试了,这样对自己的学习是没有任何帮助的。以上也是我尝试过无数次移植失败才有的成果,每遇到一个Error看不懂的我都会去百度一下,只有这样遇到无数个坑我们才能站的更稳,才能对移植更加手到擒来。

具体操作和步骤待下节我们继续!期待我们下一节移植到开发板还会出现什么奇葩的问题吧~哈哈哈,第一次写博客,写的不好勿喷,也欢迎各路大哥哥大姐姐(大神)如果看到有什么错误可以指出来哈!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息