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

F28035我新装了codegen version 6.1.0想用C

以前用汇编做过CLA,由于汇编不怎么会用,现在想着改到C下来写,我新装了codegen version 6.1.0,库、头文件都设置好,复制例程中的 2806x_sin.cla 文件到工程中,编译结果出现以下问题:

1. Cla1Regs.MVECT1 = ((Uint16)Cla1Task1 – (Uint16)&Cla1Prog_Start); 提示 Cla1Prog_Start 找不到,extern Uint16 Cla1Prog_Start;这句我有,但是不知道Cla1Prog_Start 原始怎么定义的,我想可能是在.cla文件编译过程的汇编文件中吧,顺带问一下怎么能看到编译过程中生成的asm文件。

2. extern cregister volatile unsigned int IFR; 对这一句提示两个错误,cregister is not allowed on this declaration 和 unrecognized cregister name 'IFR' 。

3. 我发现codegen version 6.1.0里面没有–cla_support option in theRuntime Model Options,我使用6.0.1版本的时候使能过,现在找不到了。

急!!!请专家大侠逐条解答!!!

jinwei guo1:

我把CLAMath.lib文件包含到工程中了,也在File search path 中制定了路径,应该没有问题!

以前用汇编做过CLA,由于汇编不怎么会用,现在想着改到C下来写,我新装了codegen version 6.1.0,库、头文件都设置好,复制例程中的 2806x_sin.cla 文件到工程中,编译结果出现以下问题:

1. Cla1Regs.MVECT1 = ((Uint16)Cla1Task1 – (Uint16)&Cla1Prog_Start); 提示 Cla1Prog_Start 找不到,extern Uint16 Cla1Prog_Start;这句我有,但是不知道Cla1Prog_Start 原始怎么定义的,我想可能是在.cla文件编译过程的汇编文件中吧,顺带问一下怎么能看到编译过程中生成的asm文件。

2. extern cregister volatile unsigned int IFR; 对这一句提示两个错误,cregister is not allowed on this declaration 和 unrecognized cregister name 'IFR' 。

3. 我发现codegen version 6.1.0里面没有–cla_support option in theRuntime Model Options,我使用6.0.1版本的时候使能过,现在找不到了。

急!!!请专家大侠逐条解答!!!

jinwei guo1:

回复 jinwei guo1:

–cla_support 选项找到了在processor options下面

以前用汇编做过CLA,由于汇编不怎么会用,现在想着改到C下来写,我新装了codegen version 6.1.0,库、头文件都设置好,复制例程中的 2806x_sin.cla 文件到工程中,编译结果出现以下问题:

1. Cla1Regs.MVECT1 = ((Uint16)Cla1Task1 – (Uint16)&Cla1Prog_Start); 提示 Cla1Prog_Start 找不到,extern Uint16 Cla1Prog_Start;这句我有,但是不知道Cla1Prog_Start 原始怎么定义的,我想可能是在.cla文件编译过程的汇编文件中吧,顺带问一下怎么能看到编译过程中生成的asm文件。

2. extern cregister volatile unsigned int IFR; 对这一句提示两个错误,cregister is not allowed on this declaration 和 unrecognized cregister name 'IFR' 。

3. 我发现codegen version 6.1.0里面没有–cla_support option in theRuntime Model Options,我使用6.0.1版本的时候使能过,现在找不到了。

急!!!请专家大侠逐条解答!!!

Johnson Chen1:

楼主你好!

对于CLA C的项目来说,Cla1Prog_Start是定义在.CMD文件中,而_Cla1funcsRunStart;编译器编译完自动生成.

建议楼主,参考TI 的CLA 的C例程或或者在TI CLA 的C例程上修改,这样会比较容易。

CLA 的支持在Processor Options中选择。

_Cla1Prog_Start = _Cla1funcsRunStart;

以前用汇编做过CLA,由于汇编不怎么会用,现在想着改到C下来写,我新装了codegen version 6.1.0,库、头文件都设置好,复制例程中的 2806x_sin.cla 文件到工程中,编译结果出现以下问题:

1. Cla1Regs.MVECT1 = ((Uint16)Cla1Task1 – (Uint16)&Cla1Prog_Start); 提示 Cla1Prog_Start 找不到,extern Uint16 Cla1Prog_Start;这句我有,但是不知道Cla1Prog_Start 原始怎么定义的,我想可能是在.cla文件编译过程的汇编文件中吧,顺带问一下怎么能看到编译过程中生成的asm文件。

2. extern cregister volatile unsigned int IFR; 对这一句提示两个错误,cregister is not allowed on this declaration 和 unrecognized cregister name 'IFR' 。

3. 我发现codegen version 6.1.0里面没有–cla_support option in theRuntime Model Options,我使用6.0.1版本的时候使能过,现在找不到了。

急!!!请专家大侠逐条解答!!!

jinwei guo1:

回复 Johnson Chen1:

extern cregister volatile unsigned int IFR; 对这一句提示两个错误,cregister is not allowed on this declaration 和 unrecognized cregister name 'IFR这一句呢!

还有我就是参考TI 的CLA 的C例程,在TI CLA 的C例程上没有28035只有28069的!

以前用汇编做过CLA,由于汇编不怎么会用,现在想着改到C下来写,我新装了codegen version 6.1.0,库、头文件都设置好,复制例程中的 2806x_sin.cla 文件到工程中,编译结果出现以下问题:

1. Cla1Regs.MVECT1 = ((Uint16)Cla1Task1 – (Uint16)&Cla1Prog_Start); 提示 Cla1Prog_Start 找不到,extern Uint16 Cla1Prog_Start;这句我有,但是不知道Cla1Prog_Start 原始怎么定义的,我想可能是在.cla文件编译过程的汇编文件中吧,顺带问一下怎么能看到编译过程中生成的asm文件。

2. extern cregister volatile unsigned int IFR; 对这一句提示两个错误,cregister is not allowed on this declaration 和 unrecognized cregister name 'IFR' 。

3. 我发现codegen version 6.1.0里面没有–cla_support option in theRuntime Model Options,我使用6.0.1版本的时候使能过,现在找不到了。

急!!!请专家大侠逐条解答!!!

jinwei guo1:

回复 jinwei guo1:

Cla1Prog :  LOAD = FLASHD,                     RUN = RAML3,                     LOAD_START(_Cla1funcsLoadStart),                     LOAD_END(_Cla1funcsLoadEnd),                     RUN_START(_Cla1funcsRunStart),                     LOAD_SIZE(_Cla1funcsLoadSize),                     PAGE = 0

这是CMD文件中的定义,里面没有_Cla1Prog_Start,而以前我用汇编的时候汇编里有这样的定义!

.sect "Cla1Prog"_Cla1Prog_Start .align 2

所以我还是觉得实在  .cla 文件编译后的asm文件里面的,我怎么才能看到CCS4编译C文件过程中生成的asm文件呢!

以前用汇编做过CLA,由于汇编不怎么会用,现在想着改到C下来写,我新装了codegen version 6.1.0,库、头文件都设置好,复制例程中的 2806x_sin.cla 文件到工程中,编译结果出现以下问题:

1. Cla1Regs.MVECT1 = ((Uint16)Cla1Task1 – (Uint16)&Cla1Prog_Start); 提示 Cla1Prog_Start 找不到,extern Uint16 Cla1Prog_Start;这句我有,但是不知道Cla1Prog_Start 原始怎么定义的,我想可能是在.cla文件编译过程的汇编文件中吧,顺带问一下怎么能看到编译过程中生成的asm文件。

2. extern cregister volatile unsigned int IFR; 对这一句提示两个错误,cregister is not allowed on this declaration 和 unrecognized cregister name 'IFR' 。

3. 我发现codegen version 6.1.0里面没有–cla_support option in theRuntime Model Options,我使用6.0.1版本的时候使能过,现在找不到了。

急!!!请专家大侠逐条解答!!!

Yanbin Zhao:

回复 jinwei guo1:

因为CLA编译器不支持cregister关键字,如果你的*.cla文件的头文件申明部分含有DSP2803x_Project.h或DSP2803x_Device.h的话,CLA编译器在展开此头文件的过程中,会在DSP2803x_Device.h里发现如下语句,进而报错:extern cregister volatile unsigned int IFR;extern cregister volatile unsigned int IER;

一、我的建议是建立合理的软件项目结构和模块分类,CLA协处理器相关的c和h文件不要和DSP主核程序的c和h文件交叉使用,*.cla文件的头文件申明部分只含有和CLA程序相关的头文件,不要包含DSP2803x_Project.h或DSP2803x_Device.h。

二、如果一定要包含,又不想引起编译错误,可以使用宏定义的方法:

在DSP2803x_Device.h中更改定义: #ifndef CLA_FILEextern cregister volatile unsigned int IFR;extern cregister volatile unsigned int IER;#endif
而在*.cla中这样申明头文件:#ifndef CLA_FILE#define CLA_FILE#include "DSP28x_Device.h"//REMARK: #undef and #endif is added since CLA Compiler doesn't allow cregister keyword.#undef CLA_FILE#endif 

这样的话,编译器在展开*.cla中的头文件DSP28x_Device.h之前先定义了宏CLA_FILE,在展开DSP28x_Device.h时就会忽略其中含有cregister的语句,在完成展开DSP28x_Device.h之后又会清除宏CLA_FILE的定义,不会对其他c文件中申明DSP28x_Device.h造成任何影响。

以前用汇编做过CLA,由于汇编不怎么会用,现在想着改到C下来写,我新装了codegen version 6.1.0,库、头文件都设置好,复制例程中的 2806x_sin.cla 文件到工程中,编译结果出现以下问题:

1. Cla1Regs.MVECT1 = ((Uint16)Cla1Task1 – (Uint16)&Cla1Prog_Start); 提示 Cla1Prog_Start 找不到,extern Uint16 Cla1Prog_Start;这句我有,但是不知道Cla1Prog_Start 原始怎么定义的,我想可能是在.cla文件编译过程的汇编文件中吧,顺带问一下怎么能看到编译过程中生成的asm文件。

2. extern cregister volatile unsigned int IFR; 对这一句提示两个错误,cregister is not allowed on this declaration 和 unrecognized cregister name 'IFR' 。

3. 我发现codegen version 6.1.0里面没有–cla_support option in theRuntime Model Options,我使用6.0.1版本的时候使能过,现在找不到了。

急!!!请专家大侠逐条解答!!!

Yanbin Zhao:

回复 Yanbin Zhao:

今天更新了driver,从CLA例程里发现,其实,在头文件”DSP28x_Project.h“里,把头文件“DSP2803x_Cla_typedefs.h“前置到”DSP2803x_Device.h“之前,即可简易地解决该问题。

因为在头文件“DSP2803x_Cla_typedefs.h“里有这样的定义

#ifndef __TMS320C28XX__#define __cregister#endif

这里定义了关键字"__cregister",这样的话,后面的头文件”DSP2803x_Device.h“中的寄存器定义语句

extern __cregister volatile unsigned int IFR;extern __cregister volatile unsigned int IER;

就不会出错了。

赞(0)
未经允许不得转载:TI中文支持网 » F28035我新装了codegen version 6.1.0想用C
分享到: 更多 (0)