📄 avr_simulator.c
字号:
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 + -