【已解决】STC32G关于ID号加密问题。
本帖最后由 STCAI 于 2023-9-6 08:51 编辑原先在0xE100,0xE400位置有设置ID号加密,现在地址如何设置?现在还是原设置,已经不对了。
如果你现在需要放在STC32G12K128的FF:E100H和FF:E400H
则ID号加密的地址需要设置为0x1E100和0x1E400
因为这个地址是内部FLASH的绝对物理地址
逻辑地址FE:0000对应绝对物理地址0x00000
逻辑地址FF:0000对应绝对物理地址0x10000 zhp 发表于 2023-9-5 09:09
如果你现在需要放在STC32G12K128的FF:E100H和FF:E400H
则ID号加密的地址需要设置为0x1E100和0x1E400
如果这样,
#define ID_ADDR_Check1 0xE100 //定义ID_check1存放地址
#define ID_ADDR_Check2 0xE400 //定义ID_check2存放地址
是否也对应修改为
#define ID_ADDR_Check1 0x1E100 //定义ID_check1存放地址
#define ID_ADDR_Check2 0x1E400 //定义ID_check2存放地址 BYTE code *cptr;
BYTE code *cptr1;
BYTE code *cptr2;//这三个定义也要修改一下了,不然会保错。
有如下代码:
cptr1 = ID_ADDR_Check1;
cptr2 = ID_ADDR_Check2;
这样修改完,编译没有报错,但ID检测还不对。
本帖最后由 jnyyz 于 2023-9-6 08:51 编辑
int ID_CheckPro()
{
int idcki;
BYTE SysIDtmp1;
BYTE SysIDtmp2;
cptr1 =(WORD)ID_ADDR_Check1;
cptr2 =(WORD)ID_ADDR_Check2;
for (idcki=0; idcki<7; idcki++)
{
SysID1= *cptr1++;
SysID2= *cptr2++;
SysIDtmp1=SysID-1;
SysIDtmp1*=3;
SysIDtmp1/=4;
SysIDtmp1+=8;
SysIDtmp2=SysID*2;
SysIDtmp2/=3;
SysIDtmp2+=7;
SysIDtmp2*=7;
if(SysID1!=SysIDtmp1)
{
SendString1("Check id1 is error!\r\n");
return 0;
}
if(SysID2!=SysIDtmp2)
{
SendString1("Check id2 is error!\r\n");
return 0;
}
}
return 1;
} jnyyz 发表于 2023-9-5 12:03
int ID_CheckPro()
{
int idcki;
只在下载软件中,0xe100才需要改为FLASH绝对地址0x1e100
在你自己的代码中,则需要使用逻辑地址进行访问,
例如:
*(BYTE code *)0xe100
或者
*(BYTE ecode *)0xffe100 好的,我上机试一下。 jnyyz 发表于 2023-9-5 16:33
好的,我上机试一下。
已经解决。
页:
[1]