1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
本帖最后由 一只耳朵怪 于 2018-6-12 11:31 编辑
IQmath : > FLASHCD, PAGE = 0 /* Math Code */ IQmathTables : > BOOTROM, PAGE = 0, TYPE = NOLOAD /* Math Tables In BOOTROM */ IQmathTablesRam : LOAD = FLASHGH, PAGE = 1 RUN = RAML1H0, PAGE = 1 LOAD_START(_IQmathTablesRamLoadStart), LOAD_END(_IQmathTablesRamLoadEnd), RUN_START(_IQmathTablesRamRunStart) 请问: 1. IQmath 、IQmathTables和 IQmathTablesRam三个段是在哪里定义的?是C自带段吗? 2. IQmathTablesRam : LOAD = FLASHGH, PAGE = 1 RUN = RAML1H0, PAGE = 1 LOAD_START(_IQmathTablesRamLoadStart), LOAD_END(_IQmathTablesRamLoadEnd), RUN_START(_IQmathTablesRamRunStart) 其中:我在DSP280x_GlobalPrototypes.h中定义了 extern Uint16 RamfuncsLoadStart; extern Uint16 RamfuncsLoadEnd; extern Uint16 RamfuncsRunStart; extern Uint16 IQmathTablesRamLoadStart; extern Uint16 IQmathTablesRamLoadEnd; extern Uint16 IQmathTablesRamRunStart; 正确否? 3. 在IQmath_Quickstart.pdf文档中有说: Add the boot ROM symbol library (for example: 2802x_IQmath_BootROMSymbols.lib) and the standard IQmath.lib library to the project using Project->Add Files to Project. 请问2802x_IQmath_BootROMSymbols.lib是做什么的?我的是2809.我在工程的library里面只添加了 IQmath.lib和rts2800_ml.lib,正确否? 4. 在IQmathLib.h里面有下面定义: typedef long _iq; 为什么用_iq定义一个IQ格式的变量,会默认为GLOBAL_Q的IQ格式?_iq与GLOBAL_Q是怎样衔接的? 5. IQ小数提取函数: _iqN _IQNfrac( _iqN A) ,它在IQmathLib.h中声明的时候用的是extern long _IQNint(long A); 为什么不用_iqN? 或者说它在定义时 long _IQNint(long A);为什么不用long? |
|
相关推荐
5个回答
|
|
Haypin,
1. IQmath 、IQmathTables和 IQmathTablesRam就是在cmd中定义的。定义了三个段,一些给编译器编译库的时候用,一些给你工程上用,比如IQmathTableRam. 2. 正确,其实可以理解为,这些变量在cmd中定义了,哪里要用到它,哪里就要加外部变量声明,一般在main.c中加这些声明,因为用在memcpy中。 3. 对,你应该要添加IQmath.lib实体库,对于F2802x, 是因为在这些芯片的ROM中就已经有了一些IQmath的函数,所以只要加载符号symbol,让编译器知道就行了。而280x 的ROM中没有IQmath函数,所以所有的函数都要从IQmath.lib中获得。 4. 至于_iq,你可以看到_iqxx的定义都是一样的,都是一个long型,所以我觉得这里没有什么关系。 比如doc中就有例子: _iq input, sin_out; //其实这里只是定义了long的两个变量 input=_IQ29(0.25*PI); //关键是这里,这才是决定input到底是IQ24,还是IQ29 sin_out =_IQ29sin(input); Eric - ERIC |
|
|
|
guigui_7044 发表于 2018-6-11 01:13 Eric老师: 我说错了一个问题,是 IQmath 、IQmathTables和 IQmathTablesRam是怎么使用的,而不是怎样定义的(其实我对在cmd文件中“定义”这个概念的理解也不清晰,从cmd文件中看出,这个定义的作用其实就是把段分配到某一段空间,而这些段真正是在哪里定义的?我却很疑惑.如在cmd中,.text的.text : > FLASHAB, PAGE = 0并不是对.text的定义,而是分配段空间.而.text段是c的自带段,是已经在内部定义好的.而ramfuncs)。 如我在cmd中定义了如codestart和ramfuncs两个段: codestart : >BEGIN, PAGE = 0 ramfuncs : >FLASHD, PAGE = 0 在使用时利用 .sect "codestart" .sect "ramfuncs"就可以实现 如在cmd中定义了 ramvars : > RAML0L1H0, PAGE = 1 在使用时利用#pragma DATA_SECTION(pid, "ramvars"); |
|
|
|
guigui_7044 发表于 2018-6-11 01:13 Eric老师, 还有一个问题 5. IQ小数提取函数: _IQNfrac( _iqN A)函数 ,它在IQmathLib.h中声明的时候用的是extern long _IQNint(long A); 我想知道_IQNfrac( _iqN A)函数在定义的时候是返回_iqN还是long还是_iq. 因为我看到IQmath_Quickstart.pdf写是_IQNfrac( _iqN A)函数在定义的时候返回的是_iqN. 因为返回_iqN和long区别很大.而返回long和_iq是一样的. |
|
|
|
rxb88 发表于 2018-6-11 01:30 Haypin, 其实有些段你并不需要用到它,有些是被编译器用的,编译器在编译的时候会把相应内容归到某些段中,然后映射到对应的memory中。如.text段,所有的代码默认编译到该段中,然后映射到.text指向的memory。 但某些段是定义了,让我们在程序中可以灵活使用的,像codestart其实比灵活,应为是固定死的,ramfunc好点。 这些段就是在cmd文件定义的。编译器会识别。你可以用变量来理解它(我一直是这么理解,我认为这样的理解也是对的)。 而IQmath,IQmathTable这些段也是不用用户用到的,这些应该是IQmath.lib中某些函数会用到这些表格,编译器在编译IQmath.lib的时候,自然要找到IQmathTalbe到底在哪里,就从这里找到。 Eric - ERIC |
|
|
|
Haypin, 返回的是_iqN类型的数据,其实它也是long型的,只不过该数据我们在程序中应该知道,需要移N位才能够转换成真正的小数。 如果返回的是_iq,那么它也是long型,但是表示的意思是,需要移位global个位,才能转换成真正的小数。 所以说所有的_iq数据都是long型的,只不过代表的意思不一样,表示移位数据不一样而已,如果要还原需要移位不同的位数而已。 Eric - ERIC |
|
|
|
只有小组成员才能发言,加入小组>>
340 浏览 1 评论
535 浏览 2 评论
NA555DR VCC最低电压需要在5V供电,为什么用3.3V供电搭了个单稳态触发器也使用正常?
781 浏览 3 评论
MSP430F249TPMR出现高温存储后失效了的情况,怎么解决?
655 浏览 1 评论
对于多级放大电路板,在PCB布局中,电源摆放的位置应该注意什么?
1138 浏览 1 评论
AT32F407在USART2 DMA发送数据时,接包接到了要发送的数据,程序还是处于等待传输完成的标识判断中,为什么?
65浏览 29评论
174浏览 23评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
255浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
205浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
60浏览 13评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 08:30 , Processed in 0.567744 second(s), Total 54, Slave 48 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号