打印
[Kinetis]

CW中如何使用自定义库

[复制链接]
2801|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 FSL_FAE_River 于 2014-1-7 19:24 编辑

    2014年,先给大家拜个早年,感谢一直以来对飞思卡尔的关注和支持。记得不少网友问起怎么用自己的库,小弟做了下面一个教程。
    熟悉了CodeWarrior的使用者都会觉得ProcessorExpert是一个很好的辅助工具,生成的驱动及初始化代码十分可靠,尽管会有些冗余,但是用来初始化模块,不失为一个很好的参考手段。这些驱动函数,我们信手一拖,改个参数,用起来就妥妥的。
    在很多时候,在开发的过程中,往往程序都是分割成不同模块,由各个部门的工程师去完成一个大项目,通常只是定义好标准的输入输出接口,部门间都看不到对方的核心代码,可以很好的保护知识产权,这时候,“库”就诞生了。通常我们会把核心的算法代码放在库里面,这里有一个使用技巧:编译器优化选项——库工程和主工程可以有不同的优化选择,使用time optimize去优化库函数,而主函数就使用size optimize特别在中断函数资源紧张时能起到一定的帮助。
     好了,长话短说,下面将介绍如何在CW中创建并使用自己的库工程。这是一个非常简单的教程,使用环境:CW10.5+ FRDM-KL25
Step 1:新建一个工程,类型选择library,其他选项保持默认。这实验定义的工程名为Get_Mcg


Step 2:为工程新建头文件what_mcg_mode.h
Step 3:为头文件添加需要的宏定义及函数声明
Step 4:从例程包的mcg.c里复制函数what_mcg_mode()mylibrary.c中,并将刚刚声明的what_mcg_mode.h及寄存器定义IO_Map.hincludemylibrary.c中。
Step 5:设置输出库文件,打开工程的properties->C build->Setting菜单,按下图进行需要的设置
//默认不优化
下图是关于库工程的重要设置,虽然CW已经为用户填好,但是有必要进行解释说明。
Step 6:编译工程,此时工程文件多出了libGet_Mcg.a,这就是我们在主工程里将会用到的库。
Step 7:新建一个application的工程,注意库工程和主工程所选的芯片要对应,将what_mcg_mode.h复制到Project_Headers文件夹下。新建文件夹Lib,并将libGet_Mcg.a复制到该目录下。
打开主工程的Properties菜单,C build->Setting->C Linker下将库的路径添加到工程中如下图。
Step 8:验证库的使用,按下图添加头文件及使用函数,新工程不作任何修改默认时钟将为FEI模式,debug时发现temp读回来为3,正是我们宏定义的FEI
//是不是so easy
总结:上面介绍了如何在CW环境下进行自定义库函数的应用。不同的库函数可以使用不同的优化等级。

相关帖子

沙发
FSL_TICS_Jeremy| | 2014-1-8 09:12 | 只看该作者
谢谢分享!!

使用特权

评论回复
板凳
_Jason| | 2014-1-17 09:07 | 只看该作者
果断支持一下

使用特权

评论回复
地板
lfx_rivers| | 2014-3-6 17:49 | 只看该作者
碉堡啦!!!

使用特权

评论回复
5
wolyltclyl| | 2014-6-30 19:13 | 只看该作者
真能忽悠,完全不管用啊

使用特权

评论回复
6
FSL_TICS_ZJJ| | 2014-7-2 09:13 | 只看该作者
wolyltclyl 发表于 2014-6-30 19:13
真能忽悠,完全不管用啊

楼主的不管用是什么意思?
是按照操作不能实现楼主最后的验证结果吗?
如果有问题,欢迎提出来交流啊。

使用特权

评论回复
7
lovetan2014| | 2014-12-19 11:23 | 只看该作者
很好,不错,按照此方法做了一次,可行。
在请教一个问题。如果我将一个函数生产库文件,而的该函数的参数是通过一个配置头文件。我想只把配置头文件开放。
比如将IcInt.c文件中的void IC1_INIT(void)函数 生产库函数,
void IC1_INIT(void)
{
    Data.InitWord = 0x8000;
    BitIO1_Set;  //IO1口置1
    BitIO2_Set;  //IO2口置1
    BitIO3_ClrVal(); //IO3口置0
    while (!(SpiState&0x20));
}
而BitIO1_Set;  BitIO2_Set;  BitIO3_ClrVal();是通过配置调用配置开放用户的配置头文件ConfigValue.h可改变的。
#ifndef CONFIGVALUE_H_
#define CONFIGVALUE_H_
#define   BitIO1_Set      CS_SetVal()  //片选端口置1
#define   BitIO2_Set      EN_SetVal()  //使能端口置0
#define   BitIO3_ClrVal   EN_ClrVal()  //使能端口置1
#endif
EN_SetVal() CS_SetVal()为初始化自动生产的库函数。
因为现在我需要将 ConfigValue.h与IcInt.c同时添加才能正常生产.lib文件。可否实现只需添加IcInt.c而ConfigValue.h开放给用户可修改的。或者两个都添加生产lib库后,将ConfigValue.h也开放给用户,修改还还可有作用?谢谢!!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

36

帖子

0

粉丝