找回密码
 立即注册
查看: 1575|回复: 15

STC32 如果定义一个数组存放在特定的RAM地址?

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:445
  • 最近打卡:2025-05-07 08:05:40
已绑定手机

40

主题

371

回帖

873

积分

高级会员

积分
873
发表于 2023-11-10 00:54:06 | 显示全部楼层 |阅读模式
STC32 如果定义一个数组存放在特定的RAM地址?


unsigned int xdata gongneng_value_P[300]_at_ 0x0100;
// unsigned int xdata gongneng_value_F[10][10]_at_ 0xF0;
// unsigned int xdata gongneng_value_U[10][10]_at_ 0x1B8;       
//unsigned char xdata  Bit_BianLiang[200] _at_ 0x0280;

unsigned int xdata TIME_SET[300]_at_ 0x0358;
unsigned char xdata TIME_MS[300]_at_ 0x05B0;
unsigned int xdata TIME_S[300]_at_ 0x06DC;


unsigned char xdata  Bit_BianLiang[200] _at_ 0x0934;
unsigned char xdata  Bit_BianLiang_P[200] _at_ 0x09FC;
unsigned char xdata  Bit_BianLiang_F[200] _at_ 0x0AC4;
unsigned char xdata  Bit_BianLiang_TEMP[200] _at_ 0x0B8C;

unsigned char xdata TIME_K[38] _at_ 0x0C54;
unsigned char xdata TIME_T[38] _at_ 0x0C7A;



unsigned char xdata STEP_S[38] _at_ 0x0CA0; //91A
unsigned char xdata STEP_S_P[38] _at_ 0x0CC6; //
unsigned char xdata STEP_S_F[38] _at_ 0x0CEC; //
unsigned char xdata STEP_S_TEMP[38] _at_ 0x0D12; //D38


像我以前都是用STC8G,我把数据定义在XDATA里面特定的地址 。现在想用STC32来代替STC8,发现空间多了很多,同时也多了很多疑问,因为STC32 的地址比以前STC8多了很多位,现在我要在STC32定义的数组放在特定的XDATA,得怎么定,我发现编译不过?

nsigned int xdata gongneng_value_P[300]_at_ 0x010100;
// unsigned int xdata gongneng_value_F[10][10]_at_ 0xF0;
// unsigned int xdata gongneng_value_U[10][10]_at_ 0x1B8;       
//unsigned char xdata  Bit_BianLiang[200] _at_ 0x010280;

unsigned int xdata TIME_SET[300]_at_ 0x010358;
unsigned char xdata TIME_MS[300]_at_ 0x0105B0;
unsigned int xdata TIME_S[300]_at_ 0x0106DC;


unsigned char xdata  Bit_BianLiang[200] _at_ 0x010934;
unsigned char xdata  Bit_BianLiang_P[200] _at_ 0x0109FC;
unsigned char xdata  Bit_BianLiang_F[200] _at_ 0x010AC4;
unsigned char xdata  Bit_BianLiang_TEMP[200] _at_ 0x010B8C;

unsigned char xdata TIME_K[38] _at_ 0x010C54;
unsigned char xdata TIME_T[38] _at_ 0x010C7A;



unsigned char xdata STEP_S[38] _at_ 0x010CA0; //91A
unsigned char xdata STEP_S_P[38] _at_ 0x010CC6; //
unsigned char xdata STEP_S_F[38] _at_ 0x010CEC; //
unsigned char xdata STEP_S_TEMP[38] _at_ 0x010D12; //D38





截图202311100049089770.jpg
截图202311100052261679.jpg
截图202311100053439377.jpg
纸上得到终觉浅,绝知此事要躬行。
回复

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:60
  • 最近打卡:2025-05-07 11:01:36

718

主题

1万

回帖

1万

积分

管理员

积分
15682
发表于 2023-11-10 07:53:35 | 显示全部楼层
截图202311100750355963.jpg

如何指定常数数组的地址 - 仿真/ISP下载/做自己的ISP/编译器/头文件 - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)


unsigned char xdata text[5] _at_ 0x10000={1,2,3,4,5} ;


unsigned char edata text[5] _at_ 0x400={1,2,3,4,5} ;


我现学现卖了下,您测试下
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:217
  • 最近打卡:2024-11-15 09:12:27

29

主题

722

回帖

2790

积分

荣誉版主

积分
2790
发表于 2023-11-10 09:17:02 | 显示全部楼层

我是这么理解的
stc32 的地址是分段的
指定xdata段后,写四位地址就行
32G12k128是8k  就是从0000 ~1FFFH 指定


u8 xdata ReadBuffer[3584] _at_ 0x0001;

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:445
  • 最近打卡:2025-05-07 08:05:40
已绑定手机

40

主题

371

回帖

873

积分

高级会员

积分
873
发表于 2023-11-10 09:25:47 | 显示全部楼层
gentl*** 发表于 2023-11-10 09:17
我是这么理解的
stc32 的地址是分段的
指定xdata段后,写四位地址就行

刚试了,只要定义XDATA,你定义在_at_0X0000;编译器就会自动给你分配到010000

点评

对呀,已经指定了XDATA段了。 以后XDATA超过 64k (FFFFH)可能会有不同的定义方法 那就是以后的事了  详情 回复 发表于 2023-11-10 09:32
纸上得到终觉浅,绝知此事要躬行。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:217
  • 最近打卡:2024-11-15 09:12:27

29

主题

722

回帖

2790

积分

荣誉版主

积分
2790
发表于 2023-11-10 09:32:06 | 显示全部楼层
飞*** 发表于 2023-11-10 09:25
刚试了,只要定义XDATA,你定义在_at_0X0000;编译器就会自动给你分配到010000

对呀,已经指定了XDATA段了。

以后XDATA超过 64k (FFFFH)可能会有不同的定义方法
那就是以后的事了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:416
  • 最近打卡:2025-05-06 08:57:51
已绑定手机

39

主题

2010

回帖

6859

积分

论坛元老

积分
6859
发表于 2023-11-10 09:47:35 | 显示全部楼层
飞*** 发表于 2023-11-10 09:25
刚试了,只要定义XDATA,你定义在_at_0X0000;编译器就会自动给你分配到010000

1楼的第一张图片已经给出 xdata 地址区域 01:0000H ~ 01:1FFFH
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:445
  • 最近打卡:2025-05-07 08:05:40
已绑定手机

40

主题

371

回帖

873

积分

高级会员

积分
873
发表于 2023-11-10 10:23:46 | 显示全部楼层
乘风*** 发表于 2023-11-10 09:47
1楼的第一张图片已经给出 xdata 地址区域 01:0000H ~ 01:FFFFH

不知是相对地址还是绝对地址,编译器以什么模式去编译的,加上之前是从STC8的成熟程序移值到STC32,但是发现程序在读写地址到串口通讯这方面出问题,所以才有这个疑问,还在找原因中,硬件方面用简单的程序能实现通讯,排除硬件问题了。

点评

就是绝对地址啊。可能我没表述清楚 XDATA是段名,01: 是段地址。 你指定了XDATA 就不能再写01了。 keil 只支持 段名 定义内存地址,不支持 段地址 定义  详情 回复 发表于 2023-11-10 11:34
纸上得到终觉浅,绝知此事要躬行。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:217
  • 最近打卡:2024-11-15 09:12:27

29

主题

722

回帖

2790

积分

荣誉版主

积分
2790
发表于 2023-11-10 11:34:39 | 显示全部楼层
飞*** 发表于 2023-11-10 10:23
不知是相对地址还是绝对地址,编译器以什么模式去编译的,加上之前是从STC8的成熟程序移值到STC32,但是 ...

就是绝对地址啊。可能我没表述清楚
XDATA是段名,01: 是段地址。
你指定了XDATA 就不能再写01了。
keil 只支持 段名 定义内存地址,不支持 段地址 定义
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:60
  • 最近打卡:2025-05-07 11:01:36

718

主题

1万

回帖

1万

积分

管理员

积分
15682
发表于 2023-11-10 19:31:00 | 显示全部楼层
截图202311101929322631.jpg

截图202311101930074529.jpg

截图202311101930567210.jpg

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:60
  • 最近打卡:2025-05-07 11:01:36

718

主题

1万

回帖

1万

积分

管理员

积分
15682
发表于 2023-11-10 19:32:19 | 显示全部楼层
截图202311101932166231.jpg
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-7 14:35 , Processed in 0.138126 second(s), 111 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表