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

📄 avr_simulator.c

📁 linux上实现的多种型号的AVR模拟器
💻 C
📖 第 1 页 / 共 4 页
字号:
				XmNleftAttachment,XmATTACH_FORM,				XmNbottomAttachment,XmATTACH_FORM,				XmNtopOffset,1,				XmNlabelString,string,				NULL);  XmStringFree(string);  edit_time=XtVaCreateManagedWidget("field",xmTextFieldWidgetClass,frame1_form,				    XmNtopAttachment,XmATTACH_FORM,				    XmNtopOffset,5,XmNbottomOffset,5,				    XmNbottomAttachment,XmATTACH_FORM,				    XmNleftAttachment,XmATTACH_WIDGET,				    XmNleftWidget,label,XmNleftOffset,0,				    XmNcolumns,6,XmNmaxLength,6,				    XmNvalue,"0,0000",XmNeditable,False,				    XmNcursorPositionVisible,False,NULL);    /* option menu */    option_menu=XmCreateOptionMenu(frame1_form,"option_menu_time",NULL,0);  menu_timeselection=XmCreatePulldownMenu(option_menu,"option",NULL,0);    string=XmStringGenerate(_("uS"),XmFONTLIST_DEFAULT_TAG,			  XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE);  button=XtVaCreateManagedWidget("uS",xmPushButtonGadgetClass,				 menu_timeselection,XmNlabelString,string,				 NULL);  XtAddCallback(button,XmNactivateCallback,		(XtCallbackProc)time_button_us_callback,NULL);  XmStringFree(string);  string=XmStringGenerate(_("mS"),XmFONTLIST_DEFAULT_TAG,			  XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE);  button=XtVaCreateManagedWidget("mS",xmPushButtonGadgetClass,                                 menu_timeselection,XmNlabelString,string,				 NULL);  XtAddCallback(button,XmNactivateCallback,		(XtCallbackProc)time_button_ms_callback,NULL);  XmStringFree(string);  string=XmStringGenerate(_("S"),XmFONTLIST_DEFAULT_TAG,			  XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE);  button=XtVaCreateManagedWidget("S",xmPushButtonGadgetClass,                                 menu_timeselection,XmNlabelString,string,				 NULL);  XtAddCallback(button,XmNactivateCallback,		(XtCallbackProc)time_button_s_callback,NULL);  XmStringFree(string);  string=XmStringGenerate("",XmFONTLIST_DEFAULT_TAG,			  XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE);  XtVaSetValues(option_menu,XmNsubMenuId,menu_timeselection,		XmNlabelString,string,XmNtopAttachment,XmATTACH_FORM,		XmNtopOffset,2,XmNbottomOffset,2,		XmNleftAttachment,XmATTACH_WIDGET,		XmNleftWidget,edit_time,XmNleftOffset,3,XmNlabelString,string,		XmNbottomAttachment,XmATTACH_FORM,		XmNmarginHeight,0,NULL);  XtVaSetValues(menu_timeselection,XmNshadowThickness,1,NULL);  XtManageChild(option_menu);  XmStringFree(string);    /* end option menu */    string=XmStringGenerate(_("Clock:"),XmFONTLIST_DEFAULT_TAG,			  XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE);  label=XtVaCreateManagedWidget("label clock",xmLabelGadgetClass,				frame1_form,				XmNtopAttachment,XmATTACH_FORM,				XmNbottomAttachment,XmATTACH_FORM,				XmNleftAttachment,XmATTACH_WIDGET,				XmNleftWidget,option_menu,				XmNtopOffset,1,XmNleftOffset,6,				XmNlabelString,string,				NULL);  XmStringFree(string);  edit_clock=XtVaCreateManagedWidget("field",xmTextFieldWidgetClass,				     frame1_form,				     XmNtopAttachment,XmATTACH_FORM,				     XmNtopOffset,5,XmNbottomOffset,5,				     XmNbottomAttachment,XmATTACH_FORM,				     XmNleftAttachment,XmATTACH_WIDGET,				     XmNleftWidget,label,XmNleftOffset,0,				     XmNrightAttachment,XmATTACH_FORM,				     XmNcolumns,9,XmNmaxLength,9,				     XmNvalue,"000000000",XmNeditable,False,				     XmNcursorPositionVisible,False,NULL);}void time_button_callback(Widget w,XtPointer client_data,XtPointer call_data){  XmString string;    if(type_time==uS)    {      type_time=mS;      string=XmStringGenerate(_("mS"),XmFONTLIST_DEFAULT_TAG,			      XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE);    }  else    {      type_time=uS;      string=XmStringGenerate(_("uS"),XmFONTLIST_DEFAULT_TAG,			      XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE);          }  XtVaSetValues(w,XmNlabelString,string,NULL);  XmStringFree(string);  update_main();}void time_button_s_callback(Widget w,XtPointer client_data,XtPointer call_data){  type_time=S;  update_main();}void time_button_us_callback(Widget w,XtPointer client_data,XtPointer call_data){  type_time=uS;  update_main();}void time_button_ms_callback(Widget w,XtPointer client_data,XtPointer call_data){  type_time=mS;  update_main();}void update_main(void){  char buf[10],buf2[60];  XmString string;  int n,sreg;    sprintf(buf,"%X",pc);  if(pc==-1) strcpy(buf,"FFFFFF");  fill_zero(buf,6);  XmTextFieldSetString(edit_pc,buf);  sprintf(buf,"%X",gpr_pointer[26]);  fill_zero(buf,2);  sprintf(buf2,"%X%s",gpr_pointer[27],buf);  fill_zero(buf2,4);  XmTextFieldSetString(edit_X,buf2);  sprintf(buf,"%X",gpr_pointer[28]);  fill_zero(buf,2);  sprintf(buf2,"%X%s",gpr_pointer[29],buf);  fill_zero(buf2,4);  XmTextFieldSetString(edit_Y,buf2);  sprintf(buf,"%X",gpr_pointer[30]);  fill_zero(buf,2);  sprintf(buf2,"%X%s",gpr_pointer[31],buf);  fill_zero(buf2,4);  XmTextFieldSetString(edit_Z,buf2);    buf2[0]=0;  sreg=get_port(SREG);  for(n=0;n<8;n++)    {      strcat(buf2,flags[n]);      if(sreg&(1<<(7-n)))	strcat(buf2,"1 ");      else strcat(buf2,"0 ");    }  string=XmStringGenerate(buf2,XmFONTLIST_DEFAULT_TAG,			  XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE);  XtVaSetValues(label_sreg,XmNlabelString,string,NULL);  XmStringFree(string);  switch(type_time)    {    case uS: sprintf(buf2,"%f:6",1.0/frequency*1E6*clocks);break;    case mS: sprintf(buf2,"%f:6",1.0/frequency*1E3*clocks);break;    case  S: sprintf(buf2,"%f:6",1.0/frequency*clocks);break;    }    XmTextFieldSetString(edit_time,buf2);  sprintf(buf2,"%d",clocks);  fill_zero(buf2,9);  XmTextFieldSetString(edit_clock,buf2);}void set_size_static_window(Widget w,XtPointer client_data,XtPointer call_data){  Dimension width,height;    XtRemoveCallback(w,XmNpopupCallback,(XtCallbackProc)set_size_static_window,		   NULL);  XtVaGetValues(w,XmNwidth,&width,XmNheight,&height,NULL);  XtVaSetValues(w,XmNmaxWidth,width,XmNminWidth,width,XmNminHeight,height,		XmNmaxHeight,height,NULL);}void file_selection_gen(Widget w,XtPointer client_data,XtPointer call_data){  XmString string;    string=XmStringGenerate("*.gen",XmFONTLIST_DEFAULT_TAG,			  XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE);  XtVaSetValues(*(Widget *)client_data,XmNpattern,string,NULL);  XmStringFree(string);  read_word=read_word_gen;}void file_selection_intel(Widget w,XtPointer client_data,XtPointer call_data){  XmString string;    string=XmStringGenerate("*.hex",XmFONTLIST_DEFAULT_TAG,			  XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE);  XtVaSetValues(*(Widget *)client_data,XmNpattern,string,NULL);  XmStringFree(string);  read_word=read_word_intel;}void file_selection_motorola(Widget w,XtPointer client_data,			     XtPointer call_data){  XmString string;    string=XmStringGenerate("*.s",XmFONTLIST_DEFAULT_TAG,			  XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE);  XtVaSetValues(*(Widget *)client_data,XmNpattern,string,NULL);  XmStringFree(string);  read_word=read_word_motorola;}void show_error(void){  XmString string;    string=XmStringGenerate(error_message,XmFONTLIST_DEFAULT_TAG,          			  XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE);              XtVaSetValues(error_dialog,XmNmessageString,string,NULL);                   XmStringFree(string);                                                       XtManageChild(error_dialog);}void reset(void){ clean_memory(); drawarea.current_line_deb=pc=clocks=num_call=watchdog_prescaler=0; XtSetSensitive(buttons[STOP].widget,False); XtSetSensitive(menu[DEBUG_MENU].sub_menu[STOP_BUTTON].button,False); debug=TRUE; draw(); debug=FALSE; hardware_init(); update_gpr_window(); full_update_sram_window(); full_update_io_window(); full_update_eeprom_window(); update_main();}void exec_command(void){  static int clock_old=0;  int temp;  if(!(strncmp(list_commands[pc].mnemocode,"call",4)&&       strncmp(list_commands[pc].mnemocode,"rcall",5)&&       strncmp(list_commands[pc].mnemocode,"icall",5)&&       strncmp(list_commands[pc].mnemocode,"eicall",6)))    num_call++;  if(!(strncmp(list_commands[pc].mnemocode,"ret",3)&&       strncmp(list_commands[pc].mnemocode,"reti",4))) num_call--;  clock_old=clocks; /* for normal halt in EEPROM access*/  if(!interrupt()) list_commands[pc].function_command();  else if(debug_flag&DEBUG_INTERRUPT)     {show_info(_("Interrupt"));thread_stop=1;}  temp=clocks;  for(clocks=clock_old;clocks<temp;clocks++)    hardware();  clock_old=clocks;}void use_project_callback(Widget w,XtPointer client_data, XtPointer call_data){  char *buf;  int n;  wacthdog_timeout=wacthdog_timeout_temp;  buf=XmTextFieldGetString(freq_field);  if((n=strtoul(buf,NULL,10))==0)    return;  frequency=n;  XtFree(buf);  buf=XmTextFieldGetString(watchdog_freq_field);  if((n=strtoul(buf,NULL,10))==0)    return;  wtd_freq=n;  XtFree(buf);  type_micro_old=type_micro; /* need only for tip windows */  XtVaGetValues(combo_proc,XmNselectedPosition,&type_micro,NULL);  XtUnmanageChild(project_window);  /* allocate data memory */  free(gpr_pointer);  if((gpr_pointer=malloc(controllers[type_micro].size_gpr+			 controllers[type_micro].size_io_reg+			 controllers[type_micro].size_sram))==NULL)    {      puts("use_project_callback(): can't allocate memory for 'gpr_pointer'");      exit(1);    }  io_pointer=&gpr_pointer[controllers[type_micro].size_gpr];      /* check absent of sram */  if(controllers[type_micro].size_sram==0)    {       XtVaSetValues(menu[MEMORY_MENU].sub_menu[SRAM_BUTTON].button,XmNset,		    XmUNSET,NULL);      XtSetSensitive(menu[MEMORY_MENU].sub_menu[SRAM_BUTTON].button,False);      sram_pointer=NULL;    }  else    {      sram_pointer=&io_pointer[controllers[type_micro].size_io_reg];      XtSetSensitive(menu[MEMORY_MENU].sub_menu[SRAM_BUTTON].button,True);    }  /* allocate EEPROM memory*/  free(eeprom_pointer);  if((eeprom_pointer=malloc(controllers[type_micro].size_eeprom))==NULL)    {      puts("use_project_callback(): \can't allocate memory for 'eeprom_pointer'");      exit(1);    }  clean_memory();  /* for more fast searching data of ports */  for(n=0;n<MAX_CODE_PORTS;n++) index_ports[n]=-1;  for(n=0;n<MAX_CODE_PINS;n++) index_pins[n]=-1;  for(n=0;n<MAX_CODE_FLAGS;n++) index_flags[n]=-1;  for(n=0;controllers[type_micro].io_registers[n].code!=-1;n++)    index_ports[controllers[type_micro].io_registers[n].code]=n;  for(n=0;controllers[type_micro].pins[n].code!=-1;n++)    index_pins[controllers[type_micro].pins[n].code]=n;  for(n=0;controllers[type_micro].flags[n].flag_code!=-1;n++)    index_flags[controllers[type_micro].flags[n].flag_code]=n;  /*    if(load_flash(NULL)) {pixmap=CreatePixmap();show_error();} *//*    if(load_eeprom(NULL)) show_error(); */    hardware_init();  pc=-1;  XtSetSensitive(buttons[STOP].widget,False);  init_windows_memory();  init_memory_window();  update_gpr_window();  full_update_sram_window();  full_update_io_window();  full_update_eeprom_window();  full_update_memory_window();  update_main();}void show_info(char *message){  XmString string;  string=XmStringGenerate(_(message),XmFONTLIST_DEFAULT_TAG,			  XmCHARSET_TEXT,_MOTIF_DEFAULT_LOCALE);  XtVaSetValues(info_dialog,XmNmessageString,string,NULL);  XmStringFree(string);  XtManageChild(info_dialog);}void info_close_callback(Widget w,XtPointer client_data, XtPointer call_data){  pthread_kill(thread,SIGCONT);}

⌨️ 快捷键说明

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