加密使MEGA8跑飞?

2019-03-24 20:38发布

在MEGA8中使用以下方式调用函数,如果加密模式设置为APP(用户区)可读,则单片机工作正常,如果设置为不可读,单片机执行 SApp_Init 或 SApp_SetupPrep函数时就会跑飞,那位碰到过这个问题?  环境: ICCAVR7.22 下载工具:双龙ISP
typedef int fIntVoid(void);
const  fIntVoid * _apStatusMachinefunc[] ={ SApp_Init,//状态机初始态 SApp_SetupPrep,//设定状态
}

void SApp_Init()
{...}
 
void SApp_SetupPrep() 
{...} 

main()
{
.....
_apStatusMachinefunc[ 0 ](); //加密后,执行时会跑飞
.....
} [ 本帖最后由 toqaswed 于 2012-7-4 23:39 编辑 ] 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
5条回答
toqaswed
2019-03-25 13:33
以前的程序我加密都没问题(没有定义在程序空间的函数指针和数组),这次的程序使用了函数指针来做。在进行加密后,程序运行到使用函数指针指向的子程序(  SApp_Init() 和 SApp_SetupPrep() )时,就不进入这些函数了,程序完全不再工作。 后来发现,不仅仅是函数指针。定义在程序区的数组似乎也存在这个问题,比如下面这个数组:
unsigned char const DISP_NUM[10] = {    0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,};
不加密时引用数组OK,加密后引用,就是一些奇怪的数值了。

我怀疑是不是加密设置为:用户区不可读后,程序不能找到正确的函数指针和数组指针。

另外,谢谢ddllxxrr的建议,不过不知道不允许ISP的加密方法,如果人家用并行的编程器读,能不能读的出来啊?

一周热门 更多>