打印

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

[复制链接]
7870|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 | 只看该作者
自己初始化

使用特权

评论回复
5
liang7143| | 2011-9-20 09:59 | 只看该作者
1、手动初始化,写一个循环
2、调用库函数memcpy
3、修改STARUP.A51
就想到这么多,LZ自己看在办;P

使用特权

评论回复
6
coody| | 2011-9-20 11:42 | 只看该作者
均可

使用特权

评论回复
7
ayb_ice| | 2011-9-20 13:04 | 只看该作者
当然可以
char xdata tmp[] = {1,2,3,4};

使用特权

评论回复
8
PaperKite|  楼主 | 2011-9-20 13:19 | 只看该作者
当然可以
char xdata tmp[] = {1,2,3,4};
ayb_ice 发表于 2011-9-20 13:04

烧进mcu后,tmp的值会是定义时这个吗?今天51ice坏掉了...,等我过两天测试完之后,再来确认一下,呵呵

使用特权

评论回复
9
afei9527| | 2011-9-20 14:44 | 只看该作者
char xdata tmp[] = {1,2,3,4};

使用特权

评论回复
10
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)查起来快点,呵呵

使用特权

评论回复
11
ayb_ice| | 2011-9-20 16:00 | 只看该作者
不是烧程序的时候确定初始值的,C只保证运行main时已经被初始了
当然定义在code区的时候是烧程序的时候确定的

使用特权

评论回复
12
PaperKite|  楼主 | 2011-9-21 19:58 | 只看该作者
今天在其他板子上烧另一个程序作测试,发现数组是可以在定义时进行初始化的,不论是xdata区数组还是data区数组。奇怪呀,难道那天的乱码是灵异事件.....无奈:Q

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

60

帖子

1

粉丝