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

📄 main.c

📁 tinyos-2.x.rar
💻 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 + -