我是靠谱客的博主 欢呼便当,最近开发中收集的这篇文章主要介绍S32K146 创建静态库函数遇到的问题一. 综述二. S32K146创建静态库函数过程问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

4.扩展

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

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

最后

以上就是欢呼便当为你收集整理的S32K146 创建静态库函数遇到的问题一. 综述二. S32K146创建静态库函数过程问题的全部内容,希望文章能够帮你解决S32K146 创建静态库函数遇到的问题一. 综述二. S32K146创建静态库函数过程问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部