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.

28035使用CLAmath时CLA1mathTables这个段能否放到CLA的程序RAML3中?



目前官方库中的例程中,这个段是放在CLARAM1中的,F28035_CLA_C.cmd文件中有以下片段:

GROUP : LOAD = FLASHB,
RUN = CLARAM1,
LOAD_START(_Cla1mathTablesLoadStart),
LOAD_END(_Cla1mathTablesLoadEnd),
RUN_START(_Cla1mathTablesRunStart),
LOAD_SIZE(_Cla1mathTablesLoadSize),
PAGE = 1

{
CLA1mathTables
.const_cla
}

其中FLASHB和CLARAM1都在Page1,也就是数据区。按照一般的设计原则,表格数据运行时都不会修改的,常规做法都是和程序一起放到程序空间。CLARAM1本身只有1k大小,还要存放程序运行时的数据,CLAmath中的表格占用空间很多,相比之下,程序区RAML3大小有4k,要宽裕一些,一般的CLA可执行代码也不会把这里占满。

我尝试过将CLA1mathTables这个段放到CLA的程序存储器RAML3中,需改内容如下。

GROUP : LOAD = FLASHC,
RUN = RAML3,
LOAD_START(_Cla1mathTablesLoadStart),
LOAD_END(_Cla1mathTablesLoadEnd),
RUN_START(_Cla1mathTablesRunStart),
LOAD_SIZE(_Cla1mathTablesLoadSize),
PAGE = 0

{
CLA1mathTables
.const_cla
}

代码正常编译,正常烧录,但是CLAsin()和CLAcos()两个函数均得不到正确结果,说明这样做是不行的。是不是CLA的指令无法从程序空间读取常量?没有仔细看过CLA的寻址方式和汇编指令,无法确认。看了下Type1类型的CLA似乎都已经把这些表格固化到ROM中了,不会占用宝贵的RAM空间,是否说明28035上的Type0 CLA这样设计不是太合理呢?

CLA1mathTables放到CLARAM1数据空间还有一个问题,使用hex2000将输出的.out文件转化成hex文件,Page0和Page1会输出两个文件,后缀分别是.i00和.i10,烧写固件的时候要分别烧录两次,十分不便,看了一下,两个文件完全可以合并,手工合并烧录以后工作也完全正常。hex2000有没有选项把Page0和Page1合并成一个hex文件输出呢?无论CCS设置还是hex2000命令行帮助都没有找到对应选项。