首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

菜单程序

菜单程序

51单片机有一个菜单程序是这样的.把他换到FREESCALE上,要怎么写?

typedef struct
{
uchar KeyStateIndex; //当前状态索引号
uchar KeyDnState; //按下"向下"键时转向的状态索引号
uchar KeyUpState; //按下"向上"键时转向的状态索引号
uchar KeyCrState; //按下"回车"键时转向的状态索引号
void (*CurrentOperate)(); //当前状态应该执行的功能操作
} KbdTabStruct;

KbdTabStruct code KeyTab[SIZE_OF_KEYBD_MENU]=
{
{ 0, 0, 0, 1,(*DummyJob)},//顶层

{ 1, 2, 0, 3,(*DspUserInfo)},//第二层
{ 2, 1, 1, 4,(*DspServiceInfo)}, //第二层

{ 3, 0, 0, 1,(*DspVoltInfo)},//第三层>>DspUserInfo的展开
{ 4, 0, 0, 1,(*DspCurrInfo)},//第三层>>DspUserInfo的展开

};

//把上面的程序直接考到FREESCALE时,上面使用常数时运行正常,但是使用变量就乱了..

比如{ 0, 0, i, j,(*DummyJob)},//顶层

i和j 数字不确定,好象读出来的都是改变量的地址..

你要用变量,定义KeyTab的时候就要放到ram里啊

直接从51转到freescale可以吗?没这么干过

希望高手指点

问题解决了..不过是用另一种方法实现..

在C51中,{ 0, 0, i, j,(*DummyJob)}, i和j都可以直接读取数值,在FREESCALE中.

则指向了其地址.所以调用的时候用 *(volatile char *)i 解决了.

希望高手有更好的办法..

[em96]
返回列表