⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 tinyos2.0版本驱动
💻 C
📖 第 1 页 / 共 2 页
字号:
  va_list ap;  va_start(ap,fmt);   vfprintf(stderr,fmt,ap);  va_end(ap);  return true;}static void cleanup_exception() {  fprintf(stderr, "problem during cleanup - exiting\n");  _exit(2);}int main(int _argc, const char* _argv[]){  int return_val=0;  argc = _argc;  argv = _argv;  verbose_level=1;      if (argc==1){    Info(0, "%s: No commands specified. "         "Try '%s --help' for list of commands.\n",         argv[0], argv[0]);    exit(1);  }    argv_ok = (char *)malloc(argc);  for (int i=1; i<argc; i++){argv_ok[i]=0;}        /* Help Screen? */  if (GetCmdParam("-h", false) || GetCmdParam("--help", false)){    printf(version, VERSION);    printf("%s\n", help_screen);    return 0;  }  if (GetCmdParam("--version", false)){    printf(version, VERSION);    return 0;  }    /* Setup Verbose Level */  const char *p = GetCmdParam("-v",false);  if (p!=NULL){    if (*p==0){verbose_level=2;} else{verbose_level = atoi(p);}  }  /* Invoke Terminal or Command Line Batch Processing */  try{    const char* val;    val = GetCmdParam("-dprog");    /* backwards compatibility, -datmel is now -dprog=avr910 */    if (GetCmdParam("-datmel", false))      val = "avr910";    // BBD: add check for NULL on -dprog    if (val && (strcmp(val, "avr910") == 0 || strcmp(val, "pavr") == 0)) {      /* Drop setuid privileges (if any - not recommended) before	 trying to open the serial device, they are only needed for	 direct I/O access (not ppdev/ppi) to the parallel port.  */      setgid(getgid());      setuid(getuid());      device = new TAvrAtmel();    }
    else if ( (val && (strcmp(val, "stk500") == 0)) || (val && (strcmp(val, "mib510") == 0))   ) {      setgid(getgid());      setuid(getuid());      device = new TStk500();    }    else if (val && (strcmp(val, "stargate") == 0)) {      device = new TAvrStargate();    }#ifndef NO_DAPA    else if (val) {      /* The TDAPA() constructor will drop setuid privileges after         opening the lpt ioport. */      device = new TAvrDummy();    }#endif    /* Check Device's bad command line params. */    for (int i=1; i<argc; i++){      if (argv_ok[i]==0 && strncmp(argv[i], "-d", 2)==0){        Info(0,"Invalid parameter: %s\n", argv[i]); exit(1);      }    }        if (device()==NULL){      throw Error_Device("Programming method is not selected.");    }    /* Set Current Active Segment */    if ((val=GetCmdParam("--segment"))!=NULL){      if (!device->SetSegment(val)){	Info(0, "--segment=%s: bad segment name\n", val);      }    }    	/* Device Operations: */    if (GetCmdParam("--download", false)) {      motintl.Write(GetCmdParam("of"));    }    if (GetCmdParam("--erase", false)){device->ChipErase();}    /* Input file */    if ((val=GetCmdParam("if"))) {      if (GetCmdParam("--upload", false)){motintl.Read(val, true, false);}      if (GetCmdParam("--verify", false)){motintl.Read(val, false, true);}    }    if (GetCmdParam("--rd_fuses",false))    {      TByte bits;      const char *old_seg = device->TellActiveSegment();      device->SetSegment("fuse");      printf("\n");      printf("Fuse Low Byte      = 0x%02x\n", device->ReadByte(AVR_FUSE_LOW_ADDR));      printf("Fuse High Byte     = 0x%02x\n", device->ReadByte(AVR_FUSE_HIGH_ADDR));      printf("Fuse Extended Byte = 0x%02x\n", device->ReadByte(AVR_FUSE_EXT_ADDR));      printf("Calibration Byte   = 0x%02x  --  Read Only\n",             device->ReadByte(AVR_CAL_ADDR));      bits = device->ReadByte(AVR_LOCK_ADDR);      printf("Lock Bits          = 0x%02x\n", bits);      printf("    BLB12 -> %d\n", ((bits & BLB12) == BLB12));      printf("    BLB11 -> %d\n", ((bits & BLB11) == BLB11));      printf("    BLB02 -> %d\n", ((bits & BLB02) == BLB02));      printf("    BLB01 -> %d\n", ((bits & BLB01) == BLB01));      printf("      LB2 -> %d\n", ((bits & LB2) == LB2));      printf("      LB1 -> %d\n", ((bits & LB1) == LB1));      printf("\n");      device->SetSegment(old_seg);    }    if ((val=GetCmdParam("--wr_fuse_l")) != NULL)    {      unsigned int bits;      const char *old_seg = device->TellActiveSegment();      device->SetSegment("fuse");      if (sscanf(val, "%x", &bits) == 1)      {        device->WriteByte( AVR_FUSE_LOW_ADDR, (TByte)bits );        printf("\nFuse Low Byte set to 0x%02x\n", (TByte)bits);      }      else        throw Error_Device("Invalid argument for --wr_fuse_l.");      device->SetSegment(old_seg);    }    if ((val=GetCmdParam("--wr_fuse_h")) != NULL)    {      unsigned int bits;      const char *old_seg = device->TellActiveSegment();      device->SetSegment("fuse");      if (sscanf(val, "%x", &bits) == 1)      {        device->WriteByte( AVR_FUSE_HIGH_ADDR, (TByte)bits );        printf("\nFuse High Byte set to 0x%02x\n", (TByte)bits);      }      else        throw Error_Device("Invalid argument for --wr_fuse_h.");      device->SetSegment(old_seg);    }    if ((val=GetCmdParam("--wr_fuse_e")) != NULL)    {      unsigned int bits;      const char *old_seg = device->TellActiveSegment();      device->SetSegment("fuse");      if (sscanf(val, "%x", &bits) == 1)      {        device->WriteByte( AVR_FUSE_EXT_ADDR, (TByte)bits );        printf("\nFuse Extended Byte set to 0x%02x\n", (TByte)bits);      }      else        throw Error_Device("Invalid argument for --wr_fuse_e.");      device->SetSegment(old_seg);    }    if ((val=GetCmdParam("--wr_lock")) != NULL)    {      unsigned int bits;      if (sscanf(val, "%x", &bits) == 1)      {        device->WriteLockBits( (TByte)bits );        printf("\nLock Bits set to 0x%02x\n", (TByte)bits);      }      else        throw Error_Device("Invalid argument for --wr_lock.");    }    if (GetCmdParam("--lock", false))    {      Info(0, "NOTE: '--lock' is deprecated. Used '--wr_lock' instead.\n");      device->WriteLockBits(0xFC);      printf("\nLock Bits set to 0x%02x\n", 0xfc);    }    	/* enter terminal */ 	    if (GetCmdParam("--terminal", false)){terminal.Run();}        /* Check bad command line parameters */    for (int i=1; i<argc; i++){      if (argv_ok[i]==0){Info(0,"Invalid parameter: %s\n", argv[i]);}    }    }   catch(Error_C& errC){perror("Error"); errC.print(); return_val=1;}  catch(Error_Device& errDev){errDev.print(); return_val=2;}  catch(Error_MemoryRange& x){    Info(0, "Address out of memory range.\n"); return_val=3;  }  std::set_terminate(cleanup_exception);  return return_val;}

⌨️ 快捷键说明

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