This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

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

Part Number: TMS320F280049

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

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

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

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

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

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

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

    More than 2 levels of function nesting
    Function with more than two arguments
    所以我也没有看到过将.cla封装成.lib的情况
  • 我找了一下编译出错的原因,发现和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

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

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

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

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

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

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

  • 好的,非常感谢!

  • 客气了!