查看: 4697|回复: 12

[求助] 【跟我学OSKinetis】第2课-固件库构成详解

[复制链接]

该用户从未签到

17

主题

113

帖子

0

注册会员

Rank: 2

积分
130
最后登录
1970-1-1
发表于 2013-10-13 12:24:15 | 显示全部楼层 |阅读模式
 上节我们已经正确部署并运行了第1个例程,而且也学会了如何快速新建一个工程。相信在部署固件库的同时,有些同学就开始研究OSKinetis固件库的目录结构了,用过V2版固件库的同学可能会发现,最新的V3版固件库和旧版本有了较大的区别,那么本节我们就来具体讲讲V3版固件库的构成到底是怎么样的。
 目录结构

当你按照第1课中的方法部署好固件库和例程包后,你会得到一个名为LPLD_OSKinetis_V3”的根目录,我们的所有驱动文件以及用户的工程都包含在这个文件夹里,无论你将它移动到何处,都可以直接用开发工具打开其中的工程进行编译,不会出任何错误。
以这个文件夹为根目录,其下的目录结构如图所示:
OSKinetis-2-1.png
“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平台移植固件库的概念,所有带*的文件都是在移植过程中需要用户自己修改的。这里只是简单提及一下移植概念,深入步骤和方法请期待后续课程。
本课中涉及的IAR软件下载、V3固件库及例程包下载地址:https://www.eefocus.com/bbs/article_891_561852.html跟我学OSKinetis系列教程(持续更新):http://www.lpld.cn/?tag=%e8%b7%9f%e6%88%91%e5%ad%a6oskinetisOSKinetis固件库专业讨论群,有机会和固件库开发者一对一交流。QQ群:184156168(入群请输入“LPLD固件库”)
我知道答案 目前已有12人回答
回复

使用道具 举报

该用户从未签到

0

主题

84

帖子

0

注册会员

Rank: 2

积分
187
最后登录
1970-1-1
发表于 2014-8-25 16:51:38 | 显示全部楼层
顶楼主
回复

使用道具 举报

该用户从未签到

0

主题

109

帖子

0

中级会员

Rank: 3Rank: 3

积分
236
最后登录
1970-1-1
发表于 2014-8-26 08:42:38 | 显示全部楼层
学习了 顶
回复

使用道具 举报

  • TA的每日心情
    奋斗
    2025-5-7 09:07
  • 签到天数: 353 天

    连续签到: 1 天

    [LV.8]以坛为家I

    141

    主题

    8056

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    5785
    最后登录
    2025-5-7
    发表于 2015-10-1 08:37:09 | 显示全部楼层
    学习
        154120hhw0q0e0hpw374yw.png
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2019-11-18 12:16
  • 签到天数: 560 天

    连续签到: 1 天

    [LV.9]以坛为家II

    23

    主题

    913

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2305
    最后登录
    2019-11-18
    发表于 2015-10-1 22:21:08 | 显示全部楼层
    感谢分享………………
    1.png
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2016-11-4 11:23
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    9

    主题

    235

    帖子

    0

    高级会员

    Rank: 4

    积分
    598
    最后登录
    2016-12-12
    发表于 2015-10-4 10:46:53 | 显示全部楼层
    谢谢分享
    freescaleic.org.png
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-5-3 11:19
  • 签到天数: 10 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    50

    主题

    1万

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    14090
    最后登录
    2024-4-19
    发表于 2015-10-7 20:05:54 | 显示全部楼层
    谢谢分享 null - 副本 - 副本 - 副本.png null - 副本 - 副本 (2).png null - 副本 - 副本 (3).png null - 副本 - 副本.png null - 副本 (2) - 副本.png null - 副本 (2).png null - 副本 (3).png null - 副本 (4).png null - 副本.png null.png
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-11-5 18:45
  • 签到天数: 158 天

    连续签到: 1 天

    [LV.7]常住居民III

    26

    主题

    669

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1724
    最后登录
    2020-11-5
    发表于 2015-10-10 23:51:07 | 显示全部楼层
    谢谢分享!


    futu.png

    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    69

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    280
    最后登录
    2016-3-18
    发表于 2015-10-14 20:40:37 | 显示全部楼层
    学习了 顶
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-1-6 07:38
  • 签到天数: 736 天

    连续签到: 1 天

    [LV.9]以坛为家II

    21

    主题

    3486

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    5093
    最后登录
    2024-1-7
    发表于 2015-10-15 09:09:00 | 显示全部楼层
    谢谢分享!
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-22 02:04 , Processed in 0.109814 second(s), 30 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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