历史上的今天
返回首页

历史上的今天

今天是:2025年12月20日(星期六)

2022年12月20日 | keil把源代码生成lib的方法,

2022-12-20

我们一般接触最多的程序文件就是.c和.h为后缀名的文件。

不知道大家有没有看到过.lib为后缀名的文件,这种就是加密的源代码文件。

我们用keil开发工具就可以把我们的.c文件加密成这种.lib文件。

这样能达到以下目的:

  1. 不想让别人看到自己写的源代码,同时又想让他使用你的程序功能。

一般很多芯片原厂就是这样干的,比如说TI的蓝牙和Zigbee协议栈,虽然说是开源的,但是实际上你去看他们底层的代码,很多都是用这种方式加密的。

还有就是一些模块原厂提供模块给方案商用,比如说以前我用汉枫wifi模块的时候,他们核心的代码就是通过这种方式的。

还有就是做电子狗和导航产品的,他们那个地图库是100%加密的。

总结:一般核心技术就会这样去加密,菜鸡程序就不用加了,浪费情怀。

2.加快编译速度,比如说工程比较庞大的时候,如ST固件库,文件很多编译时间需要很长,如果打包成lib库,就能节约不少时间(网上看的,真实性自行考察)。

下面是用keil把我们代码生成.lib的方法,我用我们无际单片机编程的wifi报警主机项目按键功能模块举例。

  1. 建立一个空的工程,把你需要加密的文件添加进去。

把需要生成lib的.c文件添加进来,这我需要把我按键功能模块代码生成lib,所以添加hal_key.c。

2.打开keil的options for Target…设置。

3.选择Output选项,在该选项选择Create Library…lib

然后点ok,重新编译就行了,是不是贼简单?

4.编译没有错误以后,我们在工程目录下找到Objects文件夹。

5.我们可以看到有一个lib文件,就是我们刚刚编译生成的。

不知道大家发现没,怎么生成的名字不是hal_key而是wh01?

这个其实是根据你工程名字生成的,我们手动重命名就可以了。

6.把我们这个lib文件添加到需要用到按键功能的工程文件夹里。

这里需要注意的是,一般要把lib文件和对应.h头文件一起放到对应文件夹里面,别人使用你的函数功能,以及函数有什么参数,就是通过查看.h文件调用的。

通过hal_key.h文件,我大概知道这个源代码提供3个可以提供外部调用的函数。

一个是按键初始化hal_KeyInit(),无返回值,无形参。

一个是按键检测函数hal_KeyProc(),无返回值,无形参。

一个是函数指针注册函数hal_KeyScanCBSRegister。

如果我们需要给别人用的话,不要学我啥注释没有,我们是在视频教程里有讲每个函数的作用。

一定要有点注释,让别人知道怎么调用,有什么条件要求,不然光几个函数别人肯定一脸懵逼。

7.下面,我们就能正常使用hal_key.c的函数功能啦。

同时,别人也看不到你hal_key.c这个文件的源代码了。

最后还想跟大家说几句话。

别看封装lib代码很简单,实际是一门技术活。

主要体现在你的代码移植性写的好不好,如果移植性不好,会直接暴露你的水平。

我就碰到过很多模块厂的工程师封装以后,还需要用到全局变量来传递数据的,这种就是经验不足的人写出来的代码。

封装成lib不是什么技术,怎么能把你的代码封装完以后最小程度干涉别人的代码才是技术。


推荐阅读

史海拾趣

达方(DARFON)公司的发展小趣事

达方电子股份有限公司于1997年在台北市创立,初始阶段主要致力于IT周边组件的研发与生产。创始人凭借对市场趋势的敏锐洞察,决定专注于笔记本键盘的生产,并逐步在行业中崭露头角。通过不断的技术创新和产品优化,达方电子的笔记本键盘逐渐获得了市场的认可,为公司的发展奠定了坚实的基础。

Bellin公司的发展小趣事

随着市场竞争的加剧,达方电子意识到单一产品线的风险。因此,公司开始实施多元化战略,逐步拓展至电源元件、整合通讯元件等领域。通过多元化战略的实施,达方电子成功降低了经营风险,并为公司带来了新的增长点。

巨盛电子(Chesen)公司的发展小趣事

在电子行业,成本控制对于企业的竞争力至关重要。巨盛电子(Chesen)通过优化供应链管理,实现了成本的降低。公司与供应商建立了长期稳定的合作关系,实现了原材料的规模化采购和成本控制。同时,公司还加强了对生产过程的监控和管理,降低了生产过程中的浪费和损耗。这些措施使得巨盛电子在保持产品质量的同时,实现了成本的降低,提高了企业的盈利能力。

COTO TECHNOLOGY公司的发展小趣事

近年来,随着全球电子产业的快速发展,中国市场的重要性日益凸显。COTO TECHNOLOGY也看到了这一机遇,开始深耕中国市场,寻求与当地企业的合作。通过与成都迈极芯科技等公司的战略合作,COTO不仅将先进的技术和产品引入中国,还为中国半导体测试产业提供了更优质的产品和服务。这一系列的合作不仅促进了COTO在中国市场的发展,也推动了中国电子产业的进步。

这五个故事只是COTO TECHNOLOGY发展历程中的一部分,但它们充分展示了这家公司在电子行业中的成长与变迁。从初创时期的线圈绕组制造商,到后来的干簧继电器领导者,再到全球范围内的扩张与战略合作,COTO始终保持着对技术的追求和对市场的敏锐洞察。这些故事不仅反映了COTO的发展历程,也见证了整个电子行业的变革与进步。

E-Z-HOOK公司的发展小趣事

在1956年的一个晴朗午后,E-Z-HOOK的创始人阿尔伯特·史密斯(化名)在实验室里遇到了一个棘手的问题。他正在测试一个复杂的电子系统,但发现现有的测试工具无法满足他的需求。于是,他动手设计并制造出了第一个E-Z-HOOK测试钩,这个简单但实用的工具极大地方便了他的工作。史密斯看到了这个产品的巨大潜力,于是决定成立一家公司来专门生产这种测试钩。这就是E-Z-HOOK公司的起源。

Eastron Corp公司的发展小趣事

面对日益激烈的国际竞争,Eastron Corp决定走全球化发展的道路。公司先后在亚洲、欧洲和北美等地设立了研发中心和生产基地,通过本地化生产和研发,快速响应市场需求。同时,Eastron还积极寻求与国际知名企业的合作,共同开发新技术和产品,提升了公司的国际竞争力。

问答坊 | AI 解惑

碰到一怪现象

昨天调试FPGA程序时,程序下载到EP2C35时发现,程序部分不工作。请问大侠啥原因?…

查看全部问答>

Altium(Protel) 公司出“年报预告”信息了

根据Altium(Protel) 公司在2010年7月12日向悉尼证交所提交的2010年年报预告信息,该公司2009年7月1日至2010年6月30日止,预计共完成销售额是4650万美元,同比下降9% 。 在大中国地区(包括台湾和香港),预计共完成销售额是440万美元,同比下降43% ...…

查看全部问答>

关于在U-boot中添加命令的问题

  大家好,小弟现在正在学习嵌入式这一块,最近看到U-Boot,现在希望能在其中添加一条自己的命令,可是却遇到了这样的问题。   小弟所用的版本是1.3.3,算是比较新的版本。基本上是依照网上介绍的做法来添加的。可是把u-boot ...…

查看全部问答>

求助:网卡全双工/半双工概念问题

请问各位,网卡的全双工/半双工是对MAC而言还是对PHY说的啊,我现在的项目是MAC+PHY结构,自己看资料,发现设置全双工半双工是在PHY芯片上,但是看MAC的工作原理是,全双工半双工控制着MAC的发送流程,看资料上说的是半双工的时候,MAC发送数据要检 ...…

查看全部问答>

求职嵌入式开发

小弟经过2道笔试面试上华为的外包公司文思,虽然也是linux开发有4.75K,但是我真的特别爱好嵌入式,工资比这个低也不介意,不想到时候 又花时间转嵌入式,一次到位算了,想做这个好久了,自己都有些基础 例如操作系统原理,信号,进程,IPC 多线程 ...…

查看全部问答>

SD卡注册表存储

2440 WinCE5.0 目前已实现Flash注册表Hive存储,现在希望存储在SD卡中 存储在Flash中时的注册表是: [HKEY_LOCAL_MACHINE\\System\\StorageManager\\AutoLoad\\MSFlash]     \"DriverPath\"=\"Drivers\\\\BuiltIn\\\\MSFlash\" &nbs ...…

查看全部问答>

请教关于vxworks下位域定义及操作的问题

我的系统是2410+vxworks,最近有个应用问题想使用位域来解决,我定义了如下结构体: typedef union {     struct     {         unsigned char Type   : 3;    &nbs ...…

查看全部问答>

想调用平均值函数

#include <msp430g2231.h>#include <intrinsics.h>   long volMeasured[8];unsigned char volMeasuredPosition = 0;long volAverage;   //  定义一个求平均值函数long Measured[8];long Average(long Measured[8]){&nbs ...…

查看全部问答>

STM32F429开发板,你愿意DIY吗?

STM32F429的性能真好,很多人对其垂涎。在这里调查一下的目的是,如果响应的人多,愿意为大家做PCB。 …

查看全部问答>