S32K146 创建静态库函数遇到的问题

本文分享了在S32K146微控制器上创建静态库函数的过程,包括头文件包含、预处理符号设定和解决编译问题。作者强调了库函数的使用目的,区分了静态库与动态库,并详细描述了一个特定的编译错误,该错误涉及RTOS和浮点数处理。解决方法是在工程属性中启用硬件浮点支持。
摘要由CSDN通过智能技术生成

一. 综述

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)
lib创建
(图2)
编译出错
(图3)
浮点指令选项

4.扩展

关于浮点数运算的相关设置及选项解释,可以参考链接: 胡老师的文章

探索中难免会有很多问题,道友们一起探讨吧。本人水平有限,文章难免会有错误或纰漏,请谅解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值