TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320F280049: .c文件封装成.lib文件方法

Part Number:TMS320F280049

我们现在有一个需求,是想把CCS工程下的某个.c文件封装成.lib文件或者是把某个函数封装起来,请各位专家有相应的方法或者可以参考的资料吗?请帮忙提供一下,谢谢!

Green Deng:

你好,要生成库文件的话需要在新建工程的时候就选择库的形式输出,也就是如下框中的格式:

,

Han Meng:

您好,感谢回复!另外,想再问一下.cla文件封装成.lib文件也是相同的方法吗?

,

Han Meng:

您好,我尝试将CLA_task.cla文件封装成.lib文件,但是编译出现如下的问题,请问是什么原因呢?谢谢!

,

Green Deng:

这个还真没操作过.cla转.lib的,你是将.cla里面的代码复制到新建的.lib工程中之后编译出现的这个报错吗?

,

Han Meng:

对的,是这样的,生产lib文件编译中报的错。

,

Green Deng:

那可能是CLA有限制,本身CLA调用lib库也有限制,比如

More than 2 levels of function nesting
Function with more than two arguments
所以我也没有看到过将.cla封装成.lib的情况

,

Han Meng:

我找了一下编译出错的原因,发现和CLA_cfg.h中Cla1BackgroundTask()的函数声明有关,如图1红色圈中所示。初始时我们在CLA中用的是__attribute__((interrupt("background")))  void Cla1BackgroundTask(); 在生成.lib文件过程中编译会出错。我将其替换成__attribute__((interrupt))  void Cla1BackgroundTask();后编译可以通过,如图2所示。对于图1中的#if defined(__TMS320C28XX__)不明白是什么含义,可以帮忙解释一下吗?是不是我们之前在CLA中用的Cla1BackgroundTask()有问题?

 图1

 图2

,

Green Deng:

你好,很抱歉的是,关于“__attribute__((interrupt("background")))  void Cla1BackgroundTask();”和“__attribute__((interrupt))  void Cla1BackgroundTask();”的区别我也不太清楚。

关于#if defined(__TMS320C28XX__)的话是一个宏定义,编译器手册中的官方解释是:Defined if target is C28x

,

Han Meng:

你好,谢谢回复!我们用的是F280049,那应该要用__attribute__((interrupt))  void Cla1BackgroundTask()这个函数,请问我这么理解对吗?因为确实用了这个函数之后,用.cla文件生成.lib文件编译时就不会报错。只是比较奇怪的是,在原工程文件中即使用“__attribute__((interrupt("background")))  void Cla1BackgroundTask();”编译也不会报错。

,

Green Deng:

Han Meng 说:我们用的是F280049,那应该要用__attribute__((interrupt))  void Cla1BackgroundTask()这个函数,请问我这么理解对吗?

我认为是的,不过原因的话我的猜测是,这段代码本来是给CLA用的,所以原工程用#else中的内容可以。而生成库的话编译器可能理解为是给C28核用的,所以要用__attribute__((interrupt))  void Cla1BackgroundTask()

不过只是猜测,没什么根据。

,

Han Meng:

好的,非常感谢!

,

Green Deng:

客气了!

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F280049: .c文件封装成.lib文件方法
分享到: 更多 (0)