`
xiaoer_1982
  • 浏览: 1865280 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Vdsp(bf561)中的浮点运算(15):vdsp库的一个BUG

阅读更多

快乐虾

http://blog.csdn.net/lights_joy/

lights@hb165.com

本文适用于

ADSP-BF561

Visual DSP++ 5.0 (update 6)

Vdsp dual processor simulate

欢迎转载,但请保留作者信息

在写完fract除法之后,偶然发现在vdsp的一个头文件中提供了fract16除法运算的函数,这个文件就是VisualDSP 5.0\Blackfin\include\fract_math.h

/* Produces a result which is the fractional division of f1 by f2. Not a builtin

* as written in C code. */

#pragma inline

#pragma always_inline

static fract16 div_s(fract16 _a, fract16 _b) {

int x = (int)_a;

int y = (int)_b;

fract16 rtn;

int i;

int aq;

if (x==0) {

rtn = 0;

}

else if (x>=y) {

rtn = 0x7fff;

}

else {

x <<= 16;

x = divs(x, y, &aq);

for (i=0; i<15; i++) {

x = divq(x, y, &aq);

}

rtn = (fract16) x;

}

return rtn;

}

这个内联函数和vdsp文档中提供的示例函数完全一样,也就是说,它存在一个《Vdsp(bf561)中的浮点运算(14):fract16除法》中提到的缺陷,如果你用它计算一个正的小数和一个负的小数的除法,它将毫不客气地返回1

比如用它计算 0.2 / -0.4,这个是不应该出现饱和的!

出现这个问题的原因在于

int x = (int)_a;

int y = (int)_b;

然后就进行了xy的比较,由于进行的是整数的比较,正数显然永远大于负数,所以就造成了这样的问题。

0.2 / -0.4为例:

0.2转换为以十六进制表示的数为0x1999,而-0.4则为0xCCCC,当这两个值赋给xy后分别变成了0x000019990xffffcccc,也就是6553-13108,哈哈,正数大于负数,小学生都知道!

期待下一个update可以修正。

1 参考资料

Vdsp(bf561)中的浮点运算(14):fract16除法(2009-8-18)

Vdsp(bf561)中的浮点运算(13):fract16乘法运算(2009-8-18)

Vdsp(bf561)中的浮点运算(12):fract16加减运算(2009-8-17)

Vdsp(bf561)中的浮点运算(11):fract16float的转换(2009-8-17)

Vdsp(bf561)中的浮点运算(10):fract16类型表示(2009-8-17)

Vdsp(bf561)中的浮点运算(9):long doublefloat的比较(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-1.1.6 for vdsp(bf561)

    u-boot-1.1.6是该软件的一个特定版本,专为Blackfin系列的VDSP(Visual Digital Signal Processing)处理器优化,尤其是BF561型号。BF561是一款双核、高性能的数字信号处理器,适合于复杂的实时信号处理应用。 在BF...

    uclinux-2008r1到vdsp5(bf561)的移植记录_v0.1

    ### uclinux-2008r1-rc8到VDSP5 (bf561)的移植知识点 #### 1. 前言 - **目标**:本移植项目旨在将uclinux-2008r1-rc8内核从bf561处理器移植到VDSP5平台上。 - **原则**:遵循uCLinux移植的基本原则,确保移植后的...

    uboot_bf537_vdsp

    描述中的"修改后的在我的另外一个资源里面"提示我们,作者已经解决了原始版本的bug,并提供了修正后的版本。这意味着,如果需要一个无bug的UBOOT_BF537,需要寻找作者的其他资源。这可能是一个单独的压缩包、GitHub...

    u-boot-1.1.6-2008R1到vdsp5(bf561)的移植记录_v0.1

    ### u-boot-1.1.6-2008R1到VDSP5 (bf561) 的移植记录 #### 1.1 #if 在进行u-boot移植的过程中,遇到的第一个问题是关于`#if`预处理器指令的问题。具体来说,在`u-boot-1.1.6-2008R1\include\configs\bf561-ezkit.h`...

    编译器VDSP_v0.1

    #### 五、VDSP 4.5(BF561)中的CPLB - **LDF配置**: 配置LDF文件以支持CPLB。 - **缓存空间定义**: 定义要缓存的空间。 - ***_basiccrt.s**: 更新`*_basiccrt.s`文件以支持CPLB操作。 - **错误处理**: 处理可能出现...

    uboot_bf537_VDSP++5.0

    uboot_bf537_VDSP++5.0是针对ADI公司的Blackfin(BF537)处理器设计的一个特定版本的U-Boot引导加载程序。U-Boot是一款广泛应用在嵌入式系统的开源启动加载器,它为系统提供了初始化硬件、加载操作系统内核以及执行...

    如何在VDSP下生成和调用DSP库

    通过以上步骤,我们不仅学会了如何在VisualDSP++环境中创建和编译基于C语言的DSP库文件(*.dlb),而且还学会了如何在一个标准的应用程序中调用这些库文件。这种方法不仅适用于Blackfin处理器,也适用于其他ADI处理器...

    vdsp查表法

    查表法的基本思想是预先计算一系列函数值并存储在一个数组中,当需要计算某个函数值时,直接从表中查找即可,避免了复杂的数学运算,从而大大提高了计算速度。 #### 三、vdsp中的C语言编程实践 本案例展示了如何在...

    Intro_to_VDSP_transcript

    Visual DSP++ 提供了一个集成开发环境(IDE),包括源代码编辑器、编译器、链接器、调试器以及性能分析工具。它的用户界面友好,支持多种编程语言,如C、C++和ADSP汇编语言,便于开发人员根据项目需求选择合适的方式...

    uboot_bf537_VDSP5.0++

    这是在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 -...

    u-boot-1.1.6-2008R1-vdsp

    本文将详细探讨一个重要的嵌入式系统组件——u-boot在VDSP(Vector Digital Signal Processor)架构下的移植过程,特别是针对u-boot-1.1.6-2008R1版本。这个版本的u-boot是嵌入式系统启动过程中的关键组件,它负责...

    VDSP软件说明

    VDSP软件说明。对于visual dsp++软件的介绍,以及如何创建工程等的介绍

    uclinux-2.6 for vdsp4.5

    这是将uclinux-2.6 for bf561的内核移植到Visual DSP 4.5下的工程文件。由于csdn空间限制,删除了... 或者也可以在https://sourceforge.net/projects/vdsp-uclinux/下载到一个完整的压缩包,不过速度较慢。

    BDMA.zip_BDMA_VDSP_dma_字节内存

    标题中的“BDMA.zip_BDMA_VDSP_dma_字节...总的来说,这个程序展示了如何在VDSP系统中利用BDMA进行高效的数据传输,这是数字信号处理系统中不可或缺的一部分。理解和掌握这些概念对于从事相关领域的开发工作至关重要。

    Vdsp LDF文件格式详解

    在ADI (Analog Devices Inc.) 的Blackfin系列处理器中,`.ldf`(Linker Description File)是一种非常重要的文件类型,它主要用于描述链接器如何处理特定的应用程序,包括但不限于内存布局、库文件的选择以及各种...

    rootfs for uclinux

    本文将深入探讨与uclinux-2.6(bf561)版本配合使用的根文件系统(rootfs)及其核心知识点,以及如何将ext2文件系统集成到VDSP(BF561)处理器中。 首先,根文件系统(rootfs)是Linux系统启动时必须的文件集合,它包含了...

    idma.zip_VDSP++5.0百度云_pleasantb4s

    4. **集成开发环境(IDE)**:VDSP++5.0的IDE提供了一体化的开发界面,集成了项目管理、源代码编辑、调试和构建等功能,为开发者提供了一个高效的工作平台。 在描述中提到的“在VDSP++5.0下调试通过”表明,相关...

    uboot1.60429.rar_uboot bf561

    本源码是uboot在bf537芯片上的移植,它是在vdsp++5.0环境下编译的,支持uboot绝大部分常用的命令,方便剪裁

    bfin-uboot-2009r1-rc3

    标题“bfin-uboot-2009r1-rc3”指的是一个特定版本的U-Boot固件,这是嵌入式系统中常见的引导加载程序。2009r1-rc3代表了该版本是2009年第一版的第三个候选发布版本,通常在正式版本发布前进行测试和调试。U-Boot是...

    CS8900A_Test.rar_VDSP_cs8900_cs8900 s3c44b0_cs8900a_lan91c111 f

    CS8900测试文件(整个工程) 环境:VDSP4.0

Global site tag (gtag.js) - Google Analytics