以前用汇编做过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;
“
就不会出错了。