查看: 4279|回复: 1

[分享] LPC8N04 BSP编译与链接分析

[复制链接]
  • TA的每日心情

    2019-9-17 13:22
  • 签到天数: 238 天

    连续签到: 1 天

    [LV.7]常住居民III

    30

    主题

    905

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    2251
    最后登录
    2024-10-8
    发表于 2018-7-30 16:40:50 | 显示全部楼层 |阅读模式
    本帖最后由 very333 于 2018-7-30 16:45 编辑

                                                                               LPC8N04 BSP编译与链接分析
            看了大家的帖子,讲解的都很全,再来炒一次冷饭,也没有意义。最近也在看一些编译和链接的知识,所以结合LPC8N04的BSP和大家探讨一下编译和链接的问题。实际上编译和链接的知识点很多,这边只能简单的抛砖引玉,和大家一起探讨。我们只是执行了IAR的rebuild操作,就生成了.out文件,中间过程发生了什么,IDE是如何编译和处理的,可以看下图简单描述了编译与链接的过程。
    编译过程分解.png

    1编译
    首先是源代码中.C文件以及IAR中设置的头文件,预编译成一个.i文件,这边进行了什么处理呢?有一大堆规则:
    比如 A 删除所有的注释 B处理所有条件预编译指令,比如# if #ifdef  C 处理include 等等。
    然后就是编译,将.i文件转换为.O文件,将代码转换为汇编及计算器可以执行的语言。
    首先来看来看驱动部分,包括了很多.c
    c文件.png
    到这一步就生成了.O文件以及编译的中间产物,.O文件
    o文件.jpg 以及编译驱动的.a
    a文件.jpg
    2 链接
    下面就是一大堆.O文件如何链接才可以得到.out文件呢。链接知识点就更多了,简单起见,链接可以理解为将所有的函数链接到一块完整的内存地址内,编成了一部可以查询的函数字典,当需要调用某个函数时,我们根据这本字典去对应的内存地址调用该函数。我们所编的main函数可以认为是这部字典中的一句话,比如功能是"实现GPIO",当.out被下载到CPU里面,首先在内存这本字典中找到“实”在哪一页,再找到“现”……组成这么一句话去实现自己的功能。这边也提一下,为什么board驱动和外设驱动不编译,就无法生成.a,我们的app_demo就会出现编译不过呢,原因说到底就是找不到某个函数的内存地址。
    3.BSP的设计思考
        为什么LPC8N04的BSP要设计成目前的状态呢?我想至少有两个大的优点:可移植性和提高效率。
    可移植性:类似的一款CPU,如果想进行后续开发,只需要修改board中的驱动;如果外设进行了改动,就只需要修改外设中的驱动。
    提高效率:其实有了.a文件,再有一个良好的API函数说明文档,做软件开发的人员就不需要了解一些硬件问题,比如:时钟是多少,如何驱动SPI,我们可以调用API函数即可。有些人就要问了,这有什么好处,这就意味着一个程序可以有两部分的人同时进行开发,一些是做BSP,一些是做应用。这就大大的提高了开发进度。
    4.后记
       再读了一遍,发现写的条理不是很清楚,不知道是剪几页书来还是剪个几句话来改进一下,都是自己的一些理解,欢迎大家一起交流。




    评分

    参与人数 1 +2 收起 理由
    NXP管管 + 2

    查看全部评分

    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2022-1-4 14:25
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    0

    主题

    176

    帖子

    0

    高级会员

    Rank: 4

    积分
    726
    最后登录
    2025-7-10
    发表于 2021-11-11 09:22:56 | 显示全部楼层
    非常好的文章学习了
    每天登陆学习一下
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-19 19:16 , Processed in 0.094032 second(s), 24 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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