keil c51中能在ram区定义数组时初始化吗?

[复制链接]
9687|11
 楼主| PaperKite 发表于 2011-9-19 21:48 | 显示全部楼层 |阅读模式
keil c51中能像标准C一样在ram区定义数组时初始化吗?是不是keil C中一般都是要先定义一个数组,然后在程序中一个元素一个元素的对该数组赋值?....
    code区当然没问题的...
    只试验了一下在xdata区定义数组初始化是不行的,虽然在keil仿真中数据会定义过去,但烧进单片机跑进来发现是没有那个初值的,开始本以为keil会在编译阶段自动加上赋初值代码的...。
    是不是其他的像编译dsp arm等这类软件一般也这样,hew也这样吗?即不能在定义时初始化ram区数组?
zengbt 发表于 2011-9-19 21:58 | 显示全部楼层
是好东西哦
zhaoyu2005 发表于 2011-9-20 08:52 | 显示全部楼层
在片内RAM中前256可以的,在Xdata中没试过
a38128895 发表于 2011-9-20 08:54 | 显示全部楼层
自己初始化
liang7143 发表于 2011-9-20 09:59 | 显示全部楼层
1、手动初始化,写一个循环
2、调用库函数memcpy
3、修改STARUP.A51
就想到这么多,LZ自己看在办;P
coody 发表于 2011-9-20 11:42 | 显示全部楼层
ayb_ice 发表于 2011-9-20 13:04 | 显示全部楼层
当然可以
char xdata tmp[] = {1,2,3,4};
 楼主| PaperKite 发表于 2011-9-20 13:19 | 显示全部楼层
当然可以
char xdata tmp[] = {1,2,3,4};
ayb_ice 发表于 2011-9-20 13:04

烧进mcu后,tmp的值会是定义时这个吗?今天51ice坏掉了...,等我过两天测试完之后,再来确认一下,呵呵
afei9527 发表于 2011-9-20 14:44 | 显示全部楼层
char xdata tmp[] = {1,2,3,4};
 楼主| PaperKite 发表于 2011-9-20 15:03 | 显示全部楼层
还好,hew是支持数组的ram区定义初始化的。
    有一次在keil c中定义了一个xdata数组,并在定义时赋了初值(unsigned char const xdata ubTst[]={xx,xx,xx,xx};)。本意是当mcu检测到某故障后,从串口发送出该数组的值,结果发现发出的都是乱码,每次不一样,才想到的这个问题,后来就干脆改成code数组了。本来是想用xdata(movx a,@dptr),比code(clr a;movc A,@A+dptr)查起来快点,呵呵
ayb_ice 发表于 2011-9-20 16:00 | 显示全部楼层
不是烧程序的时候确定初始值的,C只保证运行main时已经被初始了
当然定义在code区的时候是烧程序的时候确定的
 楼主| PaperKite 发表于 2011-9-21 19:58 | 显示全部楼层
今天在其他板子上烧另一个程序作测试,发现数组是可以在定义时进行初始化的,不论是xdata区数组还是data区数组。奇怪呀,难道那天的乱码是灵异事件.....无奈:Q
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

60

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部