CCS中静态库lib的生成与调用

news2024/9/20 22:39:53

  在调试DSP设备的时候,发现好多工程会把比较核心的代码生成静态库lib,代码运行的时候直接调用lib里面的相关函数就行。但是从外部是看不到lib库里面的内容的,这样通过静态库的方式实现对代码的加密。

  在网上找了好久如何将函数生成静态库*.lib的方法,找到的资料都比较零散,看起来比较费劲,通过自己的摸索,终于验证成功了。下面将我的方法分享一下。

  下面用到的相关工程全部已打包上传 https://download.csdn.net/download/qq_20222919/88583858

   首先调试好需要生成lib库文件的工程,这里使用一个流水灯来演示。
在这里插入图片描述

   main函数中调用流水灯函数,实现LED灯的各种显示效果。
在这里插入图片描述

   leds.c文件中主要对LED灯使用到的端口进行初始化。
在这里插入图片描述
   led_control.c文件中通过三个函数实现三种流水灯的效果。

   在这个工程中需要将流水灯的控制方式打包,也就是要将led_control.c这个文件打包为lib库文件。

   首先调试当前工程,确保函数功能都能正确执行。
在这里插入图片描述
   下载运行,观察流水灯的现象,确保函数功能都正常。

   接下来开始将led_control.c文件生成为库文件。

   首先要新建一个工程,新建工程时注意单片机型号的选择。
在这里插入图片描述
   在Advanced settings选项中将output type类型选为Static Library。
然后点击Finish按钮,创建新的工程。
在这里插入图片描述

   新工程创建完成后,删除默认的main.c文件。
在这里插入图片描述
   然后进入到当前工程文件夹中,将上一个工程中的led_control.c文件拷贝到当前工程文件夹中。
在这里插入图片描述
   拷贝完成后,工程中就会自动出现led_control.c文件。
在这里插入图片描述

   接下来还需要添加工程中需要的头文件,在工程上单击鼠标右键,选择Properties

在这里插入图片描述

   然后在Include Options依次添加需要用到的头文件。
在这里插入图片描述
在这里插入图片描述

   这里主要添加官方库中的头文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

   最后还需要将上一个工程中leds这个文件夹路添加进来,因为需要生成lib库文件的这个led_control.c还需要依赖leds文件夹中的其他几个文件。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
   所以当前项目中就不需要再添加leds.h和led_control.h头文件了,直接引用上一个项目的文件路径就行。

   添加完成之后编译工程,工程编译完成之后,在Debug文件夹中就会出现生成generate_led_lib.lib 文件。
在这里插入图片描述
   接下来在新的工程中,就可以直接调用这个 lib文件了。

   在ccs中直接复制一个刚才的流水灯工程
在这里插入图片描述
   名字修改为call_led_lib
在这里插入图片描述

   使用这个工程来调用刚才生成的lib库,在工程中直接删除led_control.c文件。
在这里插入图片描述

   然后打开工程文件夹,将generate_led_lib工程中Debug文件夹里面生成的generate_led_lib.lib文件 复制到call_led_lib工程中的APP—leds文件夹中
在这里插入图片描述

   相当于使用generate_led_lib.lib文件来代替刚才led_control.c文件的功能。
此时工程中就会自动将generate_led_lib.lib文件添加进去。
在这里插入图片描述

   下来编译当前工程
在这里插入图片描述

   工程编译成功,没有出现错误,说明刚才使用generate_led_lib.lib文件来代替led_control.c是成功的。
在这里插入图片描述

   下载到单片机中执行,观察led闪烁现象,效果和waterfall_light工程执行的效果是一样的。
在这里插入图片描述

   在工程中按住ctrl键单击display1、display2、display3这三个函数,发现这三个函数不能跳转。说明generate_led_lib.lib文件,已经成功的将这个三个函数封装起来了,只能调用,不能看到函数实现的具体过程。

   这样通过静态库的方法,就可以对项目中的核心技术进行软件层面的加密。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1271615.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PyQt6 QToolButton工具按钮控件

​锋哥原创的PyQt6视频教程: 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计32条视频,包括:2024版 PyQt6 Python桌面开发 视频教程(无废话…

python + mongodb使用入门

最近用了下mongodb ,简单做个记录: 1.启动系统mongo服务 mongod -f mongod.conf其中 mongod.conf 是配置文件,示例如下: dbpath/youpath/data/db #数据库保存位置 logpath/youpath/data/mongod.log #日志 logappendtrue fo…

LeetCode刷题日志-30串联所有单词子串

最简单的思路就是,将words里的单词全排列,然后在s中比对,但是复杂度太高阶乘级别。 如何优化? 题目说明子串是包含words中所有单词,且任意顺序,我们可以使用一个map来存储words中每个单词以及对应数量&…

wyler水平仪维修WYLER倾角仪维修CH-8405

瑞士WYLER电子水平仪维修;BIueCLINO倾斜度测量仪维修;wyler电子倾角仪维修。 水平仪常见故障及处理方法 1、 仪表通电不工作。 A、检查仪表220V电源端子接线是否正确 B、检查仪表电容是否熔断; C、拧下仪表后的固定螺钉,将表…

Android笔记(十六):前台服务

设置服务为前台服务。前台服务会在状态栏显示一个通知。通知界面与服务进行关联。 一、什么是通知? Notification通知是在移动应用APP提供给用户的消息提示,是在移动系统的通知栏中显示。当移动应用不在运行时或者在后台状态下,通过发布通知…

Python快速实现BMI(身体质量指数)计算器(窗口界面形式)

BMI是身体质量指数(Body Mass Index)的缩写,是一种衡量人体肥胖程度的指标。它是根据人的身高和体重计算得出的,公式为: BMI 体重(kg)/ 身高^2(m) 其中,体…

有它再也不用PS制作企业期刊了!

随着互联网的发展,越来越多的人开始使用在线工具来制作企业期刊。但是,对于一些新手来说,使用PS等专业的图像处理软件可能会感到非常困难。那么,有没有一种简单易用的方法来制作企业期刊呢?答案是肯定的! 所…

老师选班干部的方法

我经常被问到这样一个问题:“老师,你怎么选班干部的?”那我就来分享一下我的经验吧,希望能给广大教师朋友提供一些参考。 选班干部之前先要明确一点,班干部是做什么的?有什么职责。班干部是班级的核心力量&…

什么是gRPC

gRPC(gRPC Remote Procedure Call)是由 Google 开发的开源 RPC 框架,它基于 HTTP/2 标准,使用 Protocol Buffers 作为接口定义语言(IDL)。gRPC 提供了一种高效、跨语言、跨平台的远程过程调用(R…

如何制作一个数字人?流程是怎样的?

​​虚拟人概念从早期动漫领域的初音未来用一首《甩葱歌》让绿色双马尾的“歌姬”形象火出圈,到洛天依登上央视春晚舞台,再到众多虚拟歌手、虚拟主播、KOL、代言人等活跃于各种情境中。 去年以来,元宇宙和虚拟人技术进入全球科技产业的聚光灯…

牛客算法心得——abb(dp)

大家好,我是晴天学长,传智杯的题,我准备写一个题解,需要的小伙伴可以关注支持一下哦!后续会继续更新的。💪💪💪 1) .abb leafee 最近爱上了 abb 型语句,比如“叠词词”、…

量化误差的测量

因为转换的精度有限,所以将模拟值数字化时会不可避免地出现量化误差。量化误差由转换器及其误差、噪声和非线性度决定。当输入信号和计数器时基有区别时就会产生量化误差。根据输入信号的相位和计数器时基的匹配程度,计数器有下列三种可能性:…

光伏设计软件操作指南

在能源产业的变革中,光伏将成为未来最大的绿电来源。光伏电站未来25年的发电量、后期的运维等,都需要借助严谨的设计。光伏设计软件可以帮助设计者减少工作量,降低人工计算的错误,使得数据更精确。 1.了解软件构成 光伏设计软件专…

Carbonyl ,一个可以在终端里运行的浏览器

浏览器对于我们的日常来说是使用频率比较高的一个东西。 一般来说,对于桌面的发行版的linux的浏览器,用的比较多的是Firefox浏览器。对于我们日常windows、mac等。常用的有chrome、edge等。 但是!在终端里运行一个浏览器,我想大多…

8.0 新特性 - Generated Invisible Primary Key

文章目录 说明1. GIPK 介绍1.1 参数设置2.2 可见性测试2.3 修改元数据可见性2.4 修改查询可见性 2. GIPK 测试2.1 Binlog 分析2.2 主从复制2.3 逻辑备份2.4 其它限制2.4.1 AUTO_INCREMENT 属性2.4.2 my_row_id 关键字 后记 说明 MySQL Innodb 引擎采用的是 IOT(索引…

记录:Unity脚本的编写9.0

目录 射线一些准备工作编写代码 突然发现好像没有写过关于射线的内容,我就说怎么总感觉好像少了什么东西(心虚 那就在这里写一下关于射线的内容吧,将在这里实现射线检测鼠标点击的功能 射线 射线是一种在Unity中检测碰撞器或触发器的方法&am…

作为搜索引擎,TikTok超过了谷歌

Rise at Seven通过分析不同行业的数千个关键词进行了研究,突出了用户在TikTok上搜索的100个单词和短语,比在谷歌上搜索的更多。 虽然承认“near me”和“what’s on”的搜索查询仍然是谷歌上最突出的搜索查询,但Rise at Seven得出的结论是&a…

11-28 SpringBoot1

约定大于配置 简化Spring开发, spring boot致力于简洁,让开发者写更少的配置,程序能够更快的运行和启动。它是下一代javaweb框架,并且它是spring cloud(微服务)的基础。dev-ops:开发者,运维者。 springboot特点:优点面试重点 1)为基于Spring…

一键上传,无限容量!打造高效图床工具,利用Electron和Gitee搭建自己的私人云存储空间

说在前面 平时写文章或写代码的时候,都少不了需要将本地图片转成在线图片链接,大家都是使用什么工具进行转换的呢?相信很多人都有自己的图床工具,今天来给大家介绍一下,怎么基于Gitee和Electron来开发一个便捷的图床工…

消除笔怎么用?手把手教你一键智能消除杂物

消除笔怎么用?消除笔是一种非常实用的工具,可以帮助我们快速修复图片中的小问题。无论是想要消除照片中的路人还是进行一些修改,消除笔都可以轻松地帮助我们实现。 以下是使用消除笔的步骤: 1、打开水印云软件,并在工具…