找回密码
 立即注册
查看: 1127|回复: 21

难道STC32G不允许把变量定义到code段吗?

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-04-29 08:51:26

4

主题

75

回帖

871

积分

荣誉版主

积分
871
发表于 2024-5-27 11:18:47 | 显示全部楼层 |阅读模式
//16位BMP 40X40 QQ图像取模数据,存到程序段里
//Image2LCD取模选项设置
//水平扫描
//16位
//40X40
//不包含图像头数据
//自左至右
//自顶至底
//低位在前
unsigned char code gImage_qq[3200] = { /*0X00,0X10,0X28,0X00,0X28,0X00,0X01,0X1B,*/
0XDB,0XDE,0X5D,0XEF,0X5D,0XEF,0X7D,0XEF,0X5D,0XEF,0X5D,0XEF,0X5D,0XEF,0X5D,0XEF,
0X5D,0XEF,0X5D,0XEF,0X5D,0XEF,0X5D,0XEF,0X5D,0XEF,0X5D,0XEF,0X5D,0XEF,0XBE,0XF7,
0XFF,0XFF,0XDE,0XFF,0X38,0XC6,0X92,0X8C,0X8E,0X6B,0X6E,0X6B,0X10,0X7C,0X96,0XAD,
0X3C,0XE7,0XFF,0XFF,0XFF,0XFF,0X7D,0XEF,0X5D,0XEF,0X5D,0XEF,0X5D,0XEF,0X5D,0XEF,

定义了一个程序段数组变量  unsigned char code gImage_qq[3200]  用来存储图片,结果编译后却被存到了Xdata段,
难道STC32G不允许把变量定义到code段吗?求解

回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:395
  • 最近打卡:2025-05-02 05:31:55

16

主题

702

回帖

2474

积分

金牌会员

积分
2474
发表于 2024-5-27 14:27:17 | 显示全部楼层
code 改成 const

点评

谢谢  详情 回复 发表于 2024-5-27 15:49
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6843

积分

论坛元老

积分
6843
发表于 2024-5-27 14:59:56 | 显示全部楼层
STC32G允许使用code关键字将常量定义到程序空间。
STC32G实验箱例程包:
37-2.4寸ILI9341驱动TFT显示屏实验程序,font文件夹下"pic.h"就定义了一个你同样的常量数组存放图片数据在程序空间。
编译后这个数组内容是放到Flash空间不是放在xdata里面。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

718

主题

1万

回帖

1万

积分

管理员

积分
15626
发表于 2024-5-27 15:02:50 | 显示全部楼层
截图202405271502463698.jpg


截图202405271503334188.jpg


截图202405271504216167.jpg

点评

谢谢  详情 回复 发表于 2024-5-27 15:49
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-04-29 08:51:26

4

主题

75

回帖

871

积分

荣誉版主

积分
871
发表于 2024-5-27 15:49:01 | 显示全部楼层

谢谢
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-04-29 08:51:26

4

主题

75

回帖

871

积分

荣誉版主

积分
871
发表于 2024-5-27 15:49:23 | 显示全部楼层
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:38
  • 最近打卡:2025-04-29 08:28:25
已绑定手机

17

主题

446

回帖

1173

积分

金牌会员

积分
1173
发表于 2024-11-6 16:23:45 | 显示全部楼层
不可能
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:154
  • 最近打卡:2025-04-30 08:40:57
已绑定手机

15

主题

630

回帖

730

积分

高级会员

积分
730
发表于 2024-11-6 16:43:10 | 显示全部楼层
可以啊
STC 666 888
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5395

积分

荣誉版主

积分
5395
发表于 2024-11-6 16:55:47 | 显示全部楼层
STC32G的DPTR指令,有点BUG。
INTEL标准是,读写XRAM指令,MOVX  @DPTR,A和MOVX  A,@DPTR
最高扩展地址位,默认DPXL(STC指令是正确的)。
但读ROM指令,INTEL标准是,最高扩展地址强制置0xFF。
即MOVC  A,@A+DPTR指令,读取最后一页(0xFF0000~0xFFFFFF)数据,
但STC指令,最高扩展地址位也选择DPXL(是错的)。

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5395

积分

荣誉版主

积分
5395
发表于 2024-11-6 17:25:07 | 显示全部楼层
附:出现故障现象及解决方法
1、程序中使用4字节指针寻址(官方推荐)
可有效避开MOVC指令(结果正确)
如用户变量选用2字节指针,若全局变量定义CODE类型,程序执行会出错。
你只要强制定义为ECODE类型,即可正确执行。
注:变量指针是否2/4字节,与中断指针一定要用4字节无关!
2、函数(子程序)中定义CODE变量,由于函数内ROM变量指针默认2字节,
所以执行会出错,你只要将其强制定义为ECODE类型即可,就能正确执行。
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 15:42 , Processed in 0.130563 second(s), 114 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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