STC32 如果定义一个数组存放在特定的RAM地址?
STC32 如果定义一个数组存放在特定的RAM地址?unsigned int xdata gongneng_value_P_at_ 0x0100;
// unsigned int xdata gongneng_value_F_at_ 0xF0;
// unsigned int xdata gongneng_value_U_at_ 0x1B8;
//unsigned char xdataBit_BianLiang _at_ 0x0280;
unsigned int xdata TIME_SET_at_ 0x0358;
unsigned char xdata TIME_MS_at_ 0x05B0;
unsigned int xdata TIME_S_at_ 0x06DC;
unsigned char xdataBit_BianLiang _at_ 0x0934;
unsigned char xdataBit_BianLiang_P _at_ 0x09FC;
unsigned char xdataBit_BianLiang_F _at_ 0x0AC4;
unsigned char xdataBit_BianLiang_TEMP _at_ 0x0B8C;
unsigned char xdata TIME_K _at_ 0x0C54;
unsigned char xdata TIME_T _at_ 0x0C7A;
unsigned char xdata STEP_S _at_ 0x0CA0; //91A
unsigned char xdata STEP_S_P _at_ 0x0CC6; //
unsigned char xdata STEP_S_F _at_ 0x0CEC; //
unsigned char xdata STEP_S_TEMP _at_ 0x0D12; //D38
像我以前都是用STC8G,我把数据定义在XDATA里面特定的地址 。现在想用STC32来代替STC8,发现空间多了很多,同时也多了很多疑问,因为STC32 的地址比以前STC8多了很多位,现在我要在STC32定义的数组放在特定的XDATA,得怎么定,我发现编译不过?
nsigned int xdata gongneng_value_P_at_ 0x010100;
// unsigned int xdata gongneng_value_F_at_ 0xF0;
// unsigned int xdata gongneng_value_U_at_ 0x1B8;
//unsigned char xdataBit_BianLiang _at_ 0x010280;
unsigned int xdata TIME_SET_at_ 0x010358;
unsigned char xdata TIME_MS_at_ 0x0105B0;
unsigned int xdata TIME_S_at_ 0x0106DC;
unsigned char xdataBit_BianLiang _at_ 0x010934;
unsigned char xdataBit_BianLiang_P _at_ 0x0109FC;
unsigned char xdataBit_BianLiang_F _at_ 0x010AC4;
unsigned char xdataBit_BianLiang_TEMP _at_ 0x010B8C;
unsigned char xdata TIME_K _at_ 0x010C54;
unsigned char xdata TIME_T _at_ 0x010C7A;
unsigned char xdata STEP_S _at_ 0x010CA0; //91A
unsigned char xdata STEP_S_P _at_ 0x010CC6; //
unsigned char xdata STEP_S_F _at_ 0x010CEC; //
unsigned char xdata STEP_S_TEMP _at_ 0x010D12; //D38
如何指定常数数组的地址 - 仿真/ISP下载/做自己的ISP/编译器/头文件 - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)
unsigned char xdata text _at_ 0x10000={1,2,3,4,5} ;
unsigned char edata text _at_ 0x400={1,2,3,4,5} ;
我现学现卖了下,您测试下
我是这么理解的
stc32 的地址是分段的
指定xdata段后,写四位地址就行
32G12k128是8k就是从0000 ~1FFFH 指定
u8 xdata ReadBuffer[3584] _at_ 0x0001;
gentleman 发表于 2023-11-10 09:17
我是这么理解的
stc32 的地址是分段的
指定xdata段后,写四位地址就行
刚试了,只要定义XDATA,你定义在_at_0X0000;编译器就会自动给你分配到010000 飞捷 发表于 2023-11-10 09:25
刚试了,只要定义XDATA,你定义在_at_0X0000;编译器就会自动给你分配到010000
对呀,已经指定了XDATA段了。
以后XDATA超过 64k (FFFFH)可能会有不同的定义方法
那就是以后的事了
飞捷 发表于 2023-11-10 09:25
刚试了,只要定义XDATA,你定义在_at_0X0000;编译器就会自动给你分配到010000
1楼的第一张图片已经给出 xdata 地址区域 01:0000H ~ 01:1FFFH 乘风飞扬 发表于 2023-11-10 09:47
1楼的第一张图片已经给出 xdata 地址区域 01:0000H ~ 01:FFFFH
不知是相对地址还是绝对地址,编译器以什么模式去编译的,加上之前是从STC8的成熟程序移值到STC32,但是发现程序在读写地址到串口通讯这方面出问题,所以才有这个疑问,还在找原因中,硬件方面用简单的程序能实现通讯,排除硬件问题了。 飞捷 发表于 2023-11-10 10:23
不知是相对地址还是绝对地址,编译器以什么模式去编译的,加上之前是从STC8的成熟程序移值到STC32,但是 ...
就是绝对地址啊。可能我没表述清楚
XDATA是段名,01: 是段地址。
你指定了XDATA 就不能再写01了。
keil 只支持 段名 定义内存地址,不支持 段地址 定义
页:
[1]
2