快乐虾
http://blog.csdn.net/lights_joy/
lights@hb165.com
本文适用于
ADSP-BF561
Visual DSP++ 5.0 (update 6)
Vdsp dual processor simulate
欢迎转载,但请保留作者信息
原来指望能够有div_fr1x16之类的函数来实现fract16的除法,但是很遗憾vdsp居然不直接提供这样的函数,让人颇为尴尬,估计是因为其CPU不直接提供fract除法的缘故。不过vdsp文档里面提供了一个做除法的例子:
fract16 saturating_fract_divide(fract16 nom, fract16 denom)
{
int partialres = (int)nom;
int divisor = (int)denom;
fract16 rtn;
int i;
int aq; /* initial value irrelevant */
if (partialres == 0) {
/* 0/anything gives 0 */
rtn = 0;
} else if (partialres >= divisor) {
/* fract16 values have the range -1.0 <= x < +1.0, */
/* so our result cannot be as high as 1.0. */
/* Therefore, for x/y, if x is larger than y, */
/* saturate the result to positive maximum. */
rtn = 0x7fff;
} else {
/* nom is a 16-bit fractional value, so move */
/* the 16 bits to the top of partialres. */
/* (promote fract16 to fract32) */
partialres <<= 16;
/* initialize sign bit and AQ, via divs(). */
partialres = divs(partialres, divisor, &aq);
/* Update each of the value bits of the partial result */
/* and reset AQ via divq(). */
for (i=0; i<15; i++) {
partialres = divq(partialres, divisor, &aq);
}
rtn = (fract16) partialres;
}
return rtn;
}
这个计算过程在不打开优化的情况下将需要500个cycle,在打开优化之后将只需要42个cycle!相比较于将fract16转换为float进行计算还是要快得多。
但是很显然,例子中给出的这个函数并没有考虑到符号位,比如计算0.2 / -0.4这样的式子时它将直接返回1,因而我们需要对它进行适当的修改。
fract16 saturating_fract_divide(fract16 nom, fract16 denom)
{
int partialres;
int divisor;
fract16 rtn;
int i;
int aq; /* initial value irrelevant */
int sign = (nom ^ denom) & 0x8000;
partialres = abs_fr1x16(nom);
divisor = abs_fr1x16(denom);
if (partialres == 0) {
/* 0/anything gives 0 */
rtn = 0;
} else if (partialres >= divisor) {
/* fract16 values have the range -1.0 <= x < +1.0, */
/* so our result cannot be as high as 1.0. */
/* Therefore, for x/y, if x is larger than y, */
/* saturate the result to positive maximum. */
rtn = 0x7fff;
} else {
/* nom is a 16-bit fractional value, so move */
/* the 16 bits to the top of partialres. */
/* (promote fract16 to fract32) */
partialres <<= 16;
/* initialize sign bit and AQ, via divs(). */
partialres = divs(partialres, divisor, &aq);
/* Update each of the value bits of the partial result */
/* and reset AQ via divq(). */
for (i=0; i<15; i++) {
partialres = divq(partialres, divisor, &aq);
}
rtn = (fract16) (partialres);
if(sign)
rtn = negate_fr1x16(rtn);
}
return rtn;
}
优化之前需要522个cycle,优化之后需要50个cycle。
Vdsp(bf561)中的浮点运算(13):fract16乘法运算(2009-8-18)
Vdsp(bf561)中的浮点运算(12):fract16加减运算(2009-8-17)
Vdsp(bf561)中的浮点运算(11):fract16与float的转换(2009-8-17)
Vdsp(bf561)中的浮点运算(10):fract16类型表示(2009-8-17)
Vdsp(bf561)中的浮点运算(9):long double和float的比较(2009-8-14)
Vdsp(bf561)中的浮点运算(8):float除法运算(2009-8-14)
Vdsp(bf561)中的浮点运算(7):float乘法运算(2009-8-13)
Vdsp(bf561)中的浮点运算(6):float加减运算(2009-8-13)
Vdsp(bf561)中的浮点运算(5):float类型表示总结(2009-8-12)
Vdsp(bf561)中的浮点运算(4):FLT_MAX(2009-8-12)
Vdsp(bf561)中的浮点运算(3):FLT_MIN(2008-12-19)
Vdsp(bf561)中的浮点运算(2):float的疑问(2008-12-18)
Vdsp(bf561)中的浮点运算(1):文档的说法(2008-12-16)
分享到:
相关推荐
这是将u-boot移植到VDSP的工程文件,支持的CPU为bf561,支持NandFlash和NorFlash,支持串口下载,不支持网络功能。
这份文档记录了在vdsp5下移植bfin-uclinux-2008r1-rc8内核的过程。 适用于ADSP-BF561。
这份文档记录了将u-boot-1.1.6移植到VDSP5下编译的过程。 所用的DSP为bf561,对其它blackfin系列的DSP也有一定参考意义。 欢迎转载,但请保留作者信息,谢谢!
在VDSP++上面,编译的UBOOT_BF537,这个文件有bug,修改后的在我的另外一个资源里面
vdsp C语言编程 正弦函数查表法,专门运用于vdsp中。
这是在VDSP5.0++下面编译成功的uboot,支持的命令 base - print or set address offset bootm - boot application image from memory cmp - memory compare cp - memory copy crc32 - checksum calculation erase -...
使用Visual DSP 5.0的一点心得。 使用ADSP-BF561。 仅供参考。
uboot1.16版本,在VDSP++5.0环境下编译,适合bf537,实现了uboot的大部分的命令,功能齐全
VDSP软件说明。对于visual dsp++软件的介绍,以及如何创建工程等的介绍
这是将uclinux-2.6 for bf561的内核移植到Visual DSP 4.5下的工程文件。由于csdn空间限制,删除了Documentation及doj,dlb等中间文件或者无关的内容,请先在http://blackfin.uclinux.org/下载2.6.19.3-ADI-2007R1.1-...
本源码是uboot在bf537芯片上的移植,它是在vdsp++5.0环境下编译的,支持uboot绝大部分常用的命令,方便剪裁
介绍Visual+DSP++开发环境的资料
ADI Blackfin处理器 Vdsp ldf文件格式详解
与uclinux-2.6(bf561) for vdsp配合使用的根文件系统,ext2,使用时将之以hex32的格式插入到_end符号的末尾
这个是将u-boot-1.1.6-2008R1移植到VDSP下的工程文件。 具体移植过程参见本人的BLOG。 http://blog.csdn.net/lights_joy/
本文将通过两个简单的例程来一步一步演示如何在VisualDSP++里创建并调用基于C 语言的DSP库文件(*.dlb)。虽然例程是基于Blackfin 处理器实的,但创建过程和调用方法依然适用于SHARC、TigerSHARC 等ADI 公司的处理器。
适用于ADSP-BF561。使用了优视科技BV561EVB开发板,但仅实现其DM9000的网卡驱动。 由于CSDN空间限制,请分开下载所有的8个rar文件。 也可在http://sf.net/projects/vdsp-uclinux/中下载单个的软件包。
适用于ADSP-BF561。使用了优视科技BV561EVB开发板,但仅实现其DM9000的网卡驱动。 由于CSDN空间限制,请分开下载所有的8个rar文件。 也可在http://sf.net/projects/vdsp-uclinux/中下载单个的软件包。
适用于ADSP-BF561。使用了优视科技BV561EVB开发板,但仅实现其DM9000的网卡驱动。 由于CSDN空间限制,请分开下载所有的8个rar文件。 也可在http://sf.net/projects/vdsp-uclinux/中下载单个的软件包。
适用于ADSP-BF561。使用了优视科技BV561EVB开发板,但仅实现其DM9000的网卡驱动。 由于CSDN空间限制,请分开下载所有的8个rar文件。 也可在http://sf.net/projects/vdsp-uclinux/中下载单个的软件包。