完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
嗨,相当新的PIC24&XC16和我正在实验中放置数据常量在代码与数据空间。我注意到,程序代码大小根据我放置常数的位置而变化;当放置数据段时,程序空间使用较少,这让我感到惊讶。存储在代码/程序空间中的常数的源不是无关紧要的吗,即在选择代码空间和在选择数据时,从代码空间复制到数据空间?还是如此简单,对PSV空间的更“征税”访问是什么增加代码大小?关于哥兰
以上来自于百度翻译 以下为原文 Hi, fairly new to PIC24 & XC16 and I am experimenting with placing data constants in Code vs. Data space. I notice that the Program code size varies depending on where I place constants; less Program space use when placing in Data segment which surprises me. Isn't the source of the constants stored in the Code/Program space regardless, i.e. they get placed in the PSV windows when selecting Code space and are copied from code space to the Data space when selecting Data? Or is it so simple that the more "taxing" access to the PSV space is what is increasing code size? Regards Goran |
|
相关推荐
6个回答
|
|
优化器不可能把它们放在任何地方。我们可以假设Flash使用const。你不是吗?
以上来自于百度翻译 以下为原文 It is possible the optimizer is not putting them anywhere. Can we assume by flash you are using const. and RAM you are not? |
|
|
|
当涉及到常量时,优化被关闭,即“它是什么”,即在两种情况下相同的代码库;到目前为止,主要是用于SPI、IIC、SD卡和USB的MLA以及图形显示处理程序/驱动程序。
以上来自于百度翻译 以下为原文 Optimization is turned off, when it comes to constants it "is what is it is", i.e. same codebase in both cases; so far mostly MLA for SPI, IIC, SD-card and USB and a graphical display handler/driver. |
|
|
|
RAM中的常数是从启动代码中的Flash初始化的。使用每个程序字的所有24位来填充初始化数据,而当映射到PSV窗口中时,每个程序字只有16位是直接可见的。
以上来自于百度翻译 以下为原文 Constants in RAM are initialised from FLASH in the startup code. The initialisation data is packed using all 24 bits of each program word while only 16 bits of each program word is directly visible when mapped into the PSV window. |
|
|
|
RAM中的常数是从启动代码中的Flash初始化的。初始化数据使用每个程序字的所有24位进行打包,而当映射到PSV窗口时,每个程序字的只有16位直接可见。可能就是这样,谢谢!
以上来自于百度翻译 以下为原文 Constants in RAM are initialised from FLASH in the startup code. The initialisation data is packed using all 24 bits of each program word while only 16 bits of each program word is directly visible when mapped into the PSV window. That's probably it, thanks! |
|
|
|
如果你想使用所有的24位,你必须自己滚动。它们是包含24位操作码的16位地址。这里是使用所有24位的例子。
以上来自于百度翻译 以下为原文 You have to roll your own if you want to use all 24bits. They are 16bit addresses that contain 24bit opcodes. Here is an example of using all 24bits. .section eeprom_code,code .globl _eperror err_txt: .pstring "OK" .pstring "NULL_RDBUFFER" .pstring "NULL_WRBUFFER" .pstring "BAD_RD_ADDR" .pstring "BAD_WR_ADDR" .pstring "LEN" .pstring "ADDR_OVERLAP" .pstring "CHIPSIZE" .pstring "BUS_ADDRESS" .pstring "NOT_FOUND" .pstring "SELECT" .pstring "TAKEN" .pstring "NOT_MAPPED" .pstring "SEEK" .pstring "NOTSET_HBUFFER" .pstring "ALIGN_FROW" .pstring "ALIGN_FBLK" .pstring "BAD ERROR CODE" .palign 2 ;---------------------------------------------------- .equ arg_ErrorCode, w0 .equ tmp, w1 .equ char, w2 .equ error, w8 .equ ptr, w9 .equ highbyte, w10 .equ idx, w11 _eperror: ;void eperror(int ErrorCode) ;error in range neg arg_ErrorCode,arg_ErrorCode bra n,$+6 cp arg_ErrorCode,#16 bra le,$+4 mov #17,arg_ErrorCode ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ;extract const error text push.d w8 push.d w10 mov arg_ErrorCode,error clr idx mov #tblpage(err_txt),tmp mov tmp,TBLPAG mov #tbloffset(err_txt),ptr ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ loop: cp idx,#2 bra z,get_hbyte cp0 idx bra nz,$+4 tblrdh.b [ptr],highbyte tblrdl.b [ptr++],char cp0 ptr bra nz,$+4 inc TBLPAG inc idx,idx bra got_char ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ get_hbyte: clr idx mov highbyte,char ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ got_char: cp0 error bra z,chrout cp0.b char bra nz,loop dec error,error bra loop ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ chrout: mov char,w0 cp0.b w0 bra z,exit call _putchar bra loop ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ exit: mov #0xd,w0 call _putchar pop.d w10 pop.d w8 return ;---------------------------------------------------- .end |
|
|
|
谢谢你的密码。我做了一些更多的测试,使用的最小代码空间是数据空间中的常量,所以我会这样做,因为我有它的RAM空间。
以上来自于百度翻译 以下为原文 Thanks for the code. I've done some more testing and the least code space used is with constants in data space so that is what I'll do since I have the RAM space for it. |
|
|
|
只有小组成员才能发言,加入小组>>
5306 浏览 9 评论
2070 浏览 8 评论
1973 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3243 浏览 3 评论
请问电源和晶体值之间有什么关系吗?PIC在正常条件下运行4MHz需要多少电压?
2279 浏览 5 评论
828浏览 1评论
720浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
664浏览 1评论
PIC Kit3出现目标设备ID(00000000)与预期的设备ID(02c20000)不匹配。是什么原因
716浏览 0评论
616浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-26 05:57 , Processed in 2.205652 second(s), Total 87, Slave 71 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号