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