Board logo

标题: 菜单程序 [打印本页]

作者: hygnyf    时间: 2009-2-12 20:12     标题: 菜单程序

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 数字不确定,好象读出来的都是改变量的地址..


作者: fayefayehoo    时间: 2009-2-16 11:05

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


作者: fjczd    时间: 2009-2-16 15:35

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

希望高手指点


作者: hygnyf    时间: 2009-3-2 19:29

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

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

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

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

[em96]




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0