定义超过256字节的数组

[复制链接]
 楼主| houcs 发表于 2022-1-3 21:15 | 显示全部楼层 |阅读模式
TI, TE, IO, AN, se
在网上找到了如下说明:
1. The object must be allocated into its own section using the #pragma idata or #pragma udata directive.
    #pragma udata buffer_scn
    static char buffer[0x180];
    #pragma udata
2. Accesses to the object must be done via a pointer.
    char * buf_ptr = &buffer[0];
    ...
    // examples of use
    buf_ptr[5] = 10;
    if (buf_ptr[275] > 127)
    ...
3. A new region that spans multiple banks must be created in the linker script.
Linker script before modification:

    DATABANK NAME=gpr2 START=0x200 END=0x2FF
    DATABANK NAME=gpr3 START=0x300 END=0x3FF
Linker script after modification:

    DATABANK NAME=big  START=0x200 END=0x37F PROTECTED
    DATABANK NAME=gpr3 START=0x380 END=0x3FF
4. The object's section (created in Step #1) must be assigned into the new region (created in Step #3). Add a SECTION directive to the linker script.
SECTION NAME=buffer_scn RAM=big
但是这个好像针对的C18编译器
huangchui 发表于 2022-1-3 21:17 | 显示全部楼层
还有什么现象?能再详细描述下吗?
 楼主| houcs 发表于 2022-1-3 21:20 | 显示全部楼层
我没在XC8编译器安装目录下找到上述中的lkr文件
 楼主| houcs 发表于 2022-1-3 21:21 | 显示全部楼层
请问该如何申请大的数组,大概有1024个字节;
chuxh 发表于 2022-1-3 21:27 | 显示全部楼层
因为PIC的RAM是分BANK的
 楼主| houcs 发表于 2022-1-3 21:29 | 显示全部楼层
什么意思?不是很明白你说的什么
chenjunt 发表于 2022-1-3 21:32 | 显示全部楼层
不知道你选什么型号了,xc8手册才是你的终极助手。
以下原文复制
http://ww1.microchip.com/downloads/en/DeviceDoc/50002737C%20XC8%20C%20Compiler%20UG%20for%20PIC.pdf
Objects in data memory are broadly grouped into autos and non-autos and the size limitations of these objects (see 5.4.2.1.2 Object Size Limits and 5.4.2.2.1 Object Size Limits).
更多操作
renyaq 发表于 2022-1-3 21:35 | 显示全部楼层
你可以看所选型号的datasheet的存储器章节, 看看有没有整个bank都是作为通用RAM的情况
shimx 发表于 2022-1-3 21:36 | 显示全部楼层
正是因为如此, 建议你改善一下算法, 把大数组拆成几个小数组进行操作...
huangchui 发表于 2022-1-3 21:39 | 显示全部楼层
即使你找到方法让编译器帮你分配超过256字节的数组, 它只不过做的是把多个小数组拼接成一个大的而已.
jlyuan 发表于 2022-1-3 21:41 | 显示全部楼层
本质上, 是由RAM 硬件架构决定的..所以....
 楼主| houcs 发表于 2022-1-3 21:43 | 显示全部楼层
主要是调用了一个软件库,不想大动干戈
xxrs 发表于 2022-1-3 21:44 | 显示全部楼层
不同软件的架构不一样的, 你要移植过来的话, 不可能说那么的无缝.
zhenykun 发表于 2022-1-3 21:50 | 显示全部楼层
或者, 你可以写个函数来处理这个大数组, 让函数, 看起来像数组一样....
xxrs 发表于 2022-1-3 21:52 | 显示全部楼层
楼主具体是使用哪颗芯片?不同系列的芯片,情况不一样的。
chuxh 发表于 2022-1-3 21:55 | 显示全部楼层
PIC16系列数组大小设定会跟RAM BANK SIZE有关。
dingy 发表于 2022-1-3 21:57 | 显示全部楼层
PIC18系列数组大小没有这个要求,只受限于可用的RAM大小。
 楼主| houcs 发表于 2022-1-3 21:59 | 显示全部楼层
数组放在Flash中和Ram中也是不同的。看下MPLAB IDE help中的help contents->contents->XC8 toolchain->MPLAB XC8 c compiler for PIC MUCs->How To's ->Understanding the complication process->How big can C variables be?     How to's 不错滴
tian111 发表于 2022-1-3 22:01 | 显示全部楼层
若是PIC16F1 系列的芯片,楼主定义数组时,把数组定义到线性数据区应该就可以了
lizye 发表于 2022-1-3 22:03 | 显示全部楼层
volatile uint8_t tt[512] __at(0x2000);
您需要登录后才可以回帖 登录 | 注册

本版积分规则

743

主题

8382

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部

743

主题

8382

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部