86csx 发表于 2009-5-7 12:20:52

请教傻孩子,关于结构体定义到flash区

傻孩子大侠,我把你“有谁能够谈谈LCD中菜单的实现和编程方法?”中的结构体定义到flash区中,如下,经iar编译没错,但仿真时发现好像在data区中也定义了,不知这样定义是否正确,仿真时data区中出现flash区中定义结构体的相同内容,是怎么回事,不解,望赐教。谢谢!
void nullsubs(void)
{
}
struct menuitem
{
    uchar menucount;
    uchar *displaystring;
    void (*subs)();
    struct menuitem __flash *childrenmenus;
    struct menuitem __flash *parentmenus;
};

__flash struct menuitem timemenu;
__flash struct menuitem voicemenu;
__flash struct menuitem robotmenu;
__flash struct menuitem mainmenu;

__flash struct menuitem timemenu=
{
{4,"time set",nullsubs,NULL,mainmenu},
{4,"date set",nullsubs,NULL,mainmenu},
{4,"alert set",nullsubs,NULL,mainmenu},
{4,"back",nullsubs,mainmenu,mainmenu}
};
__flash struct menuitem voicemenu=
{
{5,"voice recode",nullsubs,NULL,mainmenu},
{5,"play",nullsubs,NULL,mainmenu},
{5,"stop",nullsubs,NULL,mainmenu},
{5,"delect",nullsubs,NULL,mainmenu},
{5,"back",nullsubs,mainmenu,mainmenu}
};
__flash struct menuitem robotmenu=
{
{5,"turn left",nullsubs,NULL,mainmenu},
{5,"turn right",nullsubs,NULL,mainmenu},
{5,"go ahead",nullsubs,NULL,mainmenu},
{5,"go back",nullsubs,NULL,mainmenu},
{5,"back",nullsubs,mainmenu,mainmenu}
};
__flash struct menuitem mainmenu=
{
{3,"time set",nullsubs,timemenu,NULL},
{3,"voice center",nullsubs,voicemenu,NULL},
{3,"robot control",nullsubs,robotmenu,NULL}
};

Gorgon_Meducer 发表于 2009-5-7 22:37:41

这主要取决于你用什么编译器。并不是说数据放在flash区域里面就表示这些数据不会
在被使用的时候零时的出现在RAM中。IAR的具体处理方式我没有仔细研究过,不敢乱下
结论。

86csx 发表于 2009-5-7 23:30:19

嗯,我再研究一下,谢谢你
页: [1]
查看完整版本: 请教傻孩子,关于结构体定义到flash区