加密使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条回答
鑫海宝贝
1楼-- · 2019-03-25 03:25
 精彩回答 2  元偷偷看……
鑫海宝贝
2楼-- · 2019-03-25 05:20
你指的跑飞,是指具体什么情况,单单指没按照你预想的跑马
ddllxxrr
3楼-- · 2019-03-25 10:27
  只打ISP不可用,就能达到加密目地。但注意听。这样的话。你自己也读不出来。
toqaswed
4楼-- · 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的加密方法,如果人家用并行的编程器读,能不能读的出来啊?
柠檬恋上雨
5楼-- · 2019-03-25 15:06
纠结的问题呀,我在AVR调试中也遇到程序跑飞的问题,就是不用子程序程序运行OK,调用子程序就会跑飞

一周热门 更多>