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

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

[复制链接]
  • TA的每日心情
    开心
    昨天 08:11
  • 签到天数: 157 天

    [LV.7]常住居民III

    34

    主题

    325

    回帖

    673

    积分

    高级会员

    积分
    673
    发表于 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
    纸上得到终觉浅,绝知此事要躬行。
    回复 送花

    使用道具 举报

    该用户从未签到

    551

    主题

    9567

    回帖

    1万

    积分

    管理员

    积分
    14057
    发表于 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} ;


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

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-5-5 08:35
  • 签到天数: 143 天

    [LV.7]常住居民III

    29

    主题

    558

    回帖

    2144

    积分

    荣誉版主

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

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


    u8 xdata ReadBuffer[3584] _at_ 0x0001;

    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 08:11
  • 签到天数: 157 天

    [LV.7]常住居民III

    34

    主题

    325

    回帖

    673

    积分

    高级会员

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

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

    点评

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

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-5-5 08:35
  • 签到天数: 143 天

    [LV.7]常住居民III

    29

    主题

    558

    回帖

    2144

    积分

    荣誉版主

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

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

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

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 09:01
  • 签到天数: 145 天

    [LV.7]常住居民III

    27

    主题

    1362

    回帖

    4233

    积分

    论坛元老

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

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

    使用道具 举报

  • TA的每日心情
    开心
    昨天 08:11
  • 签到天数: 157 天

    [LV.7]常住居民III

    34

    主题

    325

    回帖

    673

    积分

    高级会员

    积分
    673
     楼主| 发表于 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
    纸上得到终觉浅,绝知此事要躬行。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-5-5 08:35
  • 签到天数: 143 天

    [LV.7]常住居民III

    29

    主题

    558

    回帖

    2144

    积分

    荣誉版主

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

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

    使用道具 举报

    该用户从未签到

    551

    主题

    9567

    回帖

    1万

    积分

    管理员

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

    截图202311101930074529.jpg

    截图202311101930567210.jpg

    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    551

    主题

    9567

    回帖

    1万

    积分

    管理员

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

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-22 02:54 , Processed in 0.070748 second(s), 68 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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