sys_check.c

来自「AVR IAR 环境下任务调度器,有优先级」· C语言 代码 · 共 74 行

C
74
字号
#include "INCLUDE\config.h"

__eeprom int8u SYSID[8] @0x10;
__eeprom int8u SYSFI @0x08;



void check(int8u id,int8u *s)
{
  int8u i,j,k;
  int8u buf[8];
  buf[0]=id;
  buf[1]=~id;
  buf[2]=id^0x55;
  buf[3]=id^0xFF;
  for(i=0;i<8;i++)
  {
    j>>=1;
    if(id&0x80)j|=0x80;
    id<<=1;
  }
  id=j;
  buf[4]=id;
  buf[5]=~id;
  buf[6]=id^0x55;
  buf[7]=id^0xFF;  
  for(i=0;i<8;i++)
  {
    *(s+i)=0;
  }
  for(i=0;i<8;i++)
   {
     for(j=0;j<8;j++)
     {
      id=(i+j)&0x07;
      if(j==0)k=0x01;
      else k<<=1;
      *(s+i)|=(buf[id]&k);
     }
   }
}

int8u id_fc(int8u *s)
{
  int8u i,da=0;
  for(i=0;i<8;i++)
  {
    if(*(s+i)!=SYSID[i])da=1;
  }
  return da;
}



void sys_ch(void)
{
  int8u a,id_buf[8];
  check(OSCCAL,&id_buf[0]);
    a=id_fc(&id_buf[0]);  
  if(SYSKK)
  {
  if(a)SYSFI=0xAA;  
  }
   else
   {
     for(a=0;a<8;a++)
     {
       SYSID[a]=id_buf[a];
     }
   }
  
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?