1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
大家好。在我的源代码中,我使用“assert”预处理器指令来检查常量值的一致性。如果我以简单的方式使用它,通过直接赋值,一切如预期:define ABC 0x7Fassert ABC<=0x7Fhere,当ABC定义得大于0x7F时,编译器抛出N错误:好!但是,当我试图在稍微复杂一点的方案中使用该指令时,如以下所示,它并不如预期的那样工作:define VREF 5.0define ADC_SIZE 0x3FFdefine V_TO_A 1.8293define ITo10BitADC(i)((in t)((V_TO_A*i*ADC_SIZE/VREF)+0.5)define OVRCUR_PEAK ITo10BitADC(1.0)assert OVRCUR_A_i这里我需要检查作为常量参数放置的内容是否落在可能值的正确范围之内。结构可能看起来很复杂,但是能够很好地管理所有涉及的参数。通过其他方法,值是正确的,软件操作如下可以预料,只有“#assert”指令似乎无法处理嵌套的定义。我已经试着将括号放在几乎任何地方,但没有用……还尝试了对更复杂的定义:#define ITo10BitADC(i)((int)((float)i*ADC_SIZE*V_TO_A/VREF)+0的另一种转换。(5)…还试着把传球传给小学生,但老实说,那一刻我头疼得厉害,无论如何也没成功……。你能建议一下问题在哪里吗?谢谢您。
|
|
相关推荐
3个回答
|
|
我不是100%积极,但我不认为预处理器可以处理浮点值。
|
|
|
|
谢谢你的答复。所以在我的例子中,使用浮点来减少错误(以及随后的返回int)使得检查变得不可能……您认为这在编译器的预处理器中很常见,还是MPLABX中的XC8就是这种情况?再次感谢。
|
|
|
|
我曾多次遇到过这个问题……基本问题是C预处理器只知道非常有限的一类表达式,通常是那些可以在编译时用整数算术计算的表达式,并且没有像表达式这样的标准东西可以杀死li。如果象您这样的表达式表明了这一点,则运行nk。我怀疑#assert可能在某个时候将其变成C标准;如果没有,则很容易转换成if...。谬误“常错!”...#endif.,在标准库中有一个运行时assert()宏,问题是在碰到嵌入式PIC或其他CPU时该怎么做。此外,如果愿意,可以在程序开始时找到测试函数和常量的方法,如果出现问题,则命中断点。但是,所有这些对于环境的假设比C标准愿意做的更多。最后,对于您正在处理的问题……将整数A数据转换为D数据到一些工程单元时,使用相对慢的浮点会破坏您可能从宏获得的任何速度优势,并且宏会在使用的每个地方重新扩展。在这种情况下,我将使用定点,并把小数点左右移动,以便得到相同的东西。在您的示例中,我将不讨论1.0A,我将讨论1000mA,并且当我写下它时,我为该源工作的所有数据都将被缩放为1000mA,可能在运行时(通常在初始化时)缩放为A到D计数。#定义ITo10BitADC(i)ITo10BitADC(i)((int)((int)((V_TO_A.*V*i.*ADC_SIZE/VREF.*ADC_SI/VC_SIZE/VC.*A*I.*ADC_ADC_ADC_ADC_ADC_ADC_ADC_ADC_ADC_ADC_ADC_ADC_ADC_ADC_ADC_ADC_ADC_ADC_ADC_SISIZE/VAK ITOOOAKITOOOOOOOAKITO10BiITO10Bi10BiIT10BiBiBiBiTADADADC(1.5))\\ts_at_1000mA1829UL//实际上没有更多的精度a this...#definitionOvercurr_Milliamps 1000UL//UL正在使用,因为它if(OverCurr_Milliamps*Millivolts_at_1000mA/1000UL>VREF)error“Overcurr_Milliamps太大!”第二节
|
|
|
|
只有小组成员才能发言,加入小组>>
5238 浏览 9 评论
2028 浏览 8 评论
1950 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3204 浏览 3 评论
请问电源和晶体值之间有什么关系吗?PIC在正常条件下运行4MHz需要多少电压?
2253 浏览 5 评论
774浏览 1评论
664浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
592浏览 1评论
PIC Kit3出现目标设备ID(00000000)与预期的设备ID(02c20000)不匹配。是什么原因
674浏览 0评论
574浏览 0评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 20:11 , Processed in 1.394200 second(s), Total 80, Slave 64 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号