- UID
- 1029342
- 性别
- 男
|
//判断加密
bool JudgeEncrypt(void)* T6 ~ h& G9 R. _
{ 1 L: ?( ?( y+ t6 G9 Q7 d
uint32_t CpuID[4];
//获取CPU唯一的ID% S; d+ D* e' Q/ N; k1 n9 y: |0 w
CpuID[0]=*(vu32*)(UID_BASE);- r3 v" y* e' U1 q
CpuID[1]=*(vu32*)(UID_BASE+4);' x) W# s9 E* O; R% I
CpuID[2]=*(vu32*)(UID_BASE+8);
//加密算法,很简单的加密算法; E L0 \5 ]6 w" c% d2 Y4 F" T
CpuID[3]=(CpuID[0]>>3)+(CpuID[1]>>1)+(CpuID[2]>>2); / U! [3 r( Q9 ?& y, c5 s9 F# B
//检查Flash中的UID是否合法 " n9 _' [& d, d; r% z
return (CPUIDEncrypt == CpuID[3]);' a3 g) V' `) B
}
! e6 K& M2 ^' H/ o1 [! a
1、将写入加密数据和判断加密两个功能分开。写入加密在PrsCtrlTask开始的地方;而判断加密分布到程序的各个角落。 e3 V/ f D2 v5 X) s# i8 V8 T0 t- t, |
2、非常重要的是CPUID加密值的定义一定要加“volatile”类型:
volatile const static uint32 CPUIDEncrypt = 0xFFFFFFFF;
否则按速度优化编译,在判断加密值,不会重新读取加密值,导致判断出错。2 d5 g: a& @1 G" W' P& O. \9 E# t3 m W/ P
" _% z' x V0 L! _0 E2 Z
3、在工程选项Options->Debugger->Download中选择: use flash loader d9 ^+ q( ?: Y+ T* k% n
否则主程序中对Flash编程将不成功。 |
|