概述
S32K146 创建静态函数库过程问题分享
- 一. 综述
- 1.为什么要使用库函数?
- 2.静态库与动态库的区别
- 2.1.转载别人的理解
- 2.2 我的通俗理解
- 二. S32K146创建静态库函数过程问题
- 1.头文件包含问题
- 2.预处理符号问题
- 3.编译出的其它问题
- 4.扩展
一. 综述
1.为什么要使用库函数?
以下描述引用自:汽车电子expert成长之路
a. 将程序开发功能模块化,将一些常用的算法或者通用外设驱动做成库文件,使其标准化,既便于维护升级,也可提高团队的开发效率;
b.以库的方式而非源代码形式提供给客户或者团队成员使用,可以有效保护核心算法等知识产权;
2.静态库与动态库的区别
2.1.转载别人的理解
关于静态库与动态库的定义以及优劣,可以参考如下别的博主的文章:
链接1: 通俗理解动态库与静态库区别
链接2: 详谈静态库和动态库的区别
2.2 我的通俗理解
首先,程序是怎样运行的?我们写的C代码怎么编程可执行文件?C代码我们称作源文件(这玩意儿是高级语言,cpu看不懂),例:hello.c文件,第一步经过预处理生成hello.i,第二步编译生成hello.s,第三步汇编程序汇编hello.o,第四步链接生成**二进制文**,到这cpu才能执行我们的代码
其次,什么是库?可以理解为别人写好的函数api
再次,什么是静态库?静态库是别人写好的api函数的.o文件,在链接阶段加入到你写的源文件里边,成为你最终生成的二进制文件的一部分,是一个完整的整体
最后,什么是动态库?暂时我还没有透彻的理解,各位仁者见仁智者见智
二. S32K146创建静态库函数过程问题
1.头文件包含问题
1.1)我的项目开发使用的是SDK,最终软件定稿后,要将所有的底层相关源文件全部封装到库函数里边(包含SDK生成的“Generated_Code”文件夹下的.c文件和“User_Code”文件夹下我自己写的.c文件,因为“Generated_Code”文件夹下的.c文件引用了“SDK”文件夹下的.c和.h文件,所以上述文件夹中的.c文件和涉及到的.h文件都要封装到库函数中)
1.2)1.1中提到的.h文件都要包含到工程路径下,尤其是“SDK”文件夹下,不同层级的文件夹可能都有.h文件,不要遗漏
2.预处理符号问题
注意,需要在工程属性如下位置添加预编译符号,否则编译会显示很多头文件没有被包含,其原因就是缺少如下所示的宏定义“CPU_S32K146”;如果使用了SDK自带的RTOS,则最下方关于RTOS的宏“USING_OS_FREERTOS”也需要添加
3.编译出的其它问题
我的工程使用了RTOS组件,编译时出现以下问题(如图2),最终发现是操作系统问价“port.c”中如下函数对浮点数相关寄存器进行了保护,而lib工程创建之初,FPU这一栏选择的是默认(如图1,不使用FPU,浮点处理单元),导致编译问题发生。解决方案见图3,在工程属性里添加硬件浮点支持
(图1)
(图2)
(图3)
4.扩展
关于浮点数运算的相关设置及选项解释,可以参考链接: 胡老师的文章
探索中难免会有很多问题,道友们一起探讨吧。本人水平有限,文章难免会有错误或纰漏,请谅解。
最后
以上就是欢呼便当为你收集整理的S32K146 创建静态库函数遇到的问题一. 综述二. S32K146创建静态库函数过程问题的全部内容,希望文章能够帮你解决S32K146 创建静态库函数遇到的问题一. 综述二. S32K146创建静态库函数过程问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复