DSP

DSP学习笔记

2019-07-13 11:25发布

一、 注意ccs输出窗口,出了常用的build输出编译结果,还有其他一些很有用的,如stdout,相当于控制台
二、 汇编语言程序在执行时直接从用户指定入口开始,而C 语言程序在执行时,先要调用C 标准库中的初始化程序(入口标号为“_c_init00”),完成设置之后,才转入用户的主程序main()运行。
三、 线性汇编学习:http://wenku.baidu.com/view/415324a3b0717fd5360cdcaa.html
四、 定点数运算,dsp是通过整数的运算来实现的。因此对于小数,采用Q表示法设定小数点的不同位置。
例如:
void fixed_add(int x, int y)

long temp;
int  z
temp =  y<<(Qx-Qy); 调整x和y到同样的数量级
temp += x;
if ( Qx >= Qz )
{
    z = temp>>(Qx-Qz);
}
else
{
     z = temp<<(Qz-Qx); 调整运算结果到期望的数量级

      
printf("the result of fixed_add was %i ! ",z);
}
void fixed_mul(int x, int y)
{
long temp;
int  z;
temp = (long)x;
z = (temp*y)>>(Qx + Qy - Qz);
printf("the result of fixed_sub was %i ! ", z);
}  
从这里可以看出,采用定点来模拟浮点运算最关键的是要确定数据的定标Q,那么该如何确定呢? 
1. dsp中数据的位宽,一般是16位,具体情况要查看芯片手册
2. 不同定标所能表示的10进制范围,可以制成一张表,方便查询
3. 通过查表就可以确定当前数据的定标Q
例如:16位数据所能表示的有符号数范围是-32768-+32767,(运算法则:浮->定 dx=fx*(2^Q);定->浮 fx=dx/(2^Q))因此可以列表如下


1 注意ccs输出窗口,出了常用的build输出编译结果,还有其他一些很有用的,如stdout,相当于控制台
汇编语言程序在执行时直接从用户指定入口开始,而C 语言程序在执行时,先要调用C 标准库中的初始化程序(入口标号为“_c_init00”),完成设置之后,才转入用户的主程序main()运行。
3 线性汇编学习:http://wenku.baidu.com/view/415324a3b0717fd5360cdcaa.html
4 定点数运算,dsp是通过整数的运算来实现的。因此对于小数,采用Q表示法设定小数点的不同位置。
例如:
void fixed_add(int x, int y)

long temp;
int  z
temp =  y<<(Qx-Qy); 调整x和y到同样的数量级
temp += x;
if ( Qx >= Qz )
{
    z = temp>>(Qx-Qz);
}
else
{
     z = temp<<(Qz-Qx); 调整运算结果到期望的数量级

      
printf("the result of fixed_add was %i ! ",z);
}
void fixed_mul(int x, int y)
{
long temp;
int  z;
temp = (long)x;
z = (temp*y)>>(Qx + Qy - Qz);
printf("the result of fixed_sub was %i ! ", z);
}  
从这里可以看出,采用定点来模拟浮点运算最关键的是要确定数据的定标Q,那么该如何确定呢? 这与两个方面的相关:
1. dsp中数据的位宽,一般是16位,具体情况要查看芯片手册
2. 不同定标所能表示的10进制范围,可以制成一张表,方便查询
3. 通过查表就可以确定当前数据的定标Q
例如:16位数据所能表示的有符号数范围是-32768-+32767,(运算法则:浮->定 dx=fx*(2^Q);定->浮 fx=dx/(2^Q))因此可以列表如下
注意,为了降低

Q表示、S表示及数值范围

Q表示
S表示
十进制数表示范围
Q15
S0.15
-1X0.9999695
Q14
S1.14
-2X1.9999390
Q13
S2.13
-4X3.9998779
Q12
S3.12
-8X7.9997559
Q11
S4.11
-16X15.9995117
Q10
S5.10
-32X31.9990234
Q9
S6.9
-64X63.9980469
Q8
S7.8
-128X127.9960938
Q7
S8.7
-256X255.9921875
Q6
S9.6
-512X511.9804375
Q5
S10.5
-1024X1023.96875
Q4
S11.4
-2048X2047.9375
Q3
S12.3
-4096X4095.875
Q2
S13.2
-8192X8191.75
Q1
S14.1
-16384X16383.5
Q0
S15.0
-32768X32767




因此当我们得到一个浮点数的时候就可以通过上面这张表来确定该数值的阶,同时确定运算结果的数值范围来定结果的阶,这样就可以编制一个合理的算法实现。

[url=]总结:如要采用上面提到的定点运算来处理浮点数,步骤如下:[/url]
1. 通过查表定阶或者确定变量的动态范围,取abs(max)<2^n.阶=15-n
2. 通过浮点->定点的转换将数据转换为定点数 (为了减少截断误差,取整前可以+0.5)
3. 代入函数运算。
具体内容可参考:http://wenku.baidu.com/view/3635384ffe4733687e21aa2e.html
五、常见错误
warning: creating output section .ebss without SECTIONS specification
warning: creating output section .switch without SECTIONS specification
warning: creating output section text without SECTIONS specification
在cmd文件的SECTION段中添加这些段的定义
e.g.         
             .text:    {} > DARAM
             .ebss:    {} > DARAM
             .switch:  {} > DARAM
其中 DARAM 是你在MEMORY段中定义的存储区
warning: entry point symbol _c_int00 undefined
在cmd文件的开头包含库文件
e.g.
              -l rts55x.lib
如果是54系列的就用
              -l rts54x.lib
根据平台不同而不同,如果是6437,就是-l rts64plus.lib,默认的目录在C:CCStudio_v3.3C6000cgtoolslib
http://www.docin.com/p-71323059.html
六、L2RAM指的是DSP的内部SRAM(即二级缓存全部配置为RAM),作用是存储数据和代码,速度比外部RAM快;DDR2是指SDRAM(即外部RAM)。实际上,不论是内部SRAM,还是外部SDRAM,其存储空间地址已被DSP定义好(统一寻址),只需查阅其datasheet便可知道其存储空间。