完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我在使用MPLAB X IDE v3.45和XC8 v1.38编译器时,在使用宏#define时遇到了一种奇怪的行为。版本2则数据存储器=87字节,程序存储器=3566个字。分别有7字节和221个字。为什么会发生这种情况?我是否错过了有关使用μ定义和宏(宏中的宏)的一些事情?由于#define由预处理器使用,所以我的印象是,在两种情况下,预处理器都将向编译器提供最终的算术值(在主程序中对算术值的简单分配)。
|
|
相关推荐
9个回答
|
|
从版本2开始,有一行额外的代码。预处理器不能读取ADCON0位的状态,也不能读取任何其他运行时变量。所有宏都生成代码,而不是常数。
|
|
|
|
如果你真的想知道发生了什么:打开预处理代码的输出!如果你看到以前没有预料到的事情,试着去理解“为什么”。通常,预处理器是正确的,而且您的期望被夸大了……顺便问一下:您知道宏实现了显著的截断“错误”吗?
|
|
|
|
初始化ADC时,我设置值ADCON0bits.ADRMD=1(或0),因此在预处理器中预先知道表达式“((ADCON0bits.ADRMD)”的最终结果。(256/24):(1024/24)。还是这样不行?除此之外,宏在两种情况下都产生常数(简单划分的结果)。版本2的唯一不同之处在于,我在另一个宏(例如,CutOffVol.LevelNorm1)中使用宏(例如,CutOffVol.Level)。这可以做吗?关于版本2,您说得对,它有一行额外的代码,但是它不能证明内存占用有这么大的差异。
|
|
|
|
我如何打开预处理代码的MPLABIT输出?我知道宏引入的错误。我不想使用“长”变量。
|
|
|
|
…它不以这种方式工作……预处理器基于符号列表(NAME对,‘VALUE’)——它不跟踪内存单元格的内容。如果您想手动优化,可以:set...ADRMD依赖于符号常数(例如,C_LOWRES)并在宏中对同一符号进行测试。Re:outpu预处理代码的t:请查看编译器文档(或检查选项),因为我不太清楚。Re:截断错误:将一半除数加到除数中(a/b(a+(b>>1)/b)实现舍入,而不管大小如何。这通常比截断更好。你只需要关心数值溢出。带符号NukBER的舍入仅稍微复杂一些(Add RESP)。减去(b & gt;gt;1)-取决于A的符号)。
|
|
|
|
正如已经说过的,你的所有定义都是生成代码的。也就是说,由于ADRMD是一个易失性位变量,所以对它的每个实例进行测试和评估。你们所有人?生成IF代码,而不是文字常量。
|
|
|
|
这个网络研讨会有关于预处理器操作的信息,可能有些帮助。关于版本2,您说得对,它有一行额外的代码,但是它不能证明内存占用有这么大的差异。请检查程序集列表文件,它是典型的如果使用X IDE,默认情况下会产生LLY。它将有一个.lst扩展,您可以在Files选项卡list/default/[debug|.]下根据您执行的构建类型找到它。它将显示为每个C语句生成的程序集,并且用户指南中的第6.4节ASSEMBLY LIST文件具有关于该文件包含什么的信息。不要惊讶地发现,在一个位置添加或更改代码会影响其他地方生成的代码;这是beast.Jeff的本质。
|
|
|
|
这样不行!它是一个“C预处理器”。它和C规格要求一样聪明,不像你想做的那么聪明。
|
|
|
|
不,你不需要。你叫编译器在运行时生成代码来完成它。不,你不需要C编码101或者为哑人编程。
|
|
|
|
只有小组成员才能发言,加入小组>>
5231 浏览 9 评论
2026 浏览 8 评论
1950 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3200 浏览 3 评论
请问电源和晶体值之间有什么关系吗?PIC在正常条件下运行4MHz需要多少电压?
2253 浏览 5 评论
771浏览 1评论
659浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
588浏览 1评论
PIC Kit3出现目标设备ID(00000000)与预期的设备ID(02c20000)不匹配。是什么原因
669浏览 0评论
571浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-19 11:04 , Processed in 1.586245 second(s), Total 93, Slave 76 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号