搜索
bottom↓
回复: 3

【跟我学OSKinetis】第2课-固件库构成详解《转》

[复制链接]

出0入0汤圆

发表于 2014-5-8 14:40:33 | 显示全部楼层 |阅读模式


上节我们已经正确部署并运行了第1个例程,而且也学会了如何快速新建一个工程。相信在部署固件库的同时,有些同学就开始研究OSKinetis固件库的目录结构了,用过V2版固件库的同学可能会发现,最新的V3版固件库和旧版本有了较大的区别,那么本节我们就来具体讲讲V3版固件库的构成到底是怎么样的。
目录结构

当你按照第1课中的方法部署好固件库和例程包后,你会得到一个名为” LPLD_OSKinetis_V3”的根目录,我们的所有驱动文件以及用户的工程都包含在这个文件夹里,无论你将它移动到何处,都可以直接用开发工具打开其中的工程进行编译,不会出任何错误。

以这个文件夹为根目录,其下的目录结构如图1所示:

OSKinetis-2-1

“lib”和“project”两个文件夹把所有代码和文件分成了两大阵营,前者是OSKinetis的固件库阵营,后者是OSKinetis的用户工程阵营。两个阵营虽然同在根目录下,但是并不是同级关系,用户工程阵营能否正确编译全仰仗于前者固件库阵营!因为固件库包含了所有底层文件,相当于地基。而用户工程相当于地基上的房子,它所实现的各种功能,都是由固件库里的函数打包封装好的。这就是为什么有部分用户只下载了例程包(用户工程阵营),确不能正确编译工程的缘故了!

有些同学可能又会问了,如果我们自己写程序的话,都会把底层驱动和我的main文件放在一个目录下,这样我只要把他们全部打包便可以移动到任何地方使用了,而有些库也是基于这个思路的。这里拉普兰德要告诉大家,该方法虽然适用于一些小的应用,但是一旦我们的工程多了起来,管理底层驱动是一件非常麻烦的事情,试想你如果有10个关于K60的工程,每个工程地下都分别包含了K60的底层驱动,一旦一个驱动出现BUG,那么你需要全部修复每个工程下的该BUG。而且随着驱动文件的增多,你的复制粘贴操作会变得越来越多,单个工程的大小也会越来越臃肿。

采用拉普兰德OSKinetis固件库的阵营分类方法,可以使开发者们不必再关心每个工程下需要包含哪些驱动文件了,因为大家只要把自己的应用文件放在里面即可。所有工程都是共用固件库阵营里的驱动的!这样的话,固件库驱动归拉普兰德的工程师管理,用户工程归开发者自己管理。固件库中的驱动有任何BUG,我们都会进行统一修复,并发布更新包,大家只需要覆盖固件库(lib)阵营即可。
lib固件库文件夹

上节最后说了,lib是由拉普兰德管理的固件库阵营,开发者们不必对该目录下的任何文件做修改。除非个别特殊文件,下面会做提到,开发者可能会需要做点小改动。

Lib文件夹下的结构在上图已经展示出来了,下面我们具体介绍下:

–common文件夹

    此文件夹内的所有代码都是与硬件无关的通用函数代码,例如通用输入输出函数、内存管理函数、断言函数等等。

–CPU文件夹

    与上一个文件夹相反,这里的所有代码都是与硬件相关的函数代码,尤其是与CPU类型相关的。我们的固件库是基于MK60D系列单片机开发的,因此这里的代码和函数都是该款单片机限定的。其中MK60DZ10.h*文件,是MK60D单片机的寄存器结构头文件;startup_K60.s*是单片机的启动文件,用汇编语言编写,里面除了有相关的启动命令,还定义了K60的中断向量表;system_MK60DZ10.c*和system_MK60DZ10.h*是K60的系统初始化代码,里面对系统时钟、调试信息输出串口等基本模块进行初始化。以上代码均基于CMSIS规范编写,如果开发者要移植OSKinetis固件库到其他Kinetis单片机,需要根据需求修改这几个文件。

–LPLD文件夹

    该文件夹是OSKinetis的核心所在,这里几乎实现了K60单片机的所有外设模块驱动,该文件夹下又包含如下文件夹和文件:

LPLD
  |_ HW
  |_ DEV
  |_ LPLD_Drivers.h

    其中LPLD_Drivers.h*头文件定义了OSKinetis固件库的版本信息、固件库所支持单片机的引脚枚举定义(PortPinsEnum)、并包含了所有底层模块驱动的头文件。

    HW文件夹包含了所有底层驱动模块的代码文件,例如:GPIO.h和GPIO.c等等。

    DEV文件夹包含了常用的外设器件驱动,该驱动是基于HW内的硬件驱动编写的,同时由于不同的用户应用,所用到的器件引脚、参数可能不同,用户在调用DEV中的驱动时,需要根据实际硬件修改.h中的相关定义,这也是lib中唯一可能需要用户自定义修改的地方。

–iar_config_files

    该文件夹下的文件全部为icf格式文件,即IAR开发工具所用到的连接文件,如果用户需要把程序下载到单片机的RAM运行,就要选择xxKB_Ram.icf文件,如果是要下载到ROM运行,就要选择xxKB_FLASH.icf的文件,当然在模板工程中,我们都为开发者配置好了,大家不必关心。

–USB、FatFs、uCOS-II等文件夹

    这些文件夹包含了非拉普兰德编写的第三方通用驱动、系统文件,例如USB协议栈、FatFs文件系统、uCos操作系统等,我们只是在某些工程中需要用到这些代码,因此统一都归类到lib文件夹中了,随着固件库的更新更多好用的第三方驱动。
Project用户工程文件夹

如果你按照第1节的内容,只部署了固件库,而没有部署例程包,那么看到的/project目录下就是空的。当你部署了例程包后,就会发现n都个用户工程在其中。打开每一个用户工程文件夹都会发现里面的布局是一样的,例如打开“01-LPLD_HelloWorld”工程,该工程目录下有两个文件夹,分别是“app”和“iar”:

–app文件夹

    这里包含的全部是用户工程的代码文件.c和.h,当然还有每个工程必须包含的k60_card.h头文件,这是一个重要文件,下面会讲到。一般情况下,如果用户是用“K60快速建立工程_Vx.x.x.exe”软件新建的工程 ,那么这里包含main()函数的文件就是“你的工程名.c”文件,如果你还需要包含其他代码文件,均可以添加到此目录。

–iar文件夹

    这里包含的是IAR工具的工程文件,这里所有的文件都是“K60快速建立工程_Vx.x.x.exe”软件自动创建的,用户在打开一个工程时,只需选择他的工作空间文件即可,即“你的工程名.eww”文件。

如果用户想要移植OSKinetis固件库到其他开发环境,也可以照猫画虎,新建一个包含开发环境工作空间文件的文件夹,再在里面新建工程文件。例如CodeWarrior开发环境,你可以在工程文件夹下新建一个与iar平级的cw目录,再在里面新建CW的各种工程文件,最后将app中的相关代码添加到工程中,当然这里只是简略说一下移植思路,我们会在以后的课程中具体讲解。
K60_card.h工程参数定义头文件

也许老用户已经发现了,原来包含在lib中的k60_card.h文件,现在已经包含在每个用户工程的app目录下了。这也是V3库的改进之一,原来的k60_card.h文件定位模糊,例如开发者如果需要修改单片机内核频率的话,那么其他所有工程的内核频率都会改变。现在由于每个工程都包含了自己的k60_card.h文件,那么每个工程都可以有自定义的一些功能。你可以在k60_card.h中修改工程的内核频率、总线频率等各种模块时钟,也可以修改该工程是否允许打印一些调试信息到串口,也可以定义该工程是否调用uCos或FatFs等其他第三方驱动。

一些的参数定义及修改方法我们已经在OSKinetis的在线wiki中有记录,请移步查看:http://wiki.lpld.cn/index.php?title=K60_card.h
IAR工程空间结构

上述说的都是windows目录下的文件夹及文件结构,下面我们说说打开IAR开发工具后,你所看到的的workspace工作空间窗口下的结构。

这里的结构与我们的windows目录结构基本一致,只是多了一个“Output”组,这个是IAR自动生成的组,里面包含的是开发工具编译后生成的.out二进制文件以及.map空间分配映射文件。.out用户不必关心,.map是一个比较有意思的文件,你可以从里面看到用户工程生成了哪些连接文件,有哪些是只读的,有哪些是可读写的,他们分别被分配到了单片机的哪些空间,有兴趣的用户可以自行百度下。

上面我们提到了“Output”组这个概念,与windows目录不同,你在IAR工作空间下看到的类似文件夹的东西叫做“组”(Group),因此在IAR开发环境下我们不管“app”叫app文件夹,而是叫app组。这里看到的app组合lib组下的所有结构都与固件库lib文件夹下的结构一样,因此不用再过多介绍。

还是关注例程“01-LPLD_HelloWorld”,因为它只是一个简单例程,因此它的lib组下只包含common、CPU和LPLD这3个基本组,这是所有OSKinetis工程都必须包含的3个组。如果你的工程需要用到USB或者uCos,那么还需要包含USB组或者uCos组,具体包含情况可以参见例程“31-(USB)LPLD_VirtualSerialComm”或例程“(uCos)LPLD_uCosOSSem”。

注:本文中我们提到了不同Kinetis平台移植固件库的概念,所有带*的文件都是在移植过程中需要用户自己修改的。这里只是简单提及一下移植概念,深入步骤和方法请期待后续课程。

【2013/10/20】关于无法正确生成工程的BUG提示:
K60快速建立工程_V0.0.2.exe版本的工具,在快速新建工程时会因为目录问题不能生成工程。如果你的目录路径中带有英文“.”点符号,则无法生成工程。
例如目录:
G:/[拉普兰德K60底层库]LPLD_OSKinetis_V3.00/LPLD_OSKinetis_V3/project/
其中“V3.00”中就有就有个点,你需要更改目录名去掉这个点才能正常生成。

本节接我的上一个帖子,附上帖子链接:
【跟我学OSKinetis】第1课-运行并新建固件库工程《转》
http://www.amobbs.com/thread-5580124-1-1.html
(出处: amoBBS 阿莫电子论坛)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2014-5-9 10:21:59 | 显示全部楼层
感谢楼主的资料分享!

出0入0汤圆

 楼主| 发表于 2014-5-9 10:48:07 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2014-5-9 10:21
感谢楼主的资料分享!

客气,我还得感谢斑竹顶帖呢,除了斑竹,没人关注俺这个要沉的帖子...

出0入0汤圆

发表于 2014-5-9 10:53:45 | 显示全部楼层
学习学习,谢谢分亨。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-1 07:30

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表