完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
使用dsPIC33EP512GP,我无法定义大于8191的有符号长数组:有符号长.sed_event_data[8192]_.(“.,.("sample."),address(0x2000));这失败了,错误是“数组‘.sed_event_data’的大小太大”。XC16用户手册第8.7.2节指出,数据指针是16位,因此应该寻址65536字节。是什么原因造成对数组大小的限制?小宇宙
|
|
相关推荐
16个回答
|
|
|
你的照片有多少RAM?
|
|
|
|
|
|
你试过检查内存映射吗?我发现精灵浏览器插件对于这种分析非常有用。
|
|
|
|
|
|
我猜OP的控制器是dsPIC33EP512GP50X,大约有48K字节的RAM,其中45056字节是从0x2000开始的“远”内存。通常,“.”属性和“align”属性足以为DMA等保留RAM。通常使用数组名称作为地址而不是数值。你使用汇编模块需要固定地址吗?
|
|
|
|
|
|
亲爱的尼古拉,我最初没有使用地址属性,但是后来链接器把大数组放在了近RAM中,这意味着需要放在近RAM中的其他变量没有足够的空间。我已经粘贴了适当的映射部分:数据存储器[Origin=0x1000,Length=0xc000]部分:地址对齐间隙总长度(dec)------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------0x12(18)数据0x10e20x10e20x12(18)0x12(18)0x10e20xec(236)bss 0x11ce 0x11ce 0x11ce 0x11ce 0x84(132)0x84(132)数据0xx11252520x1120x1120x1120x1120x1120x125200x12520x260x26(38)bss 0x1278 0x1278 0x4(4)4(4)数据0x127c0x127c0x127c0x127c0x4(4)数据0x2x127c0x2(2)0x2(2)0x2(2)0x2(2(2)0x1280 00x40(64)数据0x12c0 0x62(98)堆0x1322 0x200(512)采样缓冲区0x2000 0x7ffc(32764)使用的总数据存储器(字节): 0x851c(34076)69%对数组长度的限制似乎来自于编译不是链接器
|
|
|
|
|
|
在地址xx8000上有一个边界,由xC16将内存视为“EDS”内存。这是因为为了访问这个空间,必须修改SFR——DSRPAG用于读取,DRWPAG用于写入。在一个数组中,不应该越过该边界,这里似乎是这样的:base:0x2000,size=4*8192d=32768d,所以数组应该是0x9FFFFor大型数组,可以尝试一下o使用基本地址0x8000代替:u eds_signed long.sed_event_data[8192]_.(“.(“sample.”),address(0x8000));此外,编译器/链接器喜欢构建低于0x8000的堆栈,如果用自己的(全局)变量填充该空间则会很困难。
|
|
|
|
|
|
你应该花更多的时间阅读手册。像3.4.4.9节一样,我如何定义一个大阵列。大于32k的对象涉及大量的页面和偏移计算开销。在大多数情况下,将较大的物体溅在半个或多个房间中并使程序决定使用哪一个部件更有效率。
|
|
|
|
|
|
是的,我没有找到这个部分。然而,我读了第十节3.3.2.3非自动可变大小限制,但不能理解它。我已经尝试过-m.-arrays选项,现在允许使用更大的数组,但我不知道可能导致其他什么问题。我正在考虑以23LC10241MbitRAM芯片的形式将外部RAM添加到我的项目中,这将解决这个问题。
|
|
|
|
|
|
除了上一篇文章,我还将生成的反汇编代码与:a)4096个长变量数组以及-m.-arrays选项off和b)10000个长变量数组以及on选项进行了比较。rs:1150: *norm_event_data_in++=Sample_exp..exp.result;0033288082A0MOVnorm_event_data_in,W000332A 809002 MOV 0x1200,W200332C 809013 MOV 0x1202,W300332E BE9802 MOV.D W2,[W0+]0033308882A0MOVW0,norm_event_data_in
|
|
|
|
|
|
代码会失败,因为您使用了错误的指针,可能是错误的数组定义。数组需要在扩展数据空间(EDS)中。数组和指针进入其中需要进行修饰。eds是唯一足够容纳32k对象的RAM空间,而_eds_修饰告诉编译器管理页寄存器以进行访问。
|
|
|
|
|
|
不要只阅读编译器手册。请阅读PICS数据表,看看内存映射是什么。
|
|
|
|
|
|
代码工作良好,数组为10000(40000字节)。如果一个人也使用PSV,肯定只需要使用EDS吗?该设备的数据表和参考手册都同意可以间接寻址64K字节的RAM。MOV指令也将直接处理32 K字。我的数组位于内存映射所定义的正确位置,并由文件寄存器窗口验证。它可以正确地书写和阅读。编译器没有产生任何警告或错误,因此我只能假设使用大数组和-m.-arrays选项的编译是正确的。
|
|
|
|
|
|
在休息几天之后,回到这里,仍然有一些问题:1/-我没有意识到编译器默认启用PSV。正如Flubydust先生正确指出的,这意味着只有第一个32 K RAM可用于读取访问。当编译器将DSWPAG寄存器设置为1时,写入访问似乎正常工作。DSRPAG寄存器设置为200h,这使PSV映射成为可能。这工作正常,对40kbyte数组的读写访问是正确的。3/-我还尝试使用以下声明将大数组定义为EDS:(array.=10000)_eds_signed long.sed_event_data[array.]_._((.("sample."),eds));s为:_eds_signed long*norm_event_data_in,*norm_event_data_out,*norm_event_data_end。数组位于数据存储器的末尾,从33C0h开始,并占据所有EDS页1和页0的一部分。它仍然读取程序存储器而不是32k以上的数据存储器,DSRPAG寄存器设置为200h。我还尝试了没有eds属性的数组声明。这显然没有什么区别。手册对于EDS属性的目的非常混乱。
|
|
|
|
|
|
根据我的帖子,http://www..hip.com/for./m881682.aspxthere有一些问题和陷阱,但是之后一切正常……
|
|
|
|
|
|
亲爱的DarioG,我注意到在你的数组定义中,你的属性是:EDS,空间(EDS),这些是做什么的?手册上说:eds在属性上下文中,eds(扩展数据空间)属性向编译器指示变量将在数据内存中的任何位置分配。具有thisat.ute的变量还可能是_u eds_type限定符(参见第10.7节“扩展数据空间访问”),以便编译器正确地生成正确的访问序列。并不是说_u eds_限定符和eds属性紧密相关,但不相同。在一些设备上,当将变量分配到某些内存空间(如空间(ymemory)或空间(dma)时,可能需要指定eds,因为这个内存只存在于扩展数据空间中。非常混乱!空间(EDS)没有提及。
|
|
|
|
|
|
我成功地使用过大数组。我遇到过单个大数组的问题,所以我将它们分成两个数组,每个数组都在32kB以下。我不得不使用pragma udata将数组放在不同的部分。我的指针没有什么特别的地方。
|
|
|
|
|
|
可能正如JPittenger所说,对于所有的“eds”属性,现在我记不起我是如何遍历它们的——我同意它们可能有些令人困惑。(DSRPAG等),而“space()”实际上将数组分配到eds空间中,即>32K空间。因此,它们都可以*需要,或者*可能*。
|
|
|
|
|
只有小组成员才能发言,加入小组>>
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
473 浏览 0 评论
5793 浏览 9 评论
2334 浏览 8 评论
2224 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3530 浏览 3 评论
1124浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
1098浏览 1评论
我是Microchip 的代理商,有PIC16F1829T-I/SS 技术问题可以咨询我,微信:A-chip-Ti
873浏览 1评论
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
475浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 10:14 , Processed in 1.427036 second(s), Total 102, Slave 85 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1498