0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

关于如何将函数封装成库使用的方法介绍

星星科技指导员 来源:TI 作者:Aki Li 2023-03-21 09:36 次阅读

在项目开发过程中,开发者出于保护核心算法的目的,希望将部分核心代码封装起来,使得其他使用者无法查看具体的代码实现细节,而不影响正常的调用。常见的思路是将核心的函数封装成库,下面将结合例程说明具体实现方法。

1.库的建立

1).新建库工程

在CCS中,选择Project -> New CCS Project,在工程配置窗口中,选择相应的“Target” device,以及输入自定义的工程名字;然后需要注意在“Project type and tool-chain -> output type”中选择“Static Library”,而不是“Executable”,“Executable”对应的是我们一般用到的可生成.out 可执行文件的工程。

poYBAGQZCgyATiHFAAFC0LPIhVY411.png

图 1 在CCS中新建库工程

2).定义相关的库函数

新建完工程后,即可将所需封装的函数放入工程文件中,在此以简单的一个功能函数为例进行说明。

pYYBAGQZCg2AeuVzAACadZE-Mgg653.png

图 2 .C文件中添加目标库函数

3).添加头文件.h

先在工程目录新建一个“include”文件夹,然后在该文件夹新建

poYBAGQZCg2ANFY-AABd7ZWffVY249.png

pYYBAGQZCg6AG9lzAABbY7V_t4M154.png

图 3 新建.h文件

在.h文件中进行库函数的函数声明。

poYBAGQZCg6AE8njAADyvAC61k4130.png

图 4 函数名声明

至此,编译该工程,即可生成所需的.lib文件,在默认的Debug文件路径中。

pYYBAGQZCg6AEHfkAADJIDOqYGM680.png

图 5 编译生成对应的.lib文件

2.在工程项目中使用该库文件

以C2000WARE中的“led_ex1_blink”例程为例,说明下如何在实际工程中使用定义的库文件。

1)建立文件链接

首先将第一步生成的.lib文件以及.h文件所在文件夹一并拷贝至目标工程,由于具体的库函数代码实现体现在.c文件,因此最终的工程无法索引至原始的.c文件。

poYBAGQZCg-ADZH6AAEmvmhS95w075.png

图 6 复制相应的.h和.lib文件

下一步需要在该工程中建立对库文件的链接关系。首先在工程属性 C2000 Compiler->Include Option中添加.h文件所在的文件路径,注意此处使用的是相对路径,以确保工程路径发生变更时的一致性。

pYYBAGQZCg-AbUgWAAFBgtoPfms287.png

图 7 添加.h所在的文件路径

然后,在C2000 Linker->File Search Path中分别添加对应的.lib文件名以及所在文件路径。

poYBAGQZChCAJvgSAAEkPe0xnx4443.png

图 8 添加.lib 文件名及路径

2)添加函数头文件及调用

在目标工程中添加.h文件的声明,以及测试变量,并在主函数中进行调用。

pYYBAGQZChCAOOBWAAC2iXNo4x4491.png

pYYBAGQZChGAKTO_AAA2Rvdn-so611.png

图 9 .h文件声明以及调用示例

烧录该工程到芯片,运行后验证“test”结果符合预期。

此外,除了上述方法,可以采用以下方式把工程的调试功能禁止,这样在debug模式下就无法进行任何的调试操作以及查看代码,具体步骤:

选择“option --symdebug:none”,即在工程属性Build->C2000 Complier->Advanced Options->Advanced Debug Options中选择--symdebug:none作为Debugging model。

poYBAGQZChGAYIivAADnJ33tSNA435.png

图 10 使能option --symdebug:none

选择一个例程,进行以上配置后,在调试模式下的效果如图 11所示。在该模式下,所有symbols和工程的链接将被移除,因此无法进行任何的调试操作以及查看源代码。建议在工程开发的最后阶段再使用该模式。

pYYBAGQZChKAExX3AACslpkdyco932.jpg

图 11 工程示例

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 封装
    +关注

    关注

    125

    文章

    7583

    浏览量

    142115
  • 代码
    +关注

    关注

    30

    文章

    4665

    浏览量

    67740
收藏 人收藏

    评论

    相关推荐

    动态封装成python模块的方法

    之前的文章 静态封装成 python 模块中讲解了如何将静态封装成 python 模块,静
    发表于 07-13 15:24 523次阅读

    在hightec中如何将源代封装,并编译链接成.a的库函数

    在hightec中如何将源代封装,并编译链接成.a的库函数
    发表于 02-18 08:10

    如何将CCS3.3工程中.C文件封装成OBJ文件

    如何将CCS3.3工程中的.C文件封装成OBJ文件
    发表于 11-02 09:41

    怎么把寄存器编程封装成固件编程

    基于野火“霸道”和“指南”——零死角玩转STM32入门&中级篇学习地址:课程简介:本课程从STM32内存映射开始讲起,告诉你什么是寄存器,怎么样实现寄存器编程,然后怎么把寄存器编程封装成固件
    发表于 08-03 06:47

    GPIO构件封装方法与规范

    (给出函数名与接口函数),以供实际编程使用。 必要性1、利用软件构件,编程开发效率且程序更规范;2、底层驱动封装成构件,可提高...
    发表于 11-08 06:58

    STM32固件介绍及库函数模板创建相关资料分享

    为了方便移植和开发,减少很多不必要的麻烦,ST公司很多函数封装成固件一、CMSIS标准介绍CMSIS标准的英文全称是Cortex Mic
    发表于 11-30 07:25

    如何将c中的printf函数重定向到串口中去呢

    如何将c中的printf函数重定向到串口中去呢?有哪位大神可以解答一下吗
    发表于 12-01 08:07

    如何将常用接口封装成类似于NCNN的接口调用形式?

    如何将常用接口封装成类似于NCNN的接口调用形式?
    发表于 03-10 07:08

    函数封装成使用的方法

    作者:Aki Li在项目开发过程中,开发者出于保护核心算法的目的,希望部分核心代码封装起来,使得其他使用者无法查看具体的代码实现细节,而不影响正常的调用。常见的思路是核心的函数
    发表于 11-07 08:05

    如何将AD转换导入到PADS中使用

    想学习pads,学会如何将AD转换导入到PADS中使用,方便自己
    发表于 12-11 16:46 0次下载

    如何将完成特定任务的程序代码封装成函数

    到目前为止,为了完成任务,我们共调用了三个系统预定义的函数:printf()、scanf()和sqrt()。通过调用特定函数来完成特定功能的方便程度不言自明。那么,我们自己能不能也完成特定功能的代码写成
    发表于 03-25 08:00 18次下载
    <b class='flag-5'>如何将</b>完成特定任务的程序代码<b class='flag-5'>封装成</b><b class='flag-5'>函数</b>

    函数封装成使用的实现方法

    在项目开发过程中,开发者出于保护核心算法的目的,希望部分核心代码封装起来,使得其他使用者无法查看具体的代码实现细节,而不影响正常的调用。常见的思路是核心的函数
    的头像 发表于 12-19 09:34 5315次阅读

    如何将函数封装成使用的方法介绍

    无法查看具体的代码实现细节,而不影响正常的调用。常见的思路是核心的函数封装成,下面结合例程说明具体实现
    的头像 发表于 01-12 16:32 5167次阅读
    <b class='flag-5'>如何将</b><b class='flag-5'>函数</b><b class='flag-5'>封装成</b><b class='flag-5'>库</b>使用的<b class='flag-5'>方法</b><b class='flag-5'>介绍</b>

    关于如何将函数封装成使用的方法介绍

    关于如何将函数封装成使用的方法介绍
    发表于 10-28 12:00 1次下载
    <b class='flag-5'>关于</b><b class='flag-5'>如何将</b><b class='flag-5'>函数</b><b class='flag-5'>封装成</b><b class='flag-5'>库</b>使用的<b class='flag-5'>方法</b><b class='flag-5'>介绍</b>

    如何将包含XIlinx IP的用户模块封装成网表文件

    那么如何将包含XIlinx IP的用户模块封装成网表文件,下面将给出详细步骤
    的头像 发表于 05-18 11:12 1189次阅读
    <b class='flag-5'>如何将</b>包含XIlinx IP的用户模块<b class='flag-5'>封装成</b>网表文件