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

1.库的建立

1)新建库工程

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

286a5995d6f0144b67b0cfc297d1da42.png

图1在CCS中新建库工程

2)定义相关的库函数

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

7d725dadc00c17595f50f859f11ee5c8.png

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

3)添加头文件.h

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

4d6e5b0cb8c0eb6c793de53e6f6c2661.png

ce91fba059a6ed8360b29e2f57204c46.png

图3新建.h文件

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

cb6a7598aca7486b4d8f9e19cf65f81a.png

图4函数名声明

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

747723f9bbcd05e5f072ff1cb6fa6815.png

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

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

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

1)建立文件链接

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

b1c3a4d298c904af751f3be5c569af09.png

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

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

60224cdbeca84a8b60c8292a512c5bc3.png

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

然后,在C2000Linker-》FileSearchPath中分别添加对应的.lib文件名以及所在文件路径。

49ca405c89f68a1c66b6c2f3e0d80111.png

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

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

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

2866dab848b0f6a6c66fe7c60f7c5c5e.png

e02c13dddf77fbddda6147384466b560.png

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

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

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

选择“option--symdebug:none”,即在工程属性Build-》C2000Complier-》AdvancedOptions-》AdvancedDebugOptions中选择--symdebug:none作为Debuggingmodel。

5a6cb3616cb400805380ed866bedcd85.png

图10使能option--symdebug:none

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

b3328358ac79d8ae39c0ee7862805c5c.png

图11工程示例

责任编辑人:CC

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐