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

📄 config_gram.y

📁 AVR的USB文件
💻 Y
📖 第 1 页 / 共 2 页
字号:
  K_RESET | K_SCK;part_parm :  K_ID TKN_EQUAL TKN_STRING     {      strncpy(current_part->id, $3->value.string, AVR_IDLEN);      current_part->id[AVR_IDLEN-1] = 0;      free_token($3);    } |  K_DESC TKN_EQUAL TKN_STRING     {      strncpy(current_part->desc, $3->value.string, AVR_DESCLEN);      current_part->desc[AVR_DESCLEN-1] = 0;      free_token($3);    } |  K_DEVICECODE TKN_EQUAL TKN_NUMBER {    {      current_part->devicecode = $3->value.number;      free_token($3);    }  } |  K_CHIP_ERASE_DELAY TKN_EQUAL TKN_NUMBER    {      current_part->chip_erase_delay = $3->value.number;      free_token($3);    } |  K_PAGEL TKN_EQUAL TKN_NUMBER    {      current_part->pagel = $3->value.number;      free_token($3);    } |  K_BS2 TKN_EQUAL TKN_NUMBER    {      current_part->bs2 = $3->value.number;      free_token($3);    } |  K_RESET TKN_EQUAL reset_disposition    {      if ($3->primary == K_DEDICATED)        current_part->reset_disposition = RESET_DEDICATED;      else if ($3->primary == K_IO)        current_part->reset_disposition = RESET_IO;      free_tokens(2, $1, $3);    } |  K_SERIAL TKN_EQUAL yesno    {      if ($3->primary == K_YES)        current_part->flags |= AVRPART_SERIALOK;      else if ($3->primary == K_NO)        current_part->flags &= ~AVRPART_SERIALOK;      free_token($3);    } |  K_PARALLEL TKN_EQUAL parallel_modes    {      if ($3->primary == K_YES) {        current_part->flags |= AVRPART_PARALLELOK;        current_part->flags &= ~AVRPART_PSEUDOPARALLEL;      }      else if ($3->primary == K_NO) {        current_part->flags &= ~AVRPART_PARALLELOK;        current_part->flags &= ~AVRPART_PSEUDOPARALLEL;      }      else if ($3->primary == K_PSEUDO) {        current_part->flags |= AVRPART_PARALLELOK;        current_part->flags |= AVRPART_PSEUDOPARALLEL;      }      free_token($3);    } |  K_RETRY_PULSE TKN_EQUAL retry_lines    {      switch ($3->primary) {        case K_RESET :          current_part->retry_pulse = PIN_AVR_RESET;          break;        case K_SCK :          current_part->retry_pulse = PIN_AVR_SCK;          break;      }      free_token($1);    } |/*  K_EEPROM { current_mem = AVR_M_EEPROM; }    mem_specs |  K_FLASH { current_mem = AVR_M_FLASH; }    mem_specs | */  K_MEMORY TKN_STRING     {       current_mem = avr_new_memtype();       strcpy(current_mem->desc, strdup($2->value.string));       free_token($2);     }     mem_specs     {       ladd(current_part->mem, current_mem);       current_mem = NULL;     } |  opcode TKN_EQUAL string_list {    {       int opnum;      OPCODE * op;      opnum = which_opcode($1);      op = avr_new_opcode();      parse_cmdbits(op);      current_part->op[opnum] = op;      free_token($1);    }  };yesno :  K_YES | K_NO;mem_specs :  mem_spec TKN_SEMI |  mem_specs mem_spec TKN_SEMI;mem_spec :  K_PAGED          TKN_EQUAL yesno    {      current_mem->paged = $3->primary == K_YES ? 1 : 0;      free_token($3);    } |  K_SIZE            TKN_EQUAL TKN_NUMBER    {      current_mem->size = $3->value.number;      free_token($3);    } |  K_PAGE_SIZE       TKN_EQUAL TKN_NUMBER    {      current_mem->page_size = $3->value.number;      free_token($3);    } |  K_NUM_PAGES       TKN_EQUAL TKN_NUMBER    {      current_mem->num_pages = $3->value.number;      free_token($3);    } |  K_MIN_WRITE_DELAY TKN_EQUAL TKN_NUMBER    {      current_mem->min_write_delay = $3->value.number;      free_token($3);    } |  K_MAX_WRITE_DELAY TKN_EQUAL TKN_NUMBER    {      current_mem->max_write_delay = $3->value.number;      free_token($3);    } |  K_PWROFF_AFTER_WRITE TKN_EQUAL yesno    {      current_mem->pwroff_after_write = $3->primary == K_YES ? 1 : 0;      free_token($3);    } |  K_READBACK_P1     TKN_EQUAL TKN_NUMBER    {      current_mem->readback[0] = $3->value.number;      free_token($3);    } |  K_READBACK_P2     TKN_EQUAL TKN_NUMBER    {      current_mem->readback[1] = $3->value.number;      free_token($3);    } |  opcode TKN_EQUAL string_list {    {       int opnum;      OPCODE * op;      opnum = which_opcode($1);      op = avr_new_opcode();      parse_cmdbits(op);      current_mem->op[opnum] = op;      free_token($1);    }  };%%#if 0static char * vtypestr(int type){  switch (type) {    case V_NUM : return "NUMERIC";    case V_STR : return "STRING";    default:      return "<UNKNOWN>";  }}#endifstatic int assign_pin(int pinno, TOKEN * v){  int value;  value = v->value.number;  if ((value <= 0) || (value >= 18)) {    fprintf(stderr,             "%s: error at line %d of %s: pin must be in the "            "range 1-17\n",            progname, lineno, infile);    exit(1);  }  current_prog->pinno[pinno] = value;  return 0;}static int which_opcode(TOKEN * opcode){  switch (opcode->primary) {    case K_READ        : return AVR_OP_READ; break;    case K_WRITE       : return AVR_OP_WRITE; break;    case K_READ_LO     : return AVR_OP_READ_LO; break;    case K_READ_HI     : return AVR_OP_READ_HI; break;    case K_WRITE_LO    : return AVR_OP_WRITE_LO; break;    case K_WRITE_HI    : return AVR_OP_WRITE_HI; break;    case K_LOADPAGE_LO : return AVR_OP_LOADPAGE_LO; break;    case K_LOADPAGE_HI : return AVR_OP_LOADPAGE_HI; break;    case K_WRITEPAGE   : return AVR_OP_WRITEPAGE; break;    case K_CHIP_ERASE  : return AVR_OP_CHIP_ERASE; break;    case K_PGM_ENABLE  : return AVR_OP_PGM_ENABLE; break;    default :      fprintf(stderr,               "%s: error at %s:%d: invalid opcode\n",              progname, infile, lineno);      exit(1);      break;  }}static int parse_cmdbits(OPCODE * op){  TOKEN * t;  int bitno;  char ch;  char * e;  char * q;  int len;  char * s, *brkt;  bitno = 32;  while (lsize(string_list)) {    t = lrmv_n(string_list, 1);    s = strtok_r(t->value.string, " ", &brkt);    while (s != NULL) {      bitno--;      if (bitno < 0) {        fprintf(stderr,                 "%s: error at %s:%d: too many opcode bits for instruction\n",                progname, infile, lineno);        exit(1);      }      len = strlen(s);      if (len == 0) {        fprintf(stderr,                 "%s: error at %s:%d: invalid bit specifier \"\"\n",                progname, infile, lineno);        exit(1);      }      ch = s[0];      if (len == 1) {        switch (ch) {          case '1':            op->bit[bitno].type  = AVR_CMDBIT_VALUE;            op->bit[bitno].value = 1;            op->bit[bitno].bitno = bitno % 8;            break;          case '0':            op->bit[bitno].type  = AVR_CMDBIT_VALUE;            op->bit[bitno].value = 0;            op->bit[bitno].bitno = bitno % 8;            break;          case 'x':            op->bit[bitno].type  = AVR_CMDBIT_IGNORE;            op->bit[bitno].value = 0;            op->bit[bitno].bitno = bitno % 8;            break;          case 'a':            op->bit[bitno].type  = AVR_CMDBIT_ADDRESS;            op->bit[bitno].value = 0;            op->bit[bitno].bitno = 8*(bitno/8) + bitno % 8;            break;          case 'i':            op->bit[bitno].type  = AVR_CMDBIT_INPUT;            op->bit[bitno].value = 0;            op->bit[bitno].bitno = bitno % 8;            break;          case 'o':            op->bit[bitno].type  = AVR_CMDBIT_OUTPUT;            op->bit[bitno].value = 0;            op->bit[bitno].bitno = bitno % 8;            break;          default :            fprintf(stderr,                     "%s: error at %s:%d: invalid bit specifier '%c'\n",                    progname, infile, lineno, ch);            exit(1);            break;        }      }      else {        if (ch == 'a') {          q = &s[1];          op->bit[bitno].bitno = strtol(q, &e, 0);          if ((e == q)||(*e != 0)) {            fprintf(stderr,                     "%s: error at %s:%d: can't parse bit number from \"%s\"\n",                    progname, infile, lineno, q);            exit(1);          }          op->bit[bitno].type = AVR_CMDBIT_ADDRESS;          op->bit[bitno].value = 0;        }        else {          fprintf(stderr,                   "%s: error at %s:%d: invalid bit specifier \"%s\"\n",                  progname, infile, lineno, s);          exit(1);        }      }      s = strtok_r(NULL, " ", &brkt);    }    free_token(t);  }  /* while */  return 0;}

⌨️ 快捷键说明

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