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.
如上图所示,我在配置工具中使能了FPUfastRTS快速计算库,我本意是想用一下快速开根号的函数float32_t sqrtf(),图中右边c2000_libraries.h中分别调用fastrts.h, math.h, fpu32/C28x_FPU_FastRTS.h, C28x_FPU_FastRTS.h这四个头文件,于是我在程序中调用了生成的函数如下图所示,当然前提我已经把需要的头文件以及库函数连接到工程里了,如下图右图所示,同时我设置调用库有优先级模式
之后我编译程序,查看.map文件观察函数调用情况,如下图所示,可以看到rts2800_fppu32_fast_suplement快速库中只用了div_f32.obj, 而没有sqrt_f32.obj,也就是说只用了快速除法(代码里面有除法),而没有用快速开根号,这是为什么,
另外可以看到我输出的是ELF文件,当我输出COFF文件时也会报错,显示
但是不应该呀,因为我调用的都是链接库,应该会自己调用coff格式的库的,即使我调用的时候直接用coff格式的库时还是会报这样的错,这是为什么呀,很急
这两个问题是我设置不规范的原因么
你好,感谢您对TI产品的关注!为更加有效地解决您的问题,由于问题比较复杂,我需要询问更了解这款芯片的TI资深工程师,再为您解答,一旦得到回复会立即回复给您。
你好,
之后我编译程序,查看.map文件观察函数调用情况,如下图所示,可以看到rts2800_fppu32_fast_suplement快速库中只用了div_f32.obj, 而没有sqrt_f32.obj,也就是说只用了快速除法(代码里面有除法),而没有用快速开根号,这是为什么,
我使用 C2000Ware 4.02创建了一个工程、并获得了用于显示 sqrtf 的映射文件。 我认为这应该是显示的函数的名称、因为 FPUfastRTS 库的 sqrt_f32源文件中的函数名为"sqrtf"。 当您运行项目时、是否无法进入正确的函数?
另外可以看到我输出的是ELF文件,当我输出COFF文件时也会报错,显示
我能够使用 COFF 正确构建示例项目、 但是、要正确使用该函数、您必须确保手动包含 COFF 库文件以代替 c2000ware_libraries.cmd.genlibs (由于 C2000Ware 是旧版、因此 SysConfig 中未包含 COFF 库文件)。 您可以在该路径中找到它(C2000Ware_4_02_XX_XX\libraries\math\FPUfastRTS\c28\lib\rts2800_fpu32_fast_fincre_cff.lib)。
你好,SysConfig 应使用 c2000ware_libraries.cmd.genlibs 拉入正确的库文件。 这将引入常规 rts2800_fpu32_fast_supplement.lib 文件、这正是您所要求的。 它是否仍然没有为您调用正确的函数? 您是否已验证 c2000ware_libraries.cmd.genlibs 是否包含在 C2000 Link 项目属性的文件搜索路径中? 如果 c2000ware_libraries.cmd.genlibs 文件包含在库文件输入选项中、那么您是否可以运行该程序并向我展示您的程序调用 sqrtf 的函数? 您可以使用"assembly step into"按钮来获得正确的装配体功能。
你好,由于您使用的是 SysConfig,因此您应该具有以下项目设置,或者如果出于某种原因需要直接路径、至少具有相应的设置。
我其实不太懂assemblystepinto 能干嘛
我指定汇编指令步进的原因是、我认为您尝试运行 FPUfastRTS 库提供的 sqrtf 函数,在这种情况下,唯一的验证方法是查看反汇编中的函数地址,或者只是单步进入函数查看其位置。 您不能使用正常的步入操作因为这会跳过汇编代码、而仅步入我测试过的 C 函数。
我点击上面的assemblystep into ,我的sqrf函数是在control_task.c里面的
如果您尝试使用 FPUfastRTS 库提供的 sqrtf 函数、这是不正确的。 它应该进入库函数的 sqrT_f32.asm 文件。 这意味着您的程序出于某种原因不包含具有正确路径的文件。 验证您的设置是否按照我在上面的图像中所做的设置、您应该能够正确调用 sqrtf 函数。
而我根据快速开根号算法自己写的竟然需要6us,这我很是费解
查看 sqrtf 函数的基准测试、它应该只需要29个系统时钟周期。 如果它运行的是正确的函数、这应该与您看到的时序一致。 我不确定您对此有何疑问。