我想通过ID加密程序,思路如下:
程序有一个通用密码,存放在数组const char common_code[]={0x30,0x39, 0x18, 0xbb, 0x5a, 0xdd}。
程序的本机密码存储在const unsigned char encrypt_code[FLASH_SECTOR3_SIZE] __attribute__((at(ADDR_FLASH_SECTOR_3))) ={...}。
【注:程序下载进去时,common_code和encrypt_code内容相同。】
1.上电后,读取
芯片ID,用ID计算出本机对应的密码my_code[]。
2.如果本机密码encrypt_code和通用密码common_code相同,则将my_code[]存储到encrypt_code[]数组。
3.如果不相同,则对比encrypt_code和my_code。如果相同则校验正确,正常运行程序;否则校验失败,擦除FLASH中的应用程序。
原来我把上面的变量和函数都放在一个文件里,只给外部函数提供一个check_ID( )函数接口,因此出现上述问题。
解决办法是:
将该文件相关的变量用volatile进行定义,并在头问题中声明;
将check_ID( )里面的判断放到其他文件中进行。
这样编译器就不会把他们优化了。
一周热门 更多>