打印
[PIC®/AVR®/dsPIC®产品]

XC8怎么定义大数组?超过256

[复制链接]
1058|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
渔夫的烟斗|  楼主 | 2022-8-15 13:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
XC8怎么定义大数组?超过256XC8怎么定义大数组?超过256XC8怎么定义大数组?超过256XC8怎么定义大数组?超过256XC8怎么定义大数组?超过256

使用特权

评论回复
沙发
ynwa| | 2022-8-15 16:53 | 只看该作者
定义全局或者静态数据都可以超过Bank(256个大小)。如果是局部数据不能超过bank。

使用特权

评论回复
板凳
tpgf| | 2022-9-7 12:05 | 只看该作者
ynwa 发表于 2022-8-15 16:53
定义全局或者静态数据都可以超过Bank(256个大小)。如果是局部数据不能超过bank。 ...

居然还是这样的 我以前都不知道呢

使用特权

评论回复
地板
qcliu| | 2022-9-7 12:20 | 只看该作者
局部变量只能在Bank内部吗

使用特权

评论回复
5
drer| | 2022-9-7 13:23 | 只看该作者
这样的话会不会太浪费资源

使用特权

评论回复
6
coshi| | 2022-9-7 13:37 | 只看该作者
如果是全局或者静态 那就太耗费资源了

使用特权

评论回复
7
kxsi| | 2022-9-7 13:45 | 只看该作者
所有单片机的bank都是256个字节大小的吗

使用特权

评论回复
8
wiba| | 2022-9-7 14:10 | 只看该作者
可以使用链表吗

使用特权

评论回复
9
Stahan| | 2022-9-10 22:50 | 只看该作者
这会不会浪费

使用特权

评论回复
10
wutaosamuel| | 2022-9-26 11:46 | 只看该作者
因为每个bank的大小是256Bytes, 所以数组大小有限制, 比如: char[256], int[128]试过简单的链表, xc8 还是能用的
可以参考:
struct CharArray {
  char Char[253]; /* 253 bytes */

  struct CharArray* next; /* 3 bytes */
};

struct IntArray {
  int Int[126]; /* 252 bytes */

  uint8_t size;          /* 1 bytes */
  struct IntArray* next; /* 3 bytes */
};

struct VirtualTable {
  void* Virtual[84]; /* 252 bytes */

  uint8_t size;              /* 1 bytes */
  struct VirtualTable* next; /* 3 bytes */
};


如果指针玩的好的, 可以试试下面的这种链表或者虚表, 但是没测试过:
// char* Char size smaller than 256
struct CharPArray {
  char* Char; /* 3 bytes */

  uint8_t size; /* 1 bytes */
  struct CharPArray* next; /* 3 bytes */
}

// single char* Str size smaller than 256
struct CharString {
  char* Str[4]; /* 12 bytes */
  uint8_t size[4]; /* 4 bytes */
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

37

主题

178

帖子

2

粉丝