4.代码与化简
为了提高速度,MATLAB中加入的很多用域代码都可以去掉,这里一条一条来说。
a) 在real-time workshop中的Debug,取消所有选项。
b) 在real-time workshop中的interface中Taarget Function library 选择Ti C28x(ISO),support里面只选floating-point number,Code interface里面仅选Single output/update function,下面的全部不选或者是None。
c) Code style 中 Parentheses level 选择 minimum,下面的都不选
d) Embedded IDE Link CC中Build action我喜欢选creat project,code generation 中都不选,选了实时性也好像差不多。
修改MATLAB代码提速
烧进FLASH后,就算系统是150M,Matlab默认的程序运行起来速度不怎么样,这是因为FLASH的速度这的不怎么样。仔细看看MATLAB生成程序,原来要放到RAM跑的ramfuncs段根本就没有放进去,里面包括FLASH初始化和一个汇编语言的循环延迟程序。我不知道各位的MATLAB怎样,但是我的好像就没有放进RAM。如果系统在135M跑,时间应该是不对的。
为了将程序运行速度提速,我这里给出两个方法。
方法1:
直接从FLASH中运行提高FLASH的运行速度,修改实例见
“D:\works\matlabf\CCSLink\MOSFET_drv\DRV_FLASH_spd_up”下的工程文件
1. 修改main()函数将ramfuncs拷贝至H0,并运行FLASH初始化程序
在含有main()函数的文件中添加
#include <string.h>
和
void InitFlash(void);
在main()函数内对内存块进行拷贝,尽量靠近前面
memcpy( &RamfuncsRunStart,
&RamfuncsLoadStart,
&RamfuncsLoadEnd - &RamfuncsLoadStart);
添加FLASH初始化程序
InitFlash();
2. 修改DSP281x_SysCtrl.c文件,缩短FLASH读取指令周期
FlashRegs.FBANKWAIT.bit.RANDWAIT最小值为1,默认值为5
//Set the Random Waitstate for the Flash // org =5 opt= 1
FlashRegs.FBANKWAIT.bit.RANDWAIT = 1;
FlashRegs.FBANKWAIT.bit.PAGEWAIT 最小值为0,默认值为5
//Set the Paged Waitstate for the Flash // org =5 opt= 0
FlashRegs.FBANKWAIT.bit.PAGEWAIT = 0;
其余程序不用修改,编译运行,程序运行速度会得到大幅提升,速度提升2倍左右。
方法2:
将FLASH中部分程序或者全部程序复制到ExtRAM或者RAM_H0中运行,例子程序在D:\works\matlabf\CCSLink\MOSFET_drv\DRV_FLH_ExtRAM\DRV_sigFLASH.pjt
1. 拷贝并修改boot_copy.asm文件,如需全部从RAM中运行则取消所有注释
修改时需注意两个部分,首先修改变量声明
.global _text_loadstart, _text_runstart, _text_size
修改内存拷贝过程中的相应变量
MOVL XAR5,#_ramfuncs_size ; Store Section Size in XAR5
MOVL ACC,@XAR5 ; Move Section Size to ACC
MOVL XAR6,#_ramfuncs_loadstart ; Store Load Starting Address in XAR6
MOVL XAR7,#_ramfuncs_runstart ; Store Run Address in XAR7
LCR copy ; Branch to Copy
2. 修改CMD文件中的运行方式和存储方式
.text : LOAD = FLASH, PAGE = 0 /* Load section to Flash */
RUN = ExtRAM, PAGE = 0 /* Run section from RAM */
LOAD_START(_text_loadstart),
RUN_START(_text_runstart),
SIZE(_text_size)
需要注意前面RAM_H0和ExtRAM的PAGE分布;添加wddisable的section声明;sectioncopy的section声明;
3. 将原来的starbanch.asm替换为mycode_startbanch.asm
其中ref. _c_int00被替换为.ref copy_sections
其中的看门狗程序添加段定义.sect "wddisable"
4. 修改zone 6的访问速度
/* Zone 6 Configuration */
XintfRegs.XTIMING6.bit.X2TIMING = 0; // Timing scale factor = 1
XintfRegs.XTIMING6.bit.XSIZE = 3; // Always write as 11b
XintfRegs.XTIMING6.bit.READYMODE = 1;// XREADY is asynchronous
XintfRegs.XTIMING6.bit.USEREADY = 0; // Disable XREADY
XintfRegs.XTIMING6.bit.XRDLEAD = 1; // Read lead time
XintfRegs.XTIMING6.bit.XRDACTIVE = 0;// Read active time org=2
XintfRegs.XTIMING6.bit.XRDTRAIL = 0; // Read trail time
XintfRegs.XTIMING6.bit.XWRLEAD = 1; // Write lead time
XintfRegs.XTIMING6.bit.XWRACTIVE = 0;// Write active time org = 2
XintfRegs.XTIMING6.bit.XWRTRAIL = 0; // Write trail time |